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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!
-
-
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。
-
-
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。
-
-
CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」
CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。
-
-
CakePHP 2.3でファイルのアップロード処理を作る
CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。
-
-
CakePHP4で「app_local.php」「.env」を利用して環境ごとの定数を振り分ける方法
CakePHP4で.env、app_local.phpに定数を定義してそれを呼び出す方法の解説。Gitでは管理せず本番環境と開発環境とで異なる定数を定義するためそれを利用する方法。
-
-
国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法
CakePHP4で定数に変数を埋め込み、翻訳機能「__()」で変数に値を入れる方法を紹介。定型の文章の一部だけを置換したい場合に利用すると便利。
-
-
CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法
CakePHP3でcomposerを使ってパッケージ(ライブラリ、プラグイン)をインストールする方法の解説。PHPを使うのはCakePHP3が初めてというような方への使い方から解説。
-
-
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3にComposerからインストールできないプラグインやライブラリなどを利用する方法、vendorにファイルを設置し、composer.jsonを更新し、それを呼び出す方法を詳細に解説。
-
-
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。