0

我按照这个tutthis的副本)为命名参数创建自定义规则。在我的规则数组中,我添加了 2 行来解析向后和向前Assortment[groupCategory]参数。

  'urlManager'=>array( 
        'showScriptName'=>false, 
        'urlFormat'=>'path',
        'rules'=>array(      
             'assortment/<Assortment[groupCategory]:\d+>'=> 'assortment/index',
             'assortment/<Assortment%5BgroupCategory%5D:\d+>'=> 'assortment/index', 
             '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
             '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
         ),
       ),

这很有效:http://tarex.ru/assortment/index/Assortment[groupCategory]/1yii 将 GET 参数识别Assortment[groupCategory]为等于 1。

但是,如果从我要求的表格中

  • http://tarex.ru/assortment/index?Assortment[groupCategory]=2或者
  • http://tarex.ru/assortment/index?Assortment%5BgroupCategory%5D=2

它不会将其转换为人类可读的 ulr,如下所示:

http://tarex.ru/assortment/index/Assortment[groupCategory]/2

为什么?tut sais 是双向 url manager

另一方面,当使用路由 post/index 和参数标签创建 URL 时,urlManager 组件也会使用此规则生成所需的 URL /index.php/posts/yii。出于这个原因,我们说 urlManager 是一个双向 URL 管理器。

4

1 回答 1

1

它不会将其转换为人类可读的 ulr

是的,Yii 不会在浏览器地址栏中转换 url,也不会在表单操作参数中转换。一切都在“幕后”运行。

我建议你重写你的规则

'assortment/<Assortment[groupCategory]:\d+>'=> 'assortment/index'

'assortment/<groupCategory:\d+>'=> 'assortment/index'

这样,如果您转到 url ,则会在名为 的控制器中调用http://tarex.ru/assortment/index/1一个方法。并将参数传递给它。要处理传递的变量,您可能需要将方法签名更改为:actionIndex()AssortmentController$groupCategory = 1

public function actionIndex( $groupCategory ) {}

如果您通过以这种方式获取参数来创建 url,那么“后退方式”将是:

echo Yii::app()->controller->createUrl( 'assortment/index', array( 'groupCategory' => 1 ) ) ;

/assortment/index/1必须创建一个 url 。

于 2014-11-22T09:50:39.710 回答