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