Edited at

CakePHP3 のFormHelperが生成するHTMLをカスタマイズしたい

More than 3 years have passed since last update.


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が生成されます。