CakePHP3でフォームを書く際に、divとかラベルとかの制御はそれぞれのメソッドのパラメータからできたんですが、CakePHP3になってなんかうまくいかないことが多い。
ということで、どうやって変更するかというと…
$myTemplates = [ 'inputContainer' => ' <div class="form-control">{{content}}</div> ', ]; $this->Form->setTemplates($myTemplates); // 3.4 より前 $this->Form->templates($myTemplates);
$myTemplatesはどうやって書けばいいんだよというのは
vendor\cakephp\cakephp\src\View\Helper\FormHelper.php
$_defaultConfig[‘templates’]に書いてあるのを参考にすればなんとなくわかるかと思います。
で、こんなのいちいちめんどくさーい。という場合はどうするか。
各ControllerもしくはAppControllerでhelperを呼び出す際にデフォルト値を渡してあげればよいようです。
例えばこんな感じ
class AppController extends Controller { public $helpers = [ 'Html', 'Form' => [ 'templates' => [ // Used for button elements in button(). 'button' => '<button{{attrs}}>{{text}}</button>', // Used for checkboxes in checkbox() and multiCheckbox(). 'checkbox' => '<input type="checkbox" name="{{name}}" value="{{value}}"{{attrs}}>', ・・・・以下省略・・・・ //Confirm javascript template for postLink() 'confirmJs' => '{{confirm}}', ], ] ]; }
渡す値は
vendor\cakephp\cakephp\src\View\Helper\FormHelper.php
から持ってきましょう。
因みに、Helperの初期値は必要な部分だけ記述すればマージされると説明書にはあるのですが、どうもマージされるのは1次元までのようで2次元になっている本項目の場合、必要なところだけ書くとエラーになります。全部書かないとダメというのが注意点。
とりあえず、FormHelper.phpから持ってきたパラメータを全部コピーして、必要なところを書き換えるとよいかと思います。
まぁ、setTemplates()で動的に変えることはできるけど、元に戻したりしないといけないので、ものすごく面倒。
cake2の場合は、クラス名とか替えられたのであるていど自由にできたのですが、cake3ではできなくなりました。(できないというか、できたりできなかったりパラメータに一貫性がない・・・)
だから、この方法でヘルパーでの出力は最低限にして、修飾は手書きで対処したほうがよさそうな気がします。
なんだか、CakePHP3って、ところどころ微妙に改悪されているのがすごく腹立たしい…。
参考