ZF странное поведение макета - PullRequest
0 голосов
/ 15 февраля 2012

У меня странное поведение с ZF, которое я не могу разрешить. У меня есть layout.phtml и login.phtml. Поэтому, когда пользователь вошел в layout.phtml, должен отображаться еще один login.phtml. Это также работает, но перед отображением файла login.phtml ZF просматривает layout.phtml, и я могу подтвердить это из-за ошибок в файле error.log.

Вот что у меня в загрузчике:

public static function _initAcl()
{
    $auth = Zend_Auth::getInstance();
    $acl = new BM_Acl($auth);

    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(
        new BM_Controller_Plugin_Acl($auth, $acl)
    );
}

Вот что у меня в контроллере аутентификации:

    public function indexAction() {


    $form = new BM_Form_Login();
    $request = $this->getRequest();

    if ($request->isPost()) {
        if ($form->isValid($request->getPost())) {
            if ($this->_process($form->getValues())) {
                // We're authenticated! Redirect to the home page
                //json validation on login page
                $var = json_encode(array('valid' => true, 'redirect' => 'index'));
                echo $var;
                exit();
            } else {
                $var = json_encode(array('valid' => FALSE, 'error' => 'Authentication failed!', 'redirect' => 'auth'));
                echo $var;
                exit();
            }
        }
    }// end if is POST
    $this->_helper->layout()->setLayout('login'); // special login page
    $this->view->form = $form;
}

Любая помощь будет оценена ... С уважением Andrea

P.S. Это происходит только тогда, когда я запускаю приложение из нового окна браузера. Если я ссылаюсь на страницу входа в систему, макет больше не называется ...

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Просмотры для отдельных страниц.Если у вас есть отдельная страница, которую вы хотите отобразить с помощью шаблона, такого как layout.phtml, вы должны отредактировать index.phtml в каталоге представлений действия index.Если вы хотите отключить основной макет

$this->_helper->layout()->disableLayout();

или использовать пустой макет

$this->_helper->layout()->setLayout('blank');

Любой код, характерный для отдельной страницы, должен выполняться с представлением.

0 голосов
/ 15 февраля 2012

Когда я правильно понимаю, у вас есть макет, который вы используете на всех страницах, кроме входа в систему.Вместо того, чтобы использовать представление для входа в систему в качестве макета, вы должны отключить макет для этого действия и просто визуализировать login.phtml в обычном режиме.Вы можете сделать это, вызвав следующее в loginAction вашего контроллера, вместо setLayout('login'):

$this->_helper->layout()->disableLayout();

Это просто отключит макет, но представление будет отображаться нормально.

Если выЕсли вы хотите сделать это по-своему, вы должны поместить login.phtml в layout-path, а не в view-path (если вам нужно более подробное объяснение, просто спросите в комментарии).

0 голосов
/ 15 февраля 2012

Я не уверен, но я думаю, что макет отображается перед сценариями просмотра. Вы можете попытаться поместить свою логику в зацепку preDispatch в вашем контроллере.

public function preDispatch() {


    $form = new BM_Form_Login();
    $request = $this->getRequest();

    if ($request->isPost()) {
        if ($form->isValid($request->getPost())) {
            if ($this->_process($form->getValues())) {
                // We're authenticated! Redirect to the home page
                //json validation on login page
                $var = json_encode(array('valid' => true, 'redirect' => 'index'));
                echo $var;
                exit();
            } else {
                $var = json_encode(array('valid' => FALSE, 'error' => 'Authentication failed!', 'redirect' => 'auth'));
                echo $var;
                exit();
            }
        }
    }// end if is POST
    $this->_helper->layout()->setLayout('login'); // special login page
    $this->view->form = $form;
}

Или используйте ControllerPlugin:

Плагин Zend Controller - Doc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...