created: 2025/01/26,
modified: 2025/02/02
CakePHP 4のFormHelperを使ってフォームを作成すると、labelやinputはデフォルトの形式で出力されます。個別のdivでラップしてクラスを付けたい場合、カスタマイズが必要です。wrapオプションかカスタムテンプレートかの方法があり、カスタムテンプレートは指定する場所で、「Templateファイル」「コントローラー」「ビュービルダー」があり、柔軟に実装できます。
CakePHP 4では、$this->Form->control()のwrapオプションを使用すると、全体を特定のdivでラップできます。このコードは通常、Templateファイル(例: templates/Pages/home.php など)に記述します。
コード例
{[gist usual-tools/f11bf983baeee087ea82283d37a3bfa7]}
より柔軟にカスタマイズしたい場合、setTemplates()でテンプレートを変更できます。
指定する場所は「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 |