通过urlManager规则来美化URL仅适用于一种方式

时间:2014-11-22 04:36:13

标签: php yii yii-url-manager

我按照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]/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管理器。

1 个答案:

答案 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