2
我想了解Zend應用程序的工作流程。爲了測試我定義:Zend Framework輸出渲染順序
控制器 - IndexController.php:
public function preDispatch() {
error_log('IndexController::preDispatch');
echo 'IndexController::preDispatch <br />'; }
public function init() {
error_log('IndexController::init');
echo 'IndexController::init <br />'; }
public function indexAction() {
error_log('IndexController::indexAction');
echo 'IndexController::indexAction <br />'; }
查看腳本 - index.phtml:
<?php
echo'index view script - echo';
$this->title = "ZF Tutorial";
$this->headTitle($this->title); ?>
<h3>index view script - content</h3>
佈局腳本 - layout.phtml
...
<body>
<div id="content">
<?php
error_log('Layout1');
echo $this->layout()->content ?>
<h1>
<?php
error_log('Layout2');
echo $this->escape($this->title); ?>
</h1>
</div>
</body>
...
這是我的困惑。 error_log輸出的順序與我在瀏覽器中的順序不同。
error_log中輸出(預期的順序):
- 的IndexController ::初始化
- 的IndexController :: preDispatch
- 的IndexController ::的indexAction
- 佈局1
- 佈局2
瀏覽器輸出:
- 的IndexController ::初始化
- 索引視圖腳本 - 回聲
- 索引視圖腳本 - 內容
- 的IndexController :: preDispatch
- 的IndexController ::的indexAction
- ZF教程
爲什麼控制器中的輸出在視圖腳本之後呈現?是否preDispatch & indexAction緩存以某種方式先輸出視圖腳本內容?
如果你正在迴應你不應該的東西,那麼你正在搞亂這個框架。 init或preDispatch不應該回顯任何內容。框架使用緩衝區來防止人們做這些愚蠢的東西,在php中檢查ob_start(),ob_get_clean()方法 – mpm