CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
2025/01/31
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5でオリジナルのヘルパーを作成し、そのヘルパー内で HTMLヘルパーや Formヘルパーなどを使用する場合もあるかと思います。
https://book.cakephp.org/5/ja/views/helpers.html#id10
ですが、上記の日本語の Cookbookは間違っておりまして、そのままでは動作しません。
また、CakePHP4のソースをそのままコピペしても動作しませんので、併せてご注意ください。(上記の Cookbookのソースは CakePHP4の時のものとなっています。)
次項が正しいソースとなりますのでご注意ください。
CakePHP5でヘルパーから他のヘルパーを読み込む際の正しいソースコード
/src/View/Helper/LinkHelper.php
上記に「LinkHelper.php」というオリジナルのヘルパーファイルを作成したとします。
この時の正しいソースコードは下記となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace App\View\Helper; use Cake\View\Helper; class LinkHelper extends Helper { protected array $helpers = ['Html']; public function makeEdit($title, $url) { // 出力に HTML ヘルパーを使用 // 整形されたデータ: $link = $this->Html->link($title, $url, ['class' => 'edit']); return '<div class="editOuter">' . $link . '</div>'; } } |
CakePHP5の日本語 Cookbookの間違い箇所、および、CakePHP4からの変更点
https://book.cakephp.org/5/ja/views/helpers.html#id10
下記のソースコードは上記の CakePHP5の日本語 Cookbookに記載があるソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace App\View\Helper; use Cake\View\Helper; class LinkHelper extends Helper { public $helpers = ['Html']; public function makeEdit($title, $url) { // 出力に HTML ヘルパーを使用 // 整形されたデータ: $link = $this->Html->link($title, $url, ['class' => 'edit']); return '<div class="editOuter">' . $link . '</div>'; } } |
先に紹介した正しいソースコードと何が違うかというと、8行目の「$helpers
」の前に型を定義する「array」があるかどうか、です。
「array」を付けると正しく動作します。
1 2 3 4 5 |
//【正しい記述】 protected array $helpers = ['Html']; //【間違いの記述】 public $helpers = ['Html']; |
「protected」か「public」かの違いもありますが、これはどちらでも動作します。
(「protected」と「public」の違いが分からない方は別途調べてみてください。)
Fatal error: Type of App\View\Helper\LinkHelper::$helpers must be array
のエラーメッセージが表示される
間違っている方の記述で実行すると、下記のようなエラーメッセージが表示されます。
「Fatal error: Type of App\View\Helper\LinkHelper::$helpers must be array (as in class Cake\View\Helper) in C:\xampp\htdocs\src\View\Helper\LinkHelper.php on line 6
」
「$helpers
は配列型である必要があるよ」というエラーなので、型を指定すればよさそうだということに気づく可能性はゼロではありませんが、公式の Cookbook通りに記述しても動作しないので、延々と悩んでしまいました。
ちなみに、最初の正しいソースコードは、下記の英語版の Cookbookに記載があるソースコードです。
https://book.cakephp.org/5/en/views/helpers.html#including-other-helpers
というワケで、日本語の Cookbookで動作しない場合は、英語版の Cookbookを参照してみるのもいいかもしれません。
CakePHP5の日本語 Cookbookの間違いの原因は CakePHP4のソースコードのままである点
なぜ、日本語の公式 Cookbookのソースコードが間違っているか、というと CakePHP4のヘルパーのソースコードがそのままコピペされていて、CakePHP5版に変更されていないためです。
CakePHP4 Cookbook ヘルパー
https://book.cakephp.org/4/ja/views/helpers.html#id10
というワケで、オリジナルのヘルパーから他のヘルパーを読み込む処理で、CakePHP4と CakePHP5との違いは、ここで紹介した「$helpers
」の型指定の「array」の有無ということになります。
CakePHP4のソースコードを利用して CakePHP5の開発を行う際は、この点を注意する必要があるということになりますね。
CakePHP5の関連記事
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
getParam('action')
で取得するアクション名は別関数に移動しても不変CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
その他の「CakePHP5」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4でcontrollerで実行したバリデーションエラーをmodelのにマージする方法
CakePHP4でcontrollerで実行したバリデーションの結果をModelのバリデーション結果に追加するメソッド「setError()」「setErrors()」の使い方の解説。
-
-
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。
-
-
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP4、5系の認証処理でログイン認証が通らない場合の確認方法、確認箇所を解説。ログ出力し、ステータスを確認するが、ステータスの内容も紹介。それはそのままusernameを変更する際のポイントでもある。
-
-
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合
ID以外のカラムでアソシエーション(連携)させるための考え方とサンプルソースを用いての説明を行っています。
-
-
CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定
CakePHPのアップロードするファイル名を乱数で変更しセキュリティを高める方法を解説。
-
-
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でレコードを追加、更新(Insert、Update)する記述方法を解説。1件ずつ処理、全件をまとめて処理、条件に該当する複数件のレコードを処理方法をサンプルコードを用いて解説。
-
-
CakePHP3でテーブルにカラム(項目)を追加したときに変更するポイントのまとめ
CakePHP3でシステム開発をする際、途中でカラムを追加した場合に何を変更すればいいかを確認。カラムを追加する前後で Bakeした結果を比較し、変更になった点をリストアップした。
-
-
CakePHP3のForm Helperの使い方のまとめ
CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。
-
-
CakePHPを学ぶ際にはオブジェクト指向を学ぼう
CakePHPはオブジェクト指向で書かれていますので、CakePHPを学ぶにはオブジェクト指向も学びましょう。
-
-
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製UsersプラグインのCakePHP4版の紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。