CakePHP 4 で特定のラジオボタン出力だけでレイアウトをフルカスタムする
通常であればフォームヘルパー経由でラジオボタンを作成するはず。
しかし、通常のフォームは以下の様な構造で出力されてしまう。
<div class="input radio"> <label for='xxx1'> <input type='radio' id='xxx1' name='xxx1' /> Hoge </label> </div>
これをどうにか
<div class="input radio"> <div class='wrapper'> <input type='radio' id='xxx1' name='xxx1' value='Hoge' /> <label for='xxx1'> Hoge </label> </div> </div>
こうしたい。
そこで、実際にこんな出力が出るように調査してみたログ。
で、目をつけたのが これ です。
で、具体的にどう書くのかをペタリ。
明日コピペできるコードをあなたに
$this->Form->control( 'xxx', // Id 値 { 'type' => 'radio', // input タイプはラジオボタン 'options' => ['Hoge', 'Fuga'], // 選択値 'nestedInput' => false, // ネストレイアウト(label の中に input タグを置く設定)を false 'templates' => [ // 出力するテンプレートの上書き // input タグの出力テンプレート上書き 'radio' => '<input type="radio" name="{{name}}" value="{{value}}"{{attrs}} />', // ラベルの出力上書き。 'nestingLabel' => '{{hidden}}{{input}}<label {{attrs}}>{{text}}</label>', // 上2つのラッパー 'radioWrapper' => '<div class='wrapper'>{{label}}</div>' ] } );
とりあえずこれで意図通りの出力ができるようになった。
というか公式が「暗黙の了解でわかるんだろう?」的な説明不足で、初見では具体的な設定方法がマジ読み取れん(汗