我可以执行不加载模板的操作吗?

时间:2014-04-10 17:36:28

标签: php zend-framework2 zend-framework-routing

我得到了这个问题here的答案,但现在我又有了一个问题。

我的模块中有一个subnav栏,通过帮助器从视图部分创建。 这是module.config.php中的配置:

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

我有一个带有2个动作的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 个答案:

答案 0 :(得分:5)

您可以改为返回响应对象:

public function logoutAction()
{
    // do stuff

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

然后你不需要模板。

答案 1 :(得分:3)

在zf2上

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

   return $vm;
}

EDIT ::: 如果您想要返回自定义响应,您可以执行以下操作:

public function Action(){
     return $this->getResponse()->setContent("Hello world!");
}