一. 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操作,那么,简单地可以给出初始化代码如下:
<?php
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为例:
<?php
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是世界上最好的语言(逃)~