Могу ли я иметь действие, которое не загружает шаблон?
Я получил ответ на этот вопрос здесь, но теперь у меня есть другая проблема \ проблема.
В моем модуле есть панель 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!");
}