1

モジュールに特定のフォルダー名を使用したいのですが、その名前をエンド ユーザーに (つまり、URL で) 表示したくありません。クラス名を設定しようとしましたが、本来あるべきもの以外のものである場合、存在しないことがわかります。注: この例では名前が変更されていますが、要点はわかります。

私の設定では:

'modules'=>array(
    'cart'
),

/protected/modules には、フォルダーezcartがあります。これは Gii によって作成されたモジュールです。Gii で「カート」を作成すると、期待どおりに動作することを確認できます。

問題は、ソースに関しては、フォルダーezcartの名前を同じままにしておきたいということです。これは、GitHub に置いて共有し、将来自分で使用するパッケージの名前です。そのため、「ベンダー」などで同じ名前を保持しているように、ファイル内の誰もが何が何であるかを知っています.

ですから、Giiで ezcart を作成した場合、config.php で、Yii に別のディレクトリ名を使用するように指示するにはどうすればよいでしょうか。たとえば、私はこれをしたい:

'modules'=>array(
    'cart'=>array(
        'class'=>'application.modules.ezcart'
    )
),

ただし、 ezcartが見つからないことがわかります。この命名の違いを Yii に受け入れさせるにはどうすればよいでしょうか?

4

2 に答える 2

0

解決しました!!!

モジュールの URL に別の名前を使用しようとすると、Yii は頭がおかしくなるようです。$defaultController と $defaultAction と、他に 10 個ほど渡そうとしました。私のモジュール「ezpaypal」に設定された Yii のマッピングをオーバーライドする方法がわからないので、その URL を「billing」に変更できますが、それでも「/modules/ezpaypal」を指します。

まず、Gii でモジュールを作成します。私は私の名前を「ezpaypal」と名付けました。ブーム、すべてが生成されます。

モジュール名を config.php に追加します。

'modules'=>array(
    'ezpaypal'
),

問題は、URL に「ezpaypal」を見たくないということです。変更可能にしたいので、「/billing」または「/checkout」にすることができます..そのため、モジュールの名前を「ezpaypal」のままにする必要があります。私はルールを試してみましたが、たくさんの問題に遭遇しました。

Yii が「ezpaypal」のルート エイリアスを作成したようです。それは私のロード済みモジュールだからです。実際、通常どおり使用すれば問題なく動作します。使用するコントローラーをすべて知っています。

urlManager ルールを使用して "billing" を "ezpaypal" にマップし、URL の名前を変更すると、Yii はどのデフォルト コントローラを使用すればよいかわかりません。また、/controller/view/3 を実行することを認識していない /controller/3 のように、実行するデフォルトのアクションも認識していません。Yii は脳死状態になりました。

より良い解決策は、Yii がこれを処理するための「隠された」またはあまり知られていない方法を持っている場合でしょうか? Yii フレームワークのどこで構成を解析してモジュールをロードするのかわかりません。おそらく、長いURLマネージャーのルールなしでこれを修正する関数または設定する変数を見つけることができます. urlmanager に何も追加しなくても、「ezpaypal」のモジュール URL ルールを適切に処理します...

ただし、簡単な修正方法は、考えられるすべての組み合わせを処理するように URL マネージャー ルールを作成することです。たぶん、誰かがこれをより少ない行にクリーンアップできますか?

'rules'=>array(
            // EZPayPal Friendly URL Support - DO NOT TOUCH!
            '<module:(billing)>'=>'ezpaypal',
            '<module:(billing)>/index'=>'ezpaypal/default/index',
            '<module:(billing)>/<controller:\w+>'=>'ezpaypal/<controller>',
            '<module:(billing)>/<controller:\w+>/<id:\d+>'=>'ezpaypal/<controller>/view',
            '<module:(billing)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'ezpaypal/<controller>/<action>',
            '<module:(billing)>/<controller:\w+>/<action:\w+>'=>'ezpaypal/<controller>/<action>',
),

作品:)

モジュールに別の URL パスを使用して同じことを行っている人がいる場合は、"billing" を URL で使用する名前に変更し、"ezpaypal" をモジュールのディレクトリの実際の名前に変更してください。

PS:上記のルールは簡略化できますか? 私はわかりません。これは完璧な組み合わせのようです。1つ削除すると、そのルートが壊れます。また、urlmanager なしでこれをオーバーライドできるように、さらに簡単な方法を探しています。

于 2015-02-10T20:48:19.643 に答える
0

これには URL ルーティングを使用する必要があります.. config/main.php で、このルールを次のように追加します。

...
'components' => array(
    ...
 'urlManager'=>array(
     'rules'=>array(
       'mynewname/<controller>/<action>' =>'ezcart/<controller>/<action>'
      )
  )
)

いくつかの例については、ガイドのURL 管理を参照してください。ルーティングを使用して可能なすべてのこと

于 2015-02-10T06:30:10.487 に答える