CakePHPで繰り返し使うレイアウトはElementsを使いましょう

こんにちは!ぐちです。

またまたCakePHPの小技のご紹介です。

部品化

プログラミングに共通することですがコードはできるだけ部品化して使いまわせるようにしたほうがメンテナンス性も上がりますし流用もしやすくなりますよね。もちろん結合度は低くなうようにパラメータを渡すなど工夫する必要はありますが。

ビジネスロジック部分は意識してクラス化したりメソッド化したりされているとは思いますがビュー部分も同じく部品化できる部分はしたほうがいいですよね。

Elements

CakePHPには上記のようにビュー部分の固定のレイアウトを部品化して使いまわせるような仕組みがあります。もちろんパラメータとして値も渡せるので汎用性の高い部品を作ることが可能です。

以前CakePHPでSQLやXMLなどを外だしにする方法で書いたようなイメージに使いですね。

app/View/Elements/配下にgrid.ctp(Smartyであればgrid.tplなど)のようなファイルを設置します。Viewから呼び出される部品ファイルとなります。

<div>グリッドパーツ</div>
<hr>

そしてこの部品を使いたい箇所で下記のようにElementファイル名を指定して呼び出します。

<!-- Smartyの場合 -->
{$this->element('grid')}

<!-- 標準ビューの場合 -->
<?php echo $this->element('grid'); ?>

パラメータを渡す

より汎用性を高めるために動的な部分はパラメータで渡すように記述し呼び出し時に値を渡すようにすることもできます。

<div>{$msg}</div>
<hr>
<!-- Smartyの場合 -->
{$this->element('grid', ["msg" => "パラメータ"])}

<!-- 標準ビューの場合 -->
<?php echo $this->element('grid', array("msg" => "パラメータ")); ?>

このようにすることで動的な部分はパラメータで渡し、静的な部分は部品化して繰り返し使い回すことができます。

では今回はこの辺で。