Php Zend框架输出呈现顺序

Php Zend框架输出呈现顺序,php,zend-framework,Php,Zend Framework,我试图了解Zend应用程序的工作流程。对于我定义的测试: 控制器-IndexController.php: public function preDispatch() { error_log('IndexController::preDispatch'); echo 'IndexController::preDispatch <br />'; } public function init() { error_log('I

我试图了解Zend应用程序的工作流程。对于我定义的测试:

控制器-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 />'; }
public function preDispatch(){
错误日志('IndexController::preDispatch');
echo“IndexController::preDispatch
;” 公共函数init(){ 错误日志('IndexController::init'); echo'IndexController::init
';} 公共函数indexAction(){ 错误日志('IndexController::indexAction'); 回显'IndexController::indexAction
';}
查看脚本-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>
...
。。。
...
这是我的困惑。错误日志输出的顺序与我在浏览器中得到的不同

错误\u日志输出(预期顺序):

  • IndexController::init
  • IndexController::preDispatch
  • IndexController::indexAction
  • 布局1
  • 布局2
浏览器输出:

  • IndexController::init
  • 索引视图脚本-echo
  • 索引视图脚本-内容
  • IndexController::preDispatch
  • IndexController::indexAction
  • ZF教程

为什么控制器中的输出在视图脚本之后呈现?是否以某种方式缓冲了预剥离和索引操作的回显结果,以便首先输出视图脚本内容

是的,调度过程中的任何输出都由输出缓冲区捕获并附加到响应中。这看起来可能令人困惑,但您不应该直接在控制器中输出内容(但如果您这样做了,您仍然希望看到它)。您的错误日志列表显示了这些事情的执行顺序,这才是真正重要的。

如果您在不应该重复的地方重复某些内容,那么您就是在干扰框架。init或preDispatch不应回显任何内容。该框架使用缓冲区来防止人们做这些愚蠢的事情,请检查php中的ob_start()、ob_get_clean()方法