【发布时间】:2012-04-21 21:53:50
【问题描述】:
在我将 Zend Framework 应用程序转换为基于模块的结构之前,它只有一个布局,我可以像这样从控制器向它传递变量:
// Controller action
$this->view->foo = 'Something';
// Layout
<?= $this->foo ?>
但是,由于将所有内容都移入默认模块并创建了一个单独的“管理”模块,我无法再让它工作,很可能是因为我将“视图设置”从引导文件中移到了控制器中我根据模块切换布局的插件。我的插件是这样的:
class KW_Controller_Plugin_LayoutSelector extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$layout = Zend_Layout::getMvcInstance();
$layout->setLayout($request->getModuleName());
$view = $layout->getView();
$view->doctype('HTML5');
$view->setEncoding('UTF-8');
$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
$view->headScript()->appendFile('/js/jquery-1.7.1.min.js');
switch ($request->getModuleName()) {
case 'admin':
$view->headTitle('Admin Area')->setSeparator(' - ');
$view->headLink()->appendStylesheet('/css/admin/global.css');
$view->headScript()->appendFile('/js/admin/common.js');
break;
default:
$view->headTitle('Main Site')->setSeparator(' - ');
$view->headLink()->appendStylesheet('/css/global.css');
$view->headScript()->appendFile('/js/common.js');
break;
}
}
}
如果我将所有这些对视图的方法调用移回我的引导程序,我可以再次将变量传递给布局;所以我猜测某些事情发生的顺序错误,也许在我将变量从控制器传递给视图之后我的布局正在切换并且它们没有进入我的布局? (我尝试通过将代码放在 preDispatch() 和 postDispatch() 等中来更改上述运行的点)
值得注意的是,我可以在我的个人视图脚本中访问这些变量,而不是它们所在的布局。
任何指针将不胜感激。
【问题讨论】:
-
我假设以上只是一个错字:在控制器中:
$this->view->foo = 'Something';和布局中<?= $this->something ?>。我假设您的意思是布局中的<?= $this->foo ?>,对吧?
标签: php zend-framework module zend-view zend-layout