#zend-framework #layout #bootstrapping
#zend-framework #макет #начальная загрузка
Вопрос:
Я новичок в zend, и у меня возникла проблема с изменением моего макета в bootstrap. Я хочу изменить свой макет, когда пользователь входит в систему.
Моя функция для изменения макета в 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;
}
Этот код не работает, макет всегда один и тот же … помогите!
Ответ №1:
Вы изменяете новый экземпляр макета, а не тот экземпляр, который используется системой.
Я предполагаю, что вы указываете свои параметры макета в application.ini
. Итак, вам нужно:
$this->bootstrap('layout');
$layout = $this->getResource('layout');
Затем выполните проверку / модификацию на этом экземпляре макета.
Кстати, изменение макета часто выполняется с помощью плагина для фронт-контроллера. Все еще запускается достаточно рано для выполнения задания, но часто более настраивается и может использоваться повторно. Смотрите здесь и здесь два примера.
Комментарии:
1. спасибо за ответ. Я создаю плагин, но при его вызове он выдает ошибку: Неустранимая ошибка: класс ‘Plugin_Layout’ не найден в /home/zerego/application/Bootstrap.php в строке 8
2. Это распространенная проблема, связанная с тем, как вы вызываете / создаете свой плагин. Обычно вам необходимо задать пространство имен приложений и сопоставление префикса / папки для вашего загрузчика ресурсов. Если вы опубликуете код и / или конфигурацию, которые используете для создания экземпляра плагина, я прокомментирую необходимую настройку. Мы почти на месте. 😉
Ответ №2:
Я нашел ответ!!
это мой окончательный результат, и он работает!!
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());
}
}
application/plugins/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;
}
}
}
?>