Yii框架 - 从网址到路由

时间:2013-03-12 13:27:00

标签: yii

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

...

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

in

Yii::app()->request

我无法找到任何路线信息。

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

/reg -> user/user/registration

UPD

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

我会尝试解释:

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

但我的网络只是反转路线,因此,它非常适合。

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

这将返回我的反向路线

user/user/registration

parseUrl

答案 2 :(得分: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);

答案 3 :(得分: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);
相关问题