Zend_Layout を使ってみる
最近 Zend Framework(PHP の MVC なウェブアプリケーションフレームワーク)の勉強をしています。バージョン 1.5 から Zend_Layout というモジュールが使えるようになったので、試しに使ってみました。
とりあえずドキュメントにしたがってアプリケーションの雛形を作成します。
http://framework.zend.com/manual/ja/zend.controller.html#zend.controller.quickstart
application/ controllers/ IndexController.php ErrorController.php views/ scripts/ footer.html header.html layout.html index/ index.phtml error/ error.phtml html/ .htaccess index.php
html/.htaccess
Zend Framework は Apache の mod_rewrite 機能を使います。mod_rewrite が無効になっているなら、有効にしてください。
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
html/index.php
すべてのリクエストを受け付けるフロントコントローラです。
<?php // オートローダ有効化 require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload(); // レイアウト有効化 Zend_Layout::startMvc(); // アプリケーション実行開始 Zend_Controller_Front::run('../application/controllers');
application/controllers/IndexController.php
デフォルトのコントローラです。クラス名が指定されなかったときは、このコントローラの indexAction が呼ばれます。
<?php class IndexController extends Zend_Controller_Action { public function indexAction() { } }
application/controllers/ErrorController.php
エラー時に呼ばれるコントローラです。指定したクラスやメソッドが存在しないときなどにこのコントローラの errorAction が呼ばれます。
<?php class ErrorController extends Zend_Controller_Action { public function errorAction() { } }
application/views/scripts/header.phtml
サイトのヘッダー部分です。
<html> <body>
application/views/scripts/footer.phtml
サイトのフッター部分です。
</body> </html>
application/views/scripts/layout.phtml
サイト全体を表示するテンプレートです。
<?= $this->render('header.phtml') ?> <?= $this->layout()->content ?> <?= $this->render('footer.phtml') ?>
application/views/scripts/index/index.phtml
IndexController 用のテンプレートです。
ほげほげ
application/views/scripts/error/error.phtml
ErrorController 用のテンプレートです。
エラー
Zend_Layout::startMvc(); を呼ぶと、すべてのアクションのあとで、layout.phtml を使ってレンダリングがされるようになります。各アクション固有のテンプレートのレンダリング結果は $this->layout()->content に入っています。
もし、Zend_Layout を使いたくない場合は、そのアクション内で $this->_helper->layout->disableLayout(); を呼べばよいようです。