我搜索过,但找不到东西。 所以,我有路线规则:
...
'/reg' => '/user/user/registration',
...
in
Yii::app()->request
我无法找到任何路线信息。
那么,我怎样才能进入模块初始化函数并且只有url,路由lile
/reg -> user/user/registration
UPD
答案 0 :(得分:0)
路由仅可从正在运行的控制器获得。当模块初始化时,控制器尚不可用,因此您无法找到那里的路线。 (您可以按CWebApplication::processRequest查看在解析请求到运行控制器时发生的情况。)
这取决于您尝试实现的目标,但您可以在模块控制器运行之前覆盖WebModule::beforeControllerAction以执行某些操作。
答案 1 :(得分:0)
今天(我的问题后的第二天),我可以解决这个问题。
我会尝试解释:
正如迈克尔写的那样,我们无法在模块中知道我们是哪个控制器。
但我的网络只是反转路线,因此,它非常适合。
Yii::app()->getUrlManager()->parseUrl('/reg');
这将返回我的反向路线
user/user/registration
答案 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);