框架基础介绍
框架介绍
说明
这是一个轻量级并支持大型应用开发的PHP框架,这也是我们希望达到的目的,写代码是一种享受,一种艺术,而代码本身又是一幅优美的画卷,我们的初衷不是开发大而全的框架,也不是开发小而美的框架,我们希望TimoPHP在不同团队的打磨下成为最适合自己公司产品的框架。很多框架都希望做大做强,会考虑的很全面,会加入很多功能、特性,但是,我们的项目、产品可能根本就不会用到,对于我们来说就是鸡肋,我们坚信,符合公司产品的框架才是最好的框架。
所以,框架不能有太多的限制,之前用过CI、ThinkPHP5、Laravel5、Yii2等等框架,CI可以算一个小而美的框架,但是比较落后了,PHP很多新东西没用上,TP5缺失很多设计模式,不适合开发大型应用,还不如另一个国产框架HDPHP,Laravel很优秀、很优雅,但是,它很臃肿,虽然有很多相关组件,但是,我就觉得它不够轻量,Yii现在越搞越复杂了,也和我们的观点不一样。
框架核心概念
符合PSR标准,轻量、灵活、扩展性好,目录结构可配置,多层设计,控制器分组设计,提供依赖注入服务容器,实现类与类、模块与模块之间的解耦(对大型应用的支持)
MVC+模式
除了Model层,我们还可以根据项目实际情况增加层,比如基础层(Base)逻辑层(Business)服务层(Service)策略层(strategy)等等。
M:Model,模型,数据的来源和存储
V:View,视图,数据的展示
C:Controller,控制器,数据的调度
Business,业务逻辑层,业务逻辑的编写
Service,服务层,数据的处理
控制器分组
当我们控制器很多的时候,我们可以把一类的控制器统一放到一个目录下面,就相当于分了一个组 比如我们有活动、视频两个控制器,有列表、详情、点赞、打赏等,还有子模块评论、问答、留言等,旧的做法是所有方法都写到活动或视频一个控制器里面,这样一个控制器里面的方法就很多
app
|--wx
| |--controller
| | |--Activity.php
| | |--Video.php
怎样降低控制器复杂度和维护难度,可以这样:
app
|--wx
| |--controller
| | |--activity
| | | |--Comment.php //评论
| | | |--Message.php //留言
| | | |--Question.php //问答
| | |--video
| | | |--Comment.php
| | | |--Message.php
| | | |--Question.php
| | | |--Bb.php //弹幕
| | |--Activity.php
| | |--Video.php
怎样调用
http://www.timophp.com/activity/question/detail/100089/
MVVC模式
Model-Controller-[ViewModel]-View
把MVC模式的V(视图)分成了视图模型层和视图层(也可以说是模版层),当然,视图模型层是可选,没有的话就是经典的MVC模式
框架特点
1、PHP5.4+(当然支持PHP7)
2、PSR标准
3、轻量级,扩展灵活
4、自定义异常处理,如404
5、原生模版解析
6、支出视图组件
7、模板支持多主题、layout(布局)
8、写app接口还是挺爽的
9、加入对cli模式支出,用来写服务、定时脚本挺好的
10、增加依赖注入服务容器,实现组件之间的松耦合
11、支持数据库读写分离设置,可具体到某个模型
12、支持控制器分组路由,降低控制器复杂度
控制器(Controller)
方式一,不继承控制器
<?php
namespace app\web\controller;
class Node
{
function index()
{
$view = View::instance(); //new View() 用new也可以
$view->assign('nodes', []);
return $view->render();
}
}
方式二,继承控制器
<?php
namespace app\web\controller;
use Timo\Core\Controller;
class Node extends Controller
{
function index()
{
$this->assign('nodes', []);
return $this->render();
}
}
简单返回json数据(ajax请求时用)
临时返回json数据
Response::type('json');
<?php
namespace app\web\controller;
use Timo\Core\App
use Timo\Core\Controller;
class Node extends Controller
{
function show($node_id)
{
$nodeModel = new NodeModel();
$node = $nodeModel->getNode($node_id);
Response::type('json');
return App::result(0, 'ok', $node);
}
}
接口
时代在变,前后端分离已经常态化,然后各种app,所以,现在和将来,PHP用的最多的是写接口。目前TimoPHP做的项目90%都是写接口,用着还是挺爽的
如果是写接口,请看 响应数据类型