我搜索了,但沒有找到一些東西。 所以,我的路由規則:Yii框架 - 從URL到路由
...
'/reg' => '/user/user/registration',
...
在
Yii::app()->request
我不能找到任何路由信息。
所以,我怎樣才能在模塊初始化函數,並具有唯一的網址,路線LILE
/reg -> user/user/registration
UPD
我搜索了,但沒有找到一些東西。 所以,我的路由規則:Yii框架 - 從URL到路由
...
'/reg' => '/user/user/registration',
...
在
Yii::app()->request
我不能找到任何路由信息。
所以,我怎樣才能在模塊初始化函數,並具有唯一的網址,路線LILE
/reg -> user/user/registration
UPD
今天(我的問題後的第二天),我可以解決這個問題。
我會盡量解釋:
正如邁克爾寫道,我們不能在模塊中的哪個控制器,我們知道。
但是我的網絡只是反轉路線,所以,它相當好。
Yii::app()->getUrlManager()->parseUrl('/reg');
這將返回我的反向航線
user/user/registration
路由只能從正在運行的控制器。當模塊初始化時,控制器尚不可用,因此您無法找到該路線。 (您可以按照CWebApplication::processRequest查看當請求解析到控制器運行時發生的情況。)
這取決於您嘗試實現的目標,但您可以覆蓋WebModule::beforeControllerAction以在模塊控制器之前執行某些操作運行。
解決方案的Yii 1.1.15 workes我。
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);
我認爲,這個解決方案更難。爲什麼你不喜歡我找到的解決方案? (它工作正常) – Miroff 2015-06-25 08:42:25
@Miroff導致它不適用於Yii 1.1.5:我得到了「致命錯誤:調用成員函數getPathInfo()在/ vendor/yiisoft/yii/framework/web /第364行的CUrlManager.php「在字符串''$ rawPathInfo = $ request-> getPathInfo();'''因爲$ request應該是一個具有設計保護的$ pathInfo等的對象。 – alexglue 2015-06-25 11:36:23
哦謝謝。我測試了它。 – Miroff 2015-12-02 21:59:47
我使用了一個稍微不同的子類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);
這個解決方案適用於yii2嗎? – Miroff 2015-12-02 22:00:05
顯示所有航線:them depe發現他們的訂單。 – sensorario 2013-03-12 21:57:37
這是錯誤的答案。我發現這樣做的唯一方法是重寫getPathInfo(),getRequestUri(),protected $ _requestUri;和$ _pathInfo;在子類中: ''' class HttpRequest extends CHttpRequest { \t protected $ _requestUri; \t protected $ _pathInfo; \t public function setUri($ uri){ \t \t $ this - > _ requestUri = $ uri; \t} \t公共函數setPathInfo($路線){ \t \t $這 - > _ PATHINFO = $路線; \t} \t公共職能getPathInfo(){/ *從 \t公共職能getRequestUri(){/ *從母公司* /} ''' – alexglue 2015-05-21 11:55:31
副本可你在解釋你的答案母公司* /}複製「回答問題「模式@alexglue? – Miroff 2015-06-23 13:45:08