1
0

More than 1 year has passed since last update.

CakePHP4 での setTemplates の勘違い

Posted at

CakePHP4 での setTemplates で若干ハマったので記事として残しておきます。
CakePHP4+setTemplates で検索すると多くの文献では、

$this->Form->setTemplates([
    'inputContainer' => '{{content}}',
    'label' => false,
]);

のように不要なオプションを出力しない書き方として false にて指定していることが多く見つけられます。
が、これは型宣言があいまいなPHP8より前のPHPバージョンでのみ動く書き方で、型宣言が厳密になったPHP8以降では動作せず \src\View\StringTemplate.php でエラーがでます。
image.png

開発者に確認したら上記説明に加えて、setTemplatesで指定できるのは文字列のみじゃ、と怒られました。
なので

$this->Form->setTemplates([
    'inputContainer' => '{{content}}',
    'label' => '',
]);

と記述するのが正しいそうです。気持ち悪っ。。。

一方で、Form->control では

<?= $this->Form->control('name', ['label' => false, 'class' => 'form-select form-select-sm']) ?>

のようにフィールドセットに対してfalseで出力しない書き方が公式にあります。
https://book.cakephp.org/4/ja/views/helpers/form.html
image.png

setTemplates は本来この Form->control で出力されるタグに対するものなのですから、単純に考えたらそのまま記述移植するじゃないですか。
なので setTemplates でも false で記述してもいいようにしてほしかったですね!

環境:PHP8.2+Cake4.4.10

1
0
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
1
0