Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away