CakePHP3でコントローラーの共通処理(コンポーネント)

スポンサーリンク

CakePHP3 で Controller の Component(コントローラーで共通して使うコンポーネント)を作成していたところ、以下のエラーに遭遇しました。

CakePHP 3 についてはまだウェブ上の情報が少ないこともあって、解決するのに苦労したのでメモ。Rails でもそうですけど、名前空間の解決とかロードパスとか、その辺りはウェブアプリケーションフレームワークのはまりやすい箇所のように感じます。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
CakePHP 3.1.1
PHP 5.5.19

コントローラーのコンポーネント作成

CakePHP でコントローラーで使いまわしたいような共通の処理は、src/Controller/Component 以下に作成する。例として、挨拶のコンポーネント(GreetingComponent)を作成してみます。

src/Controller/Component/GreetingComponent.php

hello world! を返す hello() メソッドを持つコンポーネントです。実は、この GreetingComponent での namespace と use の設定が当初上手くいかず、それが冒頭のエラー発生の原因でした。上記のように正しく書くとエラーが消えます。

コンポーネントを使うコントローラーを作成

UsersController から GreetingComponent を使います。

src/Controller/UsersController.php

$components に使うコンポーネントを配列で指定する。クラス名から Component を除いた名前で指定します。その後は、$this->Greeting でコンポーネントにアクセスできる。

ビューとルーティング

続いて、以下のビューファイルとルーティングを作成。

src/Template/Users/hello.ctp

config/routes.php

サーバーを起動して動作確認

CakePHP 開発環境のサーバー起動。

localhost:8765/users/hello にアクセスして、「hello world!」が表示されればOKです。

最初冒頭のエラーが発生した後に、色々といじって試していたら、以下のメッセージがブラウザのエラー画面で表示されました。このメッセージのおかげで、正しい namespace と use の設定の書き方が分かった。

以上 CakePHP 3 で、コントローラーのコンポーネント作成についてでした。

スポンサーリンク
私は Ruby on Rails の前は、PHP & CakePHP を使っていました(今も使いますけど)。PHP についてはオライリーの本を中心に軽く10冊以上は読み込みました。
 
スポンサーリンク

Leave Your Message!