【问题标题】:Zend Framework 2 (ZF2) forwarding to a different module controllerZend Framework 2 (ZF2) 转发到不同的模块控制器
【发布时间】:2013-08-02 05:58:53
【问题描述】:

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

$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

堆栈跟踪:

【问题讨论】:

标签: php frameworks zend-framework2


【解决方案1】:

您遇到了一个错误,因为在 ServiceLocator 中,您的控制器别名是

'Job\Controller\Index'

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

【讨论】:

    【解决方案2】:

    在控制器中使用 ServiceLocator 感知接口:

    use Zend\ServiceManager\ServiceLocatorAwareInterface;
    

    【讨论】:

    • 如何使用这个界面?我让控制器实现了ServiceLocatorAwareInterface,但这并没有解决问题。
    【解决方案3】:

    尝试使用标头重定向。

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

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

    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);
    }
    

    【讨论】:

    • 我需要将发布的参数传回视图脚本,所以重定向不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多