Zend Framework 2(ZF2)转发到不同的模块控制器

时间:2013-08-02 05:58:54

标签: php frameworks zend-framework2

我有一个处理表单的控制器。如果发布的数据具有特定值,我需要将用户转发到驻留在不同模块中的控制器。我试过这个:

$post = $this->params()->fromPost();
if (!isset($post['terms'])) {
    $this->forward()->dispatch('Job\Controller\IndexController', 
        array('action' => 'index')); 
}

但上面的代码不起作用。文档说明控制器必须是ServiceLocatorAware,但我不知道如何制作控制器servicelocatoraware。知道我怎么能做到这一点吗?

以下是来自xdebug的错误消息。

/home/test/mydomain/vendor/ZF2/library/Zend/ServiceManager/ServiceManager.php:496

消息:

Zend\Mvc\Controller\ControllerManager::get was unable to fetch or create an instance for Job\Controller\IndexController

堆栈追踪:

3 个答案:

答案 0 :(得分:1)

您遇到错误,因为 ServiceLocator 您的控制器别名是

'Job\Controller\Index'

所以你应该使用这个控制器路径而不是'Job \ Controller \ IndexController'

答案 1 :(得分:0)

尝试使用标头重定向。

// $url is new target
header('Location:'.$url,1);
exit(0);

这是我的重定向方法,myabe你可以使用它:

public function Redirect($url,$withCurrentQueryString=true){
    if($withCurrentQueryString==true){
        if(strpos($url,'?')>0){
        $url=$url.'&'.$_SERVER['QUERY_STRING'];
    }
    else{
        $url=$url.'?'.$_SERVER['QUERY_STRING'];
    }
    }
    header('Location:'.$url,1);
    exit(0);
}

答案 2 :(得分:0)

使用控制器中的ServiceLocator Aware Interface:

use Zend\ServiceManager\ServiceLocatorAwareInterface;