一直以来,TP的操作方法存在一个缺陷,由于TP倡导的是大道至简的原则,所以操作方法的命名就是当前的ACTION_NAME,这也造成了ACTION_NAME的命名可能会和PHP关键字冲突的情况,例如无法定义list或者case这样的操作名(虽然可以通过路由定义解决),其他框架的解决办法是给操作方法的定义增加一个前缀,例如list操作方法可能调用的实际控制器方法可能是actionList 这样,不过这个规则一般是固定的。现在最新的SVN更新解决了这一问题,我们可以通过对action_name标签位置增加行为扩展来解决,也就是说,通过这个标签的行为扩展可以接管操作方法的实际定义问题了,甚至可以动态的设置当前URL中的ACTION_NAME实际访问的控制器方法名。
举个例子来说,如果我们在action_name行为扩展中对操作方法加上action前缀的话,如果我们访问list和case操作的话,可能实际访问的控制器方法是 actionList 和 actionCase。附上,该行为扩展的关键代码:
举个例子来说,如果我们在action_name行为扩展中对操作方法加上action前缀的话,如果我们访问list和case操作的话,可能实际访问的控制器方法是 actionList 和 actionCase。附上,该行为扩展的关键代码:
class MyActionNameBehavior extends Behavior {
public function run(&$actionName){
// 自定义操作方法名
$actionName = 'action'.ucwords($actionName);
return;
}
}