2014-11-22 70 views
0

我遵循此tut(副本this)为创建命名参数的自定义规则。在我的规则数组中,我添加了2个上面的行来解析向前和向后Assortment[groupCategory]参数。通过urlManager规则美化网址只能用一种方法

'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

为什么?啧啧,这是双向网址管理器

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

回答

1

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

是的,Yii的不变换网址在浏览器中地址栏,也没有在形式的行动参数。一切都在“幕后”运行。

我建议你到你的规则

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

改写为

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

这样,如果你去网址http://tarex.ru/assortment/index/1actionIndex()方法将在名为AssortmentController控制器被调用。并将参数$groupCategory = 1传递给它。为了处理传递的变量,你可能需要签名更改方法:

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

一个url /assortment/index/1绝:

public function actionIndex($groupCategory) {} 

“返回方式:”如果你以这种方式获得的参数创建网址会被创建。

+0

我可以使用'Assortment [groupCategory]',复合一,作为参数而不是'groupCategory'吗? – 2014-11-22 09:53:35

+0

恐怕这个'assortment [groupCategory]'只能“单向”工作。因为将值分配给您分配给数组成员的'$ Assortment [groupCategory]'时。你知道,括号不能用于PHP变量名。什么是使用它们的原因? – 2014-11-22 10:06:43

+0

或者你可以试试'echo Yii :: app() - > controller-> createUrl('assortment/index',array('Assortment [groupCategory]'=> 1));' :) – 2014-11-22 10:07:26