1

我搜索了,但找不到东西。所以,我有路线规则:

...

'/reg' => '/user/user/registration',
...

Yii::app()->request

我找不到任何路线信息。

那么,我怎样才能进入模块初始化函数并且只有url,路由lile

/reg -> user/user/registration

UPD

4

4 回答 4

0

该路线仅可从正在运行的控制器获得。到模块初始化时,控制器尚不可用,因此您无法找到那里的路线。(您可以关注CWebApplication::processRequest以查看当请求被解析到控制器运行时会发生什么。)

这取决于您尝试实现的目标,但您可以覆盖WebModule::beforeControllerAction以在模块控制器运行之前执行某些操作。

于 2013-03-12T13:51:24.770 回答
0

今天(在我提问后的第二天),我可以解决这个问题。

我将尝试解释:

正如迈克尔所写,我们无法在模块中知道我们在哪个控制器中。

但我得到的只是反向路线,所以,它很简单。

Yii::app()->getUrlManager()->parseUrl('/reg');

这将返回我的反向路线

user/user/registration

解析网址

于 2015-06-23T13:46:27.187 回答
0

Yii 1.1.15 的解决方案对我有用。

class HttpRequest extends CHttpRequest {

    protected $_requestUri;
    protected $_pathInfo;

    public function setUri($uri){
        $this->_requestUri = $uri;
    }

    public function setPathInfo($route){
        $this->_pathInfo = $route;
    }

    public function getPathInfo(){
        /* copy from parent */ 
    }

    public function getRequestUri(){
        /* copy from parent */ 
    }
}

用法:

    $uri_path = 'my/project-alias/wall';

    /** @var HttpRequest $request */
    $request = clone Yii::app()->getRequest();
    $request->setUri($uri_path);
    $request->setPathInfo(null);

    $route = Yii::app()->getUrlManager()->parseUrl($request);

    //$route equals 'project/profile/wall' etc here (like in route rules);
于 2015-06-24T14:44:31.797 回答
0

我正在使用一个稍微不同的 CHttpRequest 子类:

class CustomHttpRequest extends \CHttpRequest
{
    /**
     * @var string
     */
    var $pathInfo;
    /**
     * @var string
     */
    private $method;

    public function __construct($pathInfo, $method)
    {
        $this->pathInfo = $pathInfo;
        $this->method = $method;
    }

    public function getPathInfo()
    {
        return $this->pathInfo; // Return our path info rather than the default
    }

    public function getRequestType()
    {
        return $this->method;
    }
}

然后调用它(创建一个控制器,这是我想要的):

$request = new CustomHttpRequest($uri, $method); // e.g. 'my/project-alias/wall' and 'GET'
$route = \Yii::app()->getUrlManager()->parseUrl($request);
list($jcontroller, $actionName) = \Yii::app()->createController($route);
于 2015-11-13T14:16:45.187 回答