検索しましたが、見つかりませんでした。だから、私はルートルールを持っています:
...
'/reg' => '/user/user/registration',
...
の
Yii::app()->request
ルート情報が見つかりませんでした。
では、モジュールのinit関数を使用して、URL、ルートlileのみを使用するにはどうすればよいですか?
/reg -> user/user/registration
UPD
検索しましたが、見つかりませんでした。だから、私はルートルールを持っています:
...
'/reg' => '/user/user/registration',
...
の
Yii::app()->request
ルート情報が見つかりませんでした。
では、モジュールのinit関数を使用して、URL、ルートlileのみを使用するにはどうすればよいですか?
/reg -> user/user/registration
UPD
ルートは、実行中のコントローラーからのみ利用できます。モジュールが初期化される時点では、コントローラーはまだ使用できないため、そこにルートを見つけることはできません。(CWebApplication :: processRequestをたどると、コントローラーが実行される時点までに要求が解決されたときに何が起こるかを確認できます。)
何を達成しようとしているかによって異なりますが、WebModule :: beforeControllerActionをオーバーライドして、モジュールコントローラーが実行される前に何かを実行することができます。
今日(私の質問の翌日)、私はこれを解決することができました。
私は説明しようとします:
Michaelが書いたように、モジュール内で自分がどのコントローラーであるかを知ることはできません。
しかし、私はネットがちょうど逆のルートを取得するので、それはかなりの言い方です。
Yii::app()->getUrlManager()->parseUrl('/reg');
これは私の逆のルートを返します
user/user/registration
Yii1.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);