CakePHP4にてFormHelperでlabelやinputをラップする方法
#CakePHP

created: 2025/01/26, modified: 2025/02/02

標準のサムネイル 2024-06

CakePHP 4のFormHelperを使ってフォームを作成すると、labelやinputはデフォルトの形式で出力されます。個別のdivでラップしてクラスを付けたい場合、カスタマイズが必要です。wrapオプションかカスタムテンプレートかの方法があり、カスタムテンプレートは指定する場所で、「Templateファイル」「コントローラー」「ビュービルダー」があり、柔軟に実装できます。

wrapオプションを使う

CakePHP 4では、$this->Form->control()のwrapオプションを使用すると、全体を特定のdivでラップできます。このコードは通常、Templateファイル(例: templates/Pages/home.php など)に記述します。

コード例
{[gist usual-tools/f11bf983baeee087ea82283d37a3bfa7]}

カスタムテンプレートを利用する

より柔軟にカスタマイズしたい場合、setTemplates()でテンプレートを変更できます。
指定する場所は「Templateファイル」「コントローラー」「ビュービルダー」があります。

Templateファイル

コード例
Templateファイル(例: templates/Pages/home.php)

コントローラーで設定する

フォームのテンプレートをコントローラーで指定すると、そのコントローラーの全てのビューに適用されます。

コード例
特定のコントローラーの initialize() メソッド(例: src/Controller/UsersController.php)

ビュービルダーでグローバルに適用する

アプリ全体でフォームのスタイルを統一したい場合、AppViewで設定すると便利です。

コード例
src/View/AppView.php

結びに

CakePHP 4 で label や input を divでラップする方法には、複数のアプローチがあります。

方法 適用範囲 設定場所
wrapオプション 個別のコントロール control()のオプション
カスタムテンプレート(Templateファイル) 一時的な適用 setTemplates()
カスタムテンプレート(コントローラー) コントローラー全体 initialize()
カスタムテンプレート(ビュービルダー) アプリ全体 AppView.php