TP3.1版本下利用composer的自动加载解耦MVC初始化web项目

一. composer自动加载函数库
很多人说TP框架很low,明明是面向过程的思想非要搭建一个MVC架构。但是不可否认的是,在天朝的phper中,TP作为phpweb开发的先驱者留下了大量历史问题。。当然,它的简单易用以及文档的极度完善和php这门类似于粘合剂的语言配合的天衣无缝,可能是写php写多了,解决问题总想着走捷径,重构什么的是不可能的,这辈子不会去重构代码的。
很遗憾的是,有大量项目使用的TP版本是在3.2以前的,这意味着什么呢,没有命名空间,需在实例化命名空间定义的类之前导入类库文件。不过由于composer一统php界的趋势,我们即便再落后的框架也能享受一下被统治的快感。。可以简单理解composer的作用类似于require和include函数,按照composer.json里的规范自动加载需要包括的文件。
我们可以在compoer.json文件里进行如下配置:

 "autoload": {
        "psr-4": {
            "Yujie\\": "Test"
        }
    },

接着我们执行compoer update, 然后再在根目录下创建Test目录作为我们的基础类库目录,就可以解耦出Model层和Logic层在这个文件夹里了,在里面的php文件上定义好对应目录的命名空间namespace Yujie… 我们在Action或者其他地方调用的时候只需要new Test… 就可以了。总的来说composer提供了psr-0 psr4标准,以及别名导入,以及目录扫描等几种实现自动加载的方式,都是通过spl_autoload_register实现。如果有想具体研究的同学可以参考
https://www.toolmao.com/composer-autoload

二. Action代码初始化
这里就直接上干货了,一个TP下的web的控制器代码应该包括:初始化用户验证、index初始化页面渲染、增删改ajax操作,那么,简单地可以给出初始化代码如下:

    
class TestAction extends Action {
    //初始化用户验证
    public function __construct() {
        parent::__construct ();
    }
   //index初始化页面渲染
    public function index() {
        if(IS_AJAX){
            $this->_ajax();
            return;
        }
        $this->display('index');
    }
   //增删改ajax操作
    private function _ajax(){
        $action = I('action','');
        switch($action){
            case 'add':
                $this->_add();
                break;
            case 'update':
                $this->_update();
                break;
            case 'del':
                $this->_del();
                break;
        }
    }
   //新增
    private function _add(){
    }
   //更新
    private function _update(){
    }
   //删除
    private function _del(){
    }
}

三.Model和Logic搭建初始化
文章开头我们已经搭建了自己在根目录的底层文件夹Test, 我们可以继续新建子文件夹Logic和Model,分别新建Logic.php和Model.php文件,以Model为例:


namespace Yujie;
//定义底层Model抽象类,定义库表以及一些查询的基本方法
abstract class Model
{
    protected $dbMaster = '';
    protected $dbSlave = [''];
    protected $tableName;
    protected $prefix = '_';
    protected static $_instances = [];
    protected $tableObject;
    protected $isMaster = false;

}

四.小结
本来php一个数组打天下已经很无耻了,现在composer又给php的架构提供了更规范的解决方式。不得不说php是世界上最好的语言(逃)~

你可能感兴趣的:(php)