3

わかりました、アプリを yii 1.1 から yii 2 に移行しています。残念ながら、URL ルート内でオプションのパラメーターを使用する方法がわかりません。config の urlmanager でデフォルトを設定しても、最初のパラメーターなしで 2 番目のパラメーターを指定できないか、404 エラーが発生します。

次のようなオプションの url パラメータ規則を複製する方法はありますか

array( '<controller:\w+>/<action:\w+>?(/<status>)?',
'pattern' => '<controller>/<action>'                   
),

yii 2 で?

4

3 に答える 3

7

これはドキュメント ( http://www.yiiframework.com/doc-2.0/guide-runtime-routing.htmlを参照) ではあまり明確ではありませんが、答えは次のとおりです。

デフォルトでは、ルールで宣言されたすべてのパラメーターが必須です。要求された URL に特定のパラメーターが含まれていない場合、または URL が特定のパラメーターなしで作成されている場合、ルールは適用されません。一部のパラメータをオプションにするために、ルールのデフォルトプロパティを設定できます。このプロパティにリストされているパラメーターはオプションであり、指定されていない場合は指定された値を取ります。

したがって、ルートは次のように表現する必要があります。

array(
  'pattern' => '<controller:\w+>/<action:\w+>/<status>',
  'route' => '<controller>/<action>',
  'defaults' => array('status' => '<a default value for status>')
)
于 2015-08-17T08:23:04.547 に答える
0

Default を使用せずに短い構文に固執する場合は、代わりに 2 つのルールを定義できます。「長い」ルールがリストの上位にあることを確認してください。

rules : [
    <controller:\w+>/<action:\w+>/<status> => '<controller>/<action>',
    <controller:\w+>/<action:\w+> => '<controller>/<action>',
]

最初のルールは、URL と要素が一致した場合にトリガーstatusされ、コントローラー/アクションに送信されます。
最初のルールがスキップされた場合、2 番目のルールがトリガーされます。メソッドに $status のデフォルト値があることを確認してください。

于 2022-02-04T12:08:36.957 に答える