編集:Yiiバージョン1.1.14
現在のモジュール/コントローラー/アクションを取得しようとしており、への呼び出し以降、手動で URL を作成しようとしています
$url = Yii::app()->urlManager->parseUrl(Yii::app()->request)
パス形式を除いて、私がしたように機能していません。
なぜそれが必要なのですか?リスト ビューを持つ URL にヒットすると、CActiveDataProvider コンストラクターの pagination->route プロパティを Yii::app()->urlManager->parseUrl(Yii::app()->request) に割り当てることで、次の効果:
- 「ページ 1」アイテム (またはページ 2 にある場合は「前の」アイテム) をクリックすると、「$url」にリダイレクトされます。
- 別のリンクをクリックすると、「$url/page/(pageNumber)」にリダイレクトされます。
しかし、urlFormat が PATH の場合、私の $url には GET パラメータが埋め込まれます。これは次のとおりです: 現在私が 2 ページ目にいる場合 (最初のページ以外のページにも適用されます)、現在の URL は次のようになります。
(モジュール)/(コントローラー)/(アクション)/page/2 (2 など)
およびページ X の生成されたリンク (X > 1 の場合):
(モジュール)/(コントローラー)/(アクション)/page/2/page/X
および生成されたページ 1 のリンク:
(モジュール)/(コントローラ)/(アクション)/page/2
ページ 1 に戻ることができないため、これは問題です。
そこで、次のアプローチを試してみました: 現在のコントローラー オブジェクト データにアクセスして [module/]controller/action ルートをプログラムで生成する (いいえ: URL を手動で割り当てることはオプションではありません):
$module = $controller->module ? $controller->module->id : ''
$controller = $controller->id
$action = $controller->action->id
しかし、現在のルート (はい、私のブラウザの URL では) が admin/accessLog/list (モジュール、コントローラー、アクション) であり、私の URL 解析ルールが次のようになっている場合でも:
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
array('admin/admin/index', 'pattern' => 'admin'),
array('client/client/index', 'pattern' => 'client'),
array('admin/admin/<action>', 'pattern' => 'admin/<action:(login|logout|index|profile)?>'),
array('client/client/<action>', 'pattern' => 'client/<action:(login|logout|index|profile|recoverPassword)?>'),
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<action:\w+>' => 'site/<action>'
),
(はい、管理モジュール内に管理アプリがあり、クライアント アプリも同じです。ただし、現在の URL は admin/accessLog/list で始まることに注意してください。これは、他の URL で発生しないという意味ではありません。は、現在この URL で作業していることを意味するので、出発点として取り上げてください)
$module は空 ("admin" である必要があります)、$controller は空です ("accessLog" である必要があります)、action は "list" (期待される値) です。
現在インストールされているモジュールは (アプリケーションレベル):
'modules'=>array(
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'developer',
'ipFilters'=>array('127.0.0.1','::1'),
),
'admin'=>array(),
'client'=>array(),
),
編集:そして、現在インストールされているモジュールは次のとおりです。
/管理者/モジュール:
Yii::setPathOfAlias('admin', dirname(__FILE__));
class AdminModule extends CWebModule {
public $defaultController = 'admin';
public $controllerMap = array(
'catalog' => 'admin.controllers.AdminCatalogController'
);
}
/クライアント/ モジュール:
Yii::setPathOfAlias('client', dirname(__FILE__));
class ClientModule extends CWebModule {
public $defaultController = 'client';
public $controllerMap = array(
'catalog' => 'client.controllers.ClientCatalogController'
);
}
そして、もう一度、私の質問:
$this が AccessLogController のインスタンスである現在のコントローラー (モジュール /admin/ にあり、外部マッピング経由ではない) であると仮定すると、なぜ両方:
$module = $this->module ? $this->module->id : ''
$controller = $this->id
空として来ていますか?