建议增加默认动作(actionId)占位符

在创建url时,相信大家经常会遇到默认动作(actionId)的问题,

假定

1、我们需要创建一个url,控制器为 product,动作为默认(index),

2、我们并不希望写这个默认动作 index

3、路由有以下三条规则:


'<lang:(zh_cn|en_us)>/<_c>/<_a>*' => '<_c>/<_a>',

'<lang:(zh_cn|en_us)>/<_c>' => '<_c>',

'<lang:(zh_cn|en_us)>' => '',

情况1:


$this->createUrl('/product');

以上代码所创建的url,会解析为 /product,即product控制器,这是我们想要的结果

情况2:


$this->createUrl('/product',array('brand'=>'sony'));

以上代码所创建的url,会解析为 /product/brand/sony,这样一来,brand成为了动作,这是我们所不想得到的结果

情况2,是我所面临的问题~~

假如说,我们书写url,必须指定地址,那是不是意味着,失去了默认动作这个初衷了呢?

所以,我建议,在解析url的创建过程中,假如发现没有指定地址,则使用一个默认动作的占位符来替代,如情况2,我们可以创建一个 /product/*/brand/sony 这样的url,当解析url地址时,则自动将 * 翻译为当前控制器的默认动作,我觉得这样应该是比较可取的方式。

希望大家讨论~

如果是模块下的控制器缺省动作呢?另外,url里出现一个星号比较难看吧?

模块下的缺省动作不影响吧,默认动作的匹配,是到了控制器执行后才决定

星号只是一个假定,可以用其它符号,不过我也没有什么好的建议 :)

假如是模块的缺省动作,那么在构造url时怎么判断它是一个缺省动作呢?它的route和一个非缺省动作很相似啊。

能否举一个例子说明问题?

估计强的意思是

假如




$this->createUrl('/product',array('brand'=>'sony'));



里的product是一个module,这样的规则会指到哪儿去呢?

嗯,确实有这个问题,

其实我觉得,url的创建,是否应该将模块参数特殊化?否则就很不利于解析

例如:

$this->createUrl(‘rbac@product’);

以上意为创建到rbac模块,product控制器,默认动作

什么的写法,也是qeephp的做法,我感觉qeephp的创建url就是比较好的,通过模块的特殊对待,就可以

轻松自如的书写各种路径,

在不指定模块时,即使用当前模块

如果未指定模块,控制器为必填。