框架基础介绍


框架介绍

说明

这是一个轻量级并支持大型应用开发的PHP框架,这也是我们希望达到的目的,写代码是一种享受,一种艺术,而代码本身又是一幅优美的画卷,我们的初衷不是开发大而全的框架,也不是开发小而美的框架,我们希望TimoPHP在不同团队的打磨下成为最适合自己公司产品的框架。很多框架都希望做大做强,会考虑的很全面,会加入很多功能、特性,但是,我们的项目、产品可能根本就不会用到,对于我们来说就是鸡肋,我们坚信,符合公司产品的框架才是最好的框架。

所以,框架不能有太多的限制,之前用过CI、ThinkPHP5、Laravel5、Yii2等等框架,CI可以算一个小而美的框架,但是比较落后了,PHP很多新东西没用上,TP5缺失很多设计模式,不适合开发大型应用,还不如另一个国产框架HDPHP,Laravel很优秀、很优雅,但是,它很臃肿,虽然有很多相关组件,但是,我就觉得它不够轻量,Yii现在越搞越复杂了,也和我们的观点不一样。

框架核心概念

符合PSR标准,轻量、灵活、扩展性好,目录结构可配置,多层设计,控制器分组设计,提供依赖注入服务容器,实现类与类、模块与模块之间的解耦(对大型应用的支持)

MVC+模式

除了Model层,我们还可以根据项目实际情况增加层,比如基础层(Base)逻辑层(Business)服务层(Service)策略层(strategy)等等。

  1. MModel,模型,数据的来源和存储
  2. VView,视图,数据的展示
  3. CController,控制器,数据的调度
  4. Business,业务逻辑层,业务逻辑的编写
  5. Service,服务层,数据的处理

控制器分组

当我们控制器很多的时候,我们可以把一类的控制器统一放到一个目录下面,就相当于分了一个组 比如我们有活动、视频两个控制器,有列表、详情、点赞、打赏等,还有子模块评论、问答、留言等,旧的做法是所有方法都写到活动或视频一个控制器里面,这样一个控制器里面的方法就很多

  1. app
  2. |--wx
  3. | |--controller
  4. | | |--Activity.php
  5. | | |--Video.php

怎样降低控制器复杂度和维护难度,可以这样:

  1. app
  2. |--wx
  3. | |--controller
  4. | | |--activity
  5. | | | |--Comment.php //评论
  6. | | | |--Message.php //留言
  7. | | | |--Question.php //问答
  8. | | |--video
  9. | | | |--Comment.php
  10. | | | |--Message.php
  11. | | | |--Question.php
  12. | | | |--Bb.php //弹幕
  13. | | |--Activity.php
  14. | | |--Video.php

怎样调用

  1. http://www.timophp.com/activity/question/detail/100089/

MVVC模式

  1. Model-Controller-[ViewModel]-View

把MVC模式的V(视图)分成了视图模型层和视图层(也可以说是模版层),当然,视图模型层是可选,没有的话就是经典的MVC模式

框架特点

  1. 1PHP5.4+(当然支持PHP7
  2. 2PSR标准
  3. 3、轻量级,扩展灵活
  4. 4、自定义异常处理,如404
  5. 5、原生模版解析
  6. 6、支出视图组件
  7. 7、模板支持多主题、layout(布局)
  8. 8、写app接口还是挺爽的
  9. 9、加入对cli模式支出,用来写服务、定时脚本挺好的
  10. 10、增加依赖注入服务容器,实现组件之间的松耦合
  11. 11、支持数据库读写分离设置,可具体到某个模型
  12. 12、支持控制器分组路由,降低控制器复杂度

控制器(Controller)

方式一,不继承控制器

  1. <?php
  2. namespace app\web\controller;
  3. class Node
  4. {
  5. function index()
  6. {
  7. $view = View::instance(); //new View() 用new也可以
  8. $view->assign('nodes', []);
  9. return $view->render();
  10. }
  11. }

方式二,继承控制器

  1. <?php
  2. namespace app\web\controller;
  3. use Timo\Core\Controller;
  4. class Node extends Controller
  5. {
  6. function index()
  7. {
  8. $this->assign('nodes', []);
  9. return $this->render();
  10. }
  11. }

简单返回json数据(ajax请求时用)

临时返回json数据

  1. Response::type('json');
  1. <?php
  2. namespace app\web\controller;
  3. use Timo\Core\App
  4. use Timo\Core\Controller;
  5. class Node extends Controller
  6. {
  7. function show($node_id)
  8. {
  9. $nodeModel = new NodeModel();
  10. $node = $nodeModel->getNode($node_id);
  11. Response::type('json');
  12. return App::result(0, 'ok', $node);
  13. }
  14. }

接口

时代在变,前后端分离已经常态化,然后各种app,所以,现在和将来,PHP用的最多的是写接口。目前TimoPHP做的项目90%都是写接口,用着还是挺爽的

如果是写接口,请看 响应数据类型