やりたかったこと
みたいなformが作りたかったのです。
作り方
基本的なformの作り方は、公式リファレンスを見ていただくとして・・。
inputの部分ですが、こんな感じに書くといけます。
// $iconsには、***.pngというファイル名が配列で格納されており、
// webroot/imgに***.pngが置かれてあるとします。
echo $this->Form->radio('icon', array_map(function ($icon) {
return ['value' => $icon, 'text' => $this->Html->image($icon, ['alt' => $icon])];
}, $icons), ['escape' => false]);
どうなっているかというと、まずFormHelperのradio()の引数はこんな感じになってます。
FormHelper.php
public function radio($fieldName, $options = [], array $attributes = []) {
...
}
コツとしては、\$optionsに、textで画像のhtmlを渡すこと。
もう1つ目のコツは、引数の$attributesに、escapeをfalseで渡すことです。
こうすることで、HtmlHelperで生成されたimgのhtmlが、そのままradio用の画像として使われます。
escapeを指定しないと、生成されたhtmlがサニタイズされるので、文字列のまま表示されます。
注意点
逆に言うと、escapeをfalseにするとサニタイズされません。
具体的には、valueとtextが対象となります。
使用するときは、十分気をつけてください。
上記の例だと、\$iconをサニタイズしたほうが良いと思います。
$icon = h($icon);