资讯专栏INFORMATION COLUMN

CodeIgniter使用总结

waltr / 1528人阅读

摘要:最近在使用开发一个企业站项目,一开始是把前台和后台分开作为两个多带带的项目,但后来想想为啥不能放在一个项目里呢,便有了改造的想法。比如后台控制器继承基类,前台控制器继承基类。扩展核心系统类,可以根据业务需要添加一些公共功能。

最近在使用CodeIgniter开发一个企业站项目,一开始是把前台和后台分开作为两个多带带的项目,但后来想想为啥不能放在一个项目里呢,便有了改造的想法。

先上一张最终的目录结构图

</>复制代码

  1. application/
  2. |-- config/
  3. | |-- routes.php
  4. |-- controllers/
  5. | |-- backend/
  6. | |-- frontend/
  7. |-- core/
  8. | |-- MY_Controller.php
  9. | |-- MY_Router.php
  10. |-- views/
  11. | |-- backend/
  12. | |-- frontend/
  13. |-- static/
  14. | |-- backend/
  15. | |-- frontend/
  16. |-- index.php

这样设计的的好处:
1、目录结构清晰
2、保持了单入口index.php

controllers/backend和controllers/frontend目录下的控制器可以分别继承不同的基类。比如:后台控制器继承基类Backend_Controller,前台控制器继承基类Frontend_Controller。
MY_Controller扩展核心系统类CI_Controller,可以根据业务需要添加一些公共功能。
Backend_Controller和Frontend_Controller均继承自MY_Controller。

那么问题来了,Backend_Controller和Frontend_Controller定义在哪里呢。答案如下:

</>复制代码

  1. 不指定任何控制器时,希望能够访问默认控制器,所以我们去设置$route["default_controller"] = "frontend/XXX";但是访问会提示404错误,到底是因为什么原因呢。
    查看system/core/Router.php源码

  2. </>复制代码

    1. if (sscanf($this->default_controller, "%[^/]/%s", $class, $method) !== 2)
    2. {
    3. $method = "index";
    4. }
    5. if ( ! file_exists(APPPATH."controllers/".$this->directory.ucfirst($class).".php"))
    6. {
    7. // This will trigger 404 later
    8. return;
    9. }
  3. 关键在于定义MY_Router类,重写_set_default_controller方法

  4. </>复制代码

    1. default_controller)) {
    2. show_error("Unable to determine what should be displayed. A default route has not been specified in the routing file.");
    3. }
    4. if(sscanf($this->default_controller, "%[^/]/%s", $class, $method) !== 2)
    5. {
    6. $method = "index";
    7. }
    8. if(is_dir(APPPATH."controllers/".$class)) {
    9. $this->set_directory($class);
    10. $class = $method;
    11. if (sscanf($method, "%[^/]/%s", $class, $method) !== 2) {
    12. $method = "index";
    13. }
    14. }
    15. if(!file_exists(APPPATH . "controllers/" . $this->directory.ucfirst($class) . ".php")) {
    16. return;
    17. }
    18. $this->set_class($class);
    19. $this->set_method($method);
    20. $this->uri->rsegments = [
    21. 1 => $class,
    22. 2 => $method
    23. ];
    24. }
    25. }
  5. Demo地址

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26300.html

相关文章

  • CodeIgniter的密码处理论

    摘要:永远使用哈希算法来处理密码。绝不要使用弱哈希或已被破解的哈希算法,像或。只要你对密码进行哈希处理了,那么无论是技术上,还是在存储上都没有任何限制。 在你的应用程序中正确处理密码是非常关键的。前阵阅读CI手册,发现CodeIgniter对密码处理的总结对我很有帮助,把这个清单分享给大家,它告诉你什么该做,什么不该做。 绝不要以明文存储密码。永远使用 哈希算法 来处理密码。 绝不要使用 ...

    Euphoria 评论0 收藏0
  • CodeIgniter的密码处理论

    摘要:永远使用哈希算法来处理密码。绝不要使用弱哈希或已被破解的哈希算法,像或。只要你对密码进行哈希处理了,那么无论是技术上,还是在存储上都没有任何限制。 在你的应用程序中正确处理密码是非常关键的。前阵阅读CI手册,发现CodeIgniter对密码处理的总结对我很有帮助,把这个清单分享给大家,它告诉你什么该做,什么不该做。 绝不要以明文存储密码。永远使用 哈希算法 来处理密码。 绝不要使用 ...

    cuieney 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<