Могу ли я иметь действие, которое не загружает шаблон?

Я получил ответ на этот вопрос здесь, но теперь у меня есть другая проблема \ проблема.

В моем модуле есть панель subnav, созданная из частичного представления с помощью помощника. Вот конфиг в module.config.php:

'navigation' => array(
    'default' => array(
        array(
            'label' => 'Search',
            'route' => 'mymodule\search',
        ),
        array(
            'label' => 'Log Off',
            'route' => 'logout',
        ),
    ),
),

У меня есть LoginController с двумя действиями: вход и выход из системы. После входа в систему я хочу, чтобы пользователь нажал кнопку выхода из системы, был перенаправлен на страницу входа и очистил свой сеанс.

Теперь, если у меня есть вход и выход из системы, мне нужен шаблон для каждого. Это кажется ненужным для действия выхода из системы - я не хочу, чтобы другой шаблон загружался для этого действия.

Вот мой конфиг маршрутизации:

'login' => array(
        'type' => 'Zend\Mvc\Router\Http\Literal',
        'options' => array(
                'route' => '/login',
                'defaults' => array(
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller' => 'Application\Controller\Login',
                        'action' => 'login',
                ),
        ),
),
'logout' => array(
        'type' => 'Zend\Mvc\Router\Http\Literal',
        'options' => array(
                'route' => '/login',
                'defaults' => array(
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller' => 'Application\Controller\Login',
                        'action' => 'logout',
                ),
        ),
),

Есть ли правильный способ вызвать действие без загрузки соответствующего шаблона?

2 ответа

Решение

Вместо этого вы можете вернуть объект ответа:

public function logoutAction()
{
    // do stuff

    return $this->redirect()->toRoute('login');
}

тогда вам не нужен шаблон.

На zf2

public function Action(){
   $vm = new ViewModel();
   $vm->setTerminal(true);

   return $vm;
}

РЕДАКТИРОВАТЬ::: Если вы хотите вернуть пользовательский ответ, вы можете сделать:

public function Action(){
     return $this->getResponse()->setContent("Hello world!");
}
Другие вопросы по тегам