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って、ところどころ微妙に改悪されているのがすごく腹立たしい…。
参考