CakePHP3 rails のように部分テンプレートを使用する方法


Rails を真似て作られたといわれている CakePHP で、 部分テンプレートの使用例を説明します。 英語ドキュメントを見ると正しく設定できるのですが、 日本語ドキュメントは古い状態なので、日本語ドキュメントを見ていると解決できません。

環境

  • PHP 5.5.9
  • CakePHP 3.0.9

Rails での 部分テンプレート の使い方

rails では 例えば rails g scaffold xxxx で自動的に作成した場合、 _form.html.erbというファイルが作成されます。 これが部分テンプレートです。 ファイルの先頭は _ になっており、 new.html.erb などの中で次のように呼び出します。

この部分テンプレートを CakePHP 3 ではどう書くの? というのが今回のテーマです。

CakePHP 3 での 部分テンプレート の使い方

CakePHP 3 では Element というのを使います。 Element の簡単な説明は、 CakePHP 3 のドキュメントに次のように書かれています。

elements: small, reusable bits of view code. Elements are usually rendered inside views.

部分テンプレートは、 Element ファイル を作成して Template ファイル 内 で呼び出すことで実現できます。

Element

Element ファイルは src/Template/Element/ 内に配置します。 プラグイン内に作る場合は そのプラグインの中に src/Template/Element/ というディレクトリを使って配置してください。 たとえば src/Template/Element/form.ctp なんてファイルを作ります。

そしてこれをテンプレートファイルから呼び出します。 次のように。

ディレクトリで階層分けする

rails g scaffold xxxx ではモデルに合わせて _form.html.erbもディレクトリに分かれて配置されました。 CakePHP3 でもそうあってほしいですよね。

ディレクトリを自由に作って階層分けし、次のように呼び出すことができます。

プラグインの中で作った場合

プラグインの中で element を作った場合、 その element は同じプラグインの中からなら同じようにして呼び出せます。 別のプラグインにある場合は次のようにして呼び出します。

element については このほかに キャッシュ 機能 があります。 詳しくは CakePHP 3 のドキュメントをご参照ください。