LoginSignup
23
24

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-17

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

23
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
24