gaoomei 发表于 2012-9-14 11:59:45

Router中,为什么要这样做呢?

本帖最后由 gaoomei 于 2012-9-14 21:13 编辑


      /**
         *Fetch the current method
         *
         * @access      public
         * @return      string
         */
      function fetch_method()
      {
                if ($this->method == $this->fetch_class())
                {
                        return 'index';
                }

                return $this->method;
      }

为什么要这样做呢?我一直不解。
比如,我有个LoginController, indexAction是登录表单,loginAction是处理登录请求。。。
这段代码直接就把login/login 转成了login/index 。。。。
我的版本是:2.1.2,框架本身要求:for PHP 5.1.6 or newer ,所以也就没必要兼容PHP4,那么完全可以用__construct 代替类同名方法了。。那,$this->method == $this->fetch_class()这句话就没必要了。..

Hex 发表于 2012-9-14 22:28:24

构造函数和index方法的用处还是不太一样。

Lory 发表于 2012-9-16 04:45:42

我也感觉这句话没必要,直接把 controller 类的同名方法替换成 index 了
楼主直接把它去掉后应该也可以跑的吧?

太尉天上飞 发表于 2012-9-17 00:58:32

ci的这点处理的不是很好,控制器类和动作名称都直接使用类名和方法名,很多时候会和自己的意愿冲突。
比如Login控制器里的一个login动作,
在ci里我们这样:
class Login extends CI_Controller { function login(){……}}
然而我们这样做:
class LoginController extends CI_Controller { function loginAction(){……}}
也就变得更加清晰。当然我们需要扩展CI的几个东西了。

Hex 发表于 2012-9-17 11:00:33

太尉天上飞 发表于 2012-9-17 00:58 static/image/common/back.gif
ci的这点处理的不是很好,控制器类和动作名称都直接使用类名和方法名,很多时候会和自己的意愿冲突。
比如L ...

我觉得这样太麻烦了。
很多框架都是这样,非得加个 action,完全没有必要,我觉得很啰嗦,呵呵
页: [1]
查看完整版本: Router中,为什么要这样做呢?