设为首页收藏本站
查看: 67|回复: 0

[PHP] CI框架7点开发技巧

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34274
主题
17031
UID
1347
M币
67
贡献
17176

  • 发表于 2014-3-27 00:19:00 | 显示全部楼层 |阅读模式
    如果你还不知道ci是什么东东,请看这篇文章CI框架简单实例及其运行机制介绍
    下面都是CI框架的高级开发技巧!
    php教程如下:
    (1)自动加载模型models
    从此你不在需要继承model类了。使用方法就是就是添加一个php5风格的 autolader 函数,添加这些代码到system/application/config/config.php:

    如果你也有兴趣运用这个技巧到controller,你只需要添加以下代码来代替上面的代码。

    任何时候,你试着使用一个没有定义的类时候,这个__autoload函数将会被调用,它将会加载这个类文件。

    (2)防止model-controller名字冲突
    php文件取名也很重要,如下php代码:
    class Post extends Model {  
        // ...  
    }
    现在你就不能有一个像这样的url:
    http://www.phpddt.com/post/display/13
    这个原因是因为你也需要有一个名字为post的controller,如果创建了这样的一个类的话将会引起致命错误。
    但是使用了这个技巧一般,一切皆有可能。那个url的控制器看起来是这样的:
    // application/controllers/post.php  
    class Post_controller extends Controller {  
        // ...  
    }
    技巧:
    为了避免这个问题,通常大多数人都是添加‘_model’后缀到model名字(例如命名Post_model)。
    在所有的应用程序中Model对象都被创建和引用,所以在所有的model名字后面跟上‘_model’有些无聊。
    我认为最好的办法就是在controller上来添加后缀,因为在代码中controller的名字几乎从来不会被引用。
    首先我们需要继承Router class。创建这样一个文件:"application/libraries/MY_Router.php"
    class MY_Router extends CI_Router { var $suffix = '_controller'; function MY_Router() { parent::CI_Router(); } function set_class($class) { $this->class = $class . $this->suffix; } function controller_name() { if (strstr($this->class, $this->suffix)) { return str_replace($this->suffix, '', $this->class); } else { return $this->class; } } }
    现在编辑"system/codeigniter/CodeIgniter.php"第153行
    if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->controller_name().EXT))  
    然后第158行
    include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->controller_name().EXT);  
    然后编辑"system/libraries/Profiler.php"的第323行

    $output .= "".$this->CI->router->controller_name()."/".$this->CI->router->fetch_method()."
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表