Изменение макета в Bootstrap

#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;
        }
    }
}
?>