jerry2801
(Jerry2801)
1
在创建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地址时,则自动将 * 翻译为当前控制器的默认动作,我觉得这样应该是比较可取的方式。
希望大家讨论~
qiang
(Qiang Xue)
2
如果是模块下的控制器缺省动作呢?另外,url里出现一个星号比较难看吧?
jerry2801
(Jerry2801)
3
模块下的缺省动作不影响吧,默认动作的匹配,是到了控制器执行后才决定
星号只是一个假定,可以用其它符号,不过我也没有什么好的建议
qiang
(Qiang Xue)
4
假如是模块的缺省动作,那么在构造url时怎么判断它是一个缺省动作呢?它的route和一个非缺省动作很相似啊。
qq71151461
(Qq71151461)
6
估计强的意思是
假如
$this->createUrl('/product',array('brand'=>'sony'));
里的product是一个module,这样的规则会指到哪儿去呢?
jerry2801
(Jerry2801)
7
嗯,确实有这个问题,
其实我觉得,url的创建,是否应该将模块参数特殊化?否则就很不利于解析
例如:
$this->createUrl(‘rbac@product’);
以上意为创建到rbac模块,product控制器,默认动作
什么的写法,也是qeephp的做法,我感觉qeephp的创建url就是比较好的,通过模块的特殊对待,就可以
轻松自如的书写各种路径,
在不指定模块时,即使用当前模块
如果未指定模块,控制器为必填。