我是zend的新手,我在修改引导程序中的布局时遇到了问题。我想在用户登录时更改我的布局。
我在bootstrap中更改布局的功能如下:
protected function _initAuthState()
{
$layout = new Zend_Layout;
$layout->setLayoutPath('/layouts/scripts');
if (Zend_Auth::getInstance()->hasIdentity()):
// Logged in.
$layout->setLayout(layout2);
else:
// Not Logged in.
$layout->setLayout(‘layout’);
endif;
}
此代码不起作用,布局始终相同......帮助!
答案 0 :(得分:4)
您正在修改 new 布局实例,而不是系统正在使用的实例。
我假设您在application.ini
中指定了布局参数。所以你需要:
$this->bootstrap('layout');
$layout = $this->getResource('layout');
然后在此布局实例上执行检查/修改。
BTW,通常使用前端控制器插件来改变布局。仍然足够早地完成工作,但通常更易于配置和重复使用。有两个例子,请参阅here和here。答案 1 :(得分:1)
我找到了答案!!
这是我的最终结果,并且正在运作!!
bootstrap.php中:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function _initLoader(){
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => '../application/',
'namespace' => 'My',
));
$resourceLoader->addResourceTypes(array(
'plugin' => array(
'path' => 'plugins/',
'namespace' => 'Plugin',
)
));
}
public function _initPlugins()
{
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new My_Plugin_Layout());
}
}
应用/插件/ layout.php中:
<?php
class My_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
public function preDispatch()
{
$user = Zend_Auth::getInstance();
$role = $user->getIdentity()->role;
$layout = Zend_Layout::getMvcInstance();
switch ($role) {
case 'admin':
$layout->setLayout('layout2');
break;
case 'normal':
$layout->setLayout('layout');
break;
default:
$layout->setLayout('layout');
break;
}
}
}
?>