例えば、samplesController.php に index アクションを作成します。
この場合のテンプレートファイルは、/src/Template/Samples/index.ctp になるかと思います。
「$this->set()」でテンプレートに値を渡すと、「index.ctp」に記述している内容に従い値を編集して画面を生成するかと思います。
次に、samplesController.php に検索処理として search アクションを追加します。
この searchアクションは ajaxによって起動する想定です。
ざっくりとしたソースコードは以下のような感じになるかと思います。
php
1class SamplesController extends AppController 2{ 3 public function index() { 4 $samples = $this->paginate($this->Samples); 5 $this->set(compact('samples')); 6 } 7 8 public function search() { 9 try { 10 if ($this->request->is('ajax')) { 11 12 $dataArray = $this->Samples->find(); 13 14 foreach($dataArray as $dataLine){ 15 // ここで HTMLの編集 16 $html .= '<table>'; 17 : 18 : 19 $html .= '</table>'; 20 } 21 } 22 } 23 retun $html; 24 } 25} 26
現在、searchアクションの「ここで HTMLの編集」という箇所に、index.ctpに記述している一覧表を生成する HTMLのソースコードとほぼ同じものを記述しています。
しかし、この方法では HTMLに修正が入った場合は index.ctp、searchアクション内の HTMLのコードの両方を更新する必要が発生します。
非効率ですし、ミスが発生する要因にもなります。
そこで、「index.ctp」のソースコードを controller側で利用することはできないものか、と考えてみましたが(require()や file_get_contents()などでテンプレートを取得)、うまくいきませんでした。
searchアクション内で、すでにある「index.ctp」を利用して HTMLを生成する方法はないのでしょうか?
(実際にやる場合は一覧表の部分のみを elementファイルに分割して作成することになるのだろうとは思っていますが。)
searchアクションで ajaxを使わずに検索を実行すれば、「$this->set()」でデータを渡せて普通にテンプレートが使えるのになぁとは思うわけですが、ajaxを使うような設計になってしまっているため、いまさらそこを変更することは難しい状況です。
回答1件
あなたの回答
tips
プレビュー