ずっと、FormHelper
の$_defaultConfig
のtemplates
のlabel
とradioWrapper
を変更して思った通りに出力されないなって悩んでいたんだけど、nestingLabel
とradioWrapper
を直せばよかった。100マン年悩んでいたのが浄化した。
FormHelperでのデフォルト定義は、以下のようになっています。
vendor/cakephp/cakephp/src/View/Helper/FormHelper.php
// snip
protected $_defaultConfig = [
/// snip
'templates' => [
'label' => '<label{{attrs}}>{{text}}</label>',
'nestingLabel' => '{{hidden}}<label{{attrs}}>{{input}}{{text}}</label>',
// snip
これを、以下のようにテンプレートで指定し直す。
hoge.ctp
<?php
$this->Form->templates([
'nestingLabel' => '{{hidden}}{{input}}<label{{attrs}}>{{text}}</label>',
'radioWrapper' => '<div class="wrapper-radio">{{label}}</div>',
]);
?>
<?= $this->Form->radio('job', ['1'=>'アルバイト','2'=>'正社員']);?>
出力
hoge.html
<input type="hidden" name="job" value="">
<div class="wrapper-radio">
<input type="radio" name="job" value="1" id="job-1">
<label for="job-1"> アルバイト </label>
</div>
<div class="wrapper-radio">
<input type="radio" name="job" value="2" id="job-2">
<label for="job-2">正社員</label>
</div>
参考