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の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法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」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。
-
-
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHPのログ出力方法の解説。app.phpにログ設定をし、スコープやレベルを指定してログ出力を振り分ける方法、CakePHP4で配列出力にはvar_exportが必要なことなどを解説。
-
-
CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法
CakePHP3でcomposerを使ってパッケージ(ライブラリ、プラグイン)をインストールする方法の解説。PHPを使うのはCakePHP3が初めてというような方への使い方から解説。
-
-
CakePHP 2.x系 Viewでのコメントの記述方法など
CakePHPにおいて View、ctpファイルでコメントを記述する方法を解説。
-
-
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3でパンくずの指定方法の解説。2つのヘルパーがあるが簡単なHTMLヘルパーを使った方法を、実際の状況に合わせて3つのパターン(エレメント化、ブロック化)にして解説。
-
-
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。
-
-
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
-
CakePHP3のインストールでURL rewriting……のエラーが!その解決方法解説
CakePHP3をインストールしたら URL rewriting is not properly configured.のエラーが。原因は.htaccessが有効になっていないこと。httpd.confに設定を追加すればOK。
-
-
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。
-
-
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。