我按照tut(this的副本)来创建命名参数的自定义规则。在我的规则数组中,我添加了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]/1
,yii将Assortment[groupCategory]
识别为GET参数等于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
为什么呢?啧啧称,它是双向网址管理员。
另一方面,当使用路径post / index和parameter标签创建URL时,urlManager组件也将使用此规则生成所需的URL /index.php/posts/yii。出于这个原因,我们说urlManager是一个双向URL管理器。
答案 0 :(得分:1)
它不会将其转换为人类可读的ulr
是的,Yii不会在浏览器地址栏中转换网址,也不会在表单操作参数中转换网址。一切都是“幕后”。
我建议你重写规则
'assortment/<Assortment[groupCategory]:\d+>'=> 'assortment/index'
到
'assortment/<groupCategory:\d+>'=> 'assortment/index'
通过这种方式,如果您转到网址http://tarex.ru/assortment/index/1
,将在名为actionIndex()
的控制器中调用AssortmentController
方法。参数$groupCategory = 1
将传递给它。要处理传递的变量,您可能需要将方法签名更改为:
public function actionIndex( $groupCategory ) {}
如果您通过以这种方式获取参数来创建网址,那么“反向”将是:
echo Yii::app()->controller->createUrl( 'assortment/index', array( 'groupCategory' => 1 ) ) ;
必须创建网址/assortment/index/1
。