#CakePHP3 のFormHelperが生成するHTMLをカスタマイズしたい
CakePHP3のFormHelperを使って以下の様にラジオボタンの生成を書くと、ラベルを自動生成します。
<?= $this->Form->radio(.....
これは、これで便利に使える場面がありますが、スタイルシートを利用してradioタグの見た目を変えたい場合や、システム全体でラベル表示が要らない機能(大きなお世話)的な機能となります。
CakePHP2までは、「’legend’ => false」をオプションに入れとけばラベルの作成を抑止できたのですが、CakePHP3ではできません。
そこで、ラベルを作らなくするためにはどうするかというと、ラベルを作成しないテンプレートを準備して、デフォルトのテンプレートを置き換えてしまします。(デフォルトのテンプレートは、Cake\View\Helper\FormHelperクラスの$_defaultConfig[’templates’]に定義があります。)
1.テンプレートの準備
新しいテンプレートを、「config」ディレクトリに、app_form.phpファイル(ファイル名はたぶん適当で構わない)を作成します。
app_form.phpの中は、以下のように、適用したい差分を書いていく。
(内容については、上記で示した、標準テンプレートを参考にしてください。
ここも参考になるかと思います。)
<?php
return [
'inputContainer' => '{{content}}',
'label' => '',
'input' => '<input type="{{type}}" name="{{name}}"{{attrs}} class="form-control">',
'radioWrapper' => '{{input}}',
];
2. 1.で作成したテンプレートの適用
App\View\AppViewに、手順1で作成したテンプレートをinitializeメソッドで読み込ませます。
class AppView extends View
{
public function initialize()
{
$this->loadHelper('Form', [
'templates' => 'app_form',
]);
}
}
以上で、システム全体で、新しいテンプレートを使用してHTMLが生成されます。