目次
Rails を真似て作られたといわれている CakePHP で、 部分テンプレートの使用例を説明します。 英語ドキュメントを見ると正しく設定できるのですが、 日本語ドキュメントは古い状態なので、日本語ドキュメントを見ていると解決できません。
環境
- PHP 5.5.9
- CakePHP 3.0.9
Rails での 部分テンプレート の使い方
rails では 例えば rails g scaffold xxxx
で自動的に作成した場合、 _form.html.erb
というファイルが作成されます。 これが部分テンプレートです。 ファイルの先頭は _
になっており、 new.html.erb
などの中で次のように呼び出します。
1 |
<%= render 'form', var: @value %> |
この部分テンプレートを 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
なんてファイルを作ります。
そしてこれをテンプレートファイルから呼び出します。 次のように。
1 |
<?= $this->element('form', ['var' => $value] ?> |
ディレクトリで階層分けする
rails g scaffold xxxx
ではモデルに合わせて _form.html.erb
もディレクトリに分かれて配置されました。 CakePHP3 でもそうあってほしいですよね。
ディレクトリを自由に作って階層分けし、次のように呼び出すことができます。
1 2 |
// when you create src/Template/dir/form.ctp <?= $this->element('dir/form', ['var' => $value] ?> |
プラグインの中で作った場合
プラグインの中で element を作った場合、 その element は同じプラグインの中からなら同じようにして呼び出せます。 別のプラグインにある場合は次のようにして呼び出します。
1 2 |
// when you create src/Template/dir/form.ctp in plugin directory <?= $this->element('PluginName.dir/form', ['var' => $value] ?> |
element については このほかに キャッシュ 機能 があります。 詳しくは CakePHP 3 のドキュメントをご参照ください。