0

編集: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. 「ページ 1」アイテム (またはページ 2 にある場合は「前の」アイテム) をクリックすると、「$url」にリダイレクトされます。
  2. 別のリンクをクリックすると、「$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  

空として来ていますか?

4

1 に答える 1