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