2013-12-04
TPP是一个基于PHP的web框架,使用了MVC模式以支持快速开发。该框架源自于之前写的tinierPHP2。tinierPHP2是web框架的一个实验项目,限于各种原因,没有进行优化。TPP是对tinierPHP2的重写,并使用了新的名称。TPP进行了大量的重新设计,架构更为清晰,代码也更加整洁。不过TPP仍然保持着简单的原则,以求给予开发者最大的灵活性。
项目地址:https://github.com/letiantian/TPP
新的文件布局
其实改动很小:
.
├── Controller
│ ├── error.php
│ └── welcome.php
├── Core
│ ├── tpp_config.php
│ ├── TPP_Index.php
│ ├── TPP_Loader.php
│ └── TPP.php
├── Corelib
│ ├── Medoo.php
│ └── Render.php
├── index.php
├── static
│ ├── bootstrap3
│ │ ├── css
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.min.css
│ │ │ ├── bootstrap-theme.css
│ │ │ └── bootstrap-theme.min.css
│ │ ├── fonts
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ └── glyphicons-halflings-regular.woff
│ │ └── js
│ │ ├── bootstrap.js
│ │ └── bootstrap.min.js
│ └── jquery-1.10.2.min.js
├── Template
│ └── error
│ └── 404.php
└── Userlib
新的变化
去除./Corelib/Rcache.php: Rcache.php是一个简单的用Reids作缓存的类,但是类实现的功能过于简单,且未经测试,故去除之。
去除tinierPHP2中的Config目录: 该目录被重命名为Core,其内的文件名也以TPP或者tpp开头。
新的配置方案: url路由(或者说url映射)在./Core/tpp_config.php中配置($url_maps),tpp_config.php中也可以配置基本url($tpp_base_url)、默认控制器($tpp_default_controller)、控制器的默认方法($tpp_default_method)、是否因为在浏览器中显示异常($tpp_show_error)、404页面位置($tpp_404_page)。 $tpp_base_url相当于tinierPHP2中./Config/Config.php文件中的$_site_url。现在的$tpp_base_url的值可以设为'http://127.0.0.1/'、'http://127.0.0.1/tinierPHP2/'、'/tinierPHP2/'、'/tinierPHP2' 、 'tinierPHP2' 、 'tinierPHP2/' 这些形式,./Core/TPP.php中的tpp_base_url()方法将根据配置而返回更使用的base_url,例如若配置$tpp_base_url为'tinierPHP2',tpp_base_url()将返回'/tinierPHP2/'。
控制器类 控制器类应继承TPP类,./Core/TPP类中实现了tpp_loader()方法,所以现在可以使用在控制器中使用this来使用类加载器(./Core/TPP_Loader)。 控制器的类名和文件名必须相同。TPP中不会修改根据url去加载控制器类的时候不会改变url的大小写,控制器的命名和url的关联更显而易见。我们可以看到./Controller/welcome.php内容如下:
<?php
/*
* Default controller
*/
class welcome extends TPP
{
public function index()
{
echo 'hello, I am TPP';
}
public function hello()
{
echo 'hello, I am TPP';
}
}
控制器中的函数的传参机制也进行了修改。假定./Core/tpp_config.php中$url_maps为空,$tpp_base_url为''(即TPP项目在web server的根目录里),如果url为http://127.0.0.1/welcome/hi/1/2,我们会创建控制器welcome的新的对象,调用hi方法的现行形式是hi('1','2'),而非hi(['1','2'])。
./Corelib/Medoo.php Medoo.php和Medoo项目中的版本更为接近,只是将构造函数更名为connect函数,构造函数被置空了。当然,TPP中Corelib和Userlib中的类不允许带参数的构造函数。
./Corelib/Render.php新增匿名函数 在Render类的render()方法中新增了匿名函数$tpp_base_url,这样就可以在视图中使用$tpp_base_url()获取基本url,方便开发。