Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在控制器ZF2外部使用toRoute()_Php_Zend Framework2 - Fatal编程技术网

Php 在控制器ZF2外部使用toRoute()

Php 在控制器ZF2外部使用toRoute(),php,zend-framework2,Php,Zend Framework2,我想要的是: 如果未设置会话,我想重定向到zf2.localhost/authUser/index 当我在CreatorController中使用toRoute时,一切正常 但是,我想在几个文件中使用此方法。当我尝试在SessionServiceController中调用toRoute时,出现以下错误 错误: Url插件要求控制器事件组成路由器;找不到 你能告诉我我做错了什么吗 代码: CreatorController(zf2.localhost/creator/index) 如果不想直接实例

我想要的是:

如果未设置会话,我想重定向到
zf2.localhost/authUser/index

当我在CreatorController中使用
toRoute
时,一切正常

但是,我想在几个文件中使用此方法。当我尝试在SessionServiceController中调用
toRoute
时,出现以下错误

错误: Url插件要求控制器事件组成路由器;找不到

你能告诉我我做错了什么吗

代码:

CreatorController(zf2.localhost/creator/index)


如果不想直接实例化控制器,请使用ServiceManager。为了使toRoute工作,Url帮助器需要路由器的实例。当从ControllerManager调用控制器时,这通常由ControllerPluginManager处理

但是,除此之外,这种逻辑可能是错误的。如果您正在检查经过身份验证的用户,您可能希望在控制器加载之前在事件中加载并使用zend的身份验证服务。我想最好的地方是在你的在线事件循环中的某个地方,但我不能谈论你的具体应用


您将知道用户是否在请求链的早期登录,而无需启动控制器。看看ZfcUser(),它已经有了各种版本的auth redirect侦听器,您可以将其作为自己的灵感(或者您可能会发现您只是想将该项目用于您正在做的事情)

我已经阐明了您的意图。看起来调用方法的结果不一致,我想在你的问题中强调这一点。
   <?php
    namespace Creator\Controller;
    use Zend\View\Model\ViewModel;
    use Zend\Mvc\Controller\AbstractActionController;
    use Creator\Controller\SessionServiceController;

    class CreatorController extends AbstractActionController{

        public function __construct(){
            $this -> sessionService = new SessionServiceController();
        }

        public function indexAction(){
            if($this-> sessionService ->checkSession()){
                echo 'Witam';
            }
        }
    }
<?php
namespace Creator\controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Session\Container;
use Creator\Controller\SessionServiceController;

class SessionServiceController extends AbstractActionController {

    const CONTAINER_SESSION_ID = 'usr_id';

    public function __construct(){
        $this -> session_id = new Container( self::CONTAINER_SESSION_ID);
    }

    public function checkSession(){
        if (empty($this ->session_id->usr_id)){
            //$this->redirect()->toUrl("zf2.localhost/authUser/index");
            return $this->redirect()->toRoute('creator/default',
                array('controller'=>'authUser', 'action'=>'index'));
        }  

        if (!empty($this ->session_id->usr_id)){
            return true;
        }   
    }

}