框架基础介绍

 


 

框架介绍

说明

 

这是一个轻量级并支持大型应用开发的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%都是写接口,用着还是挺爽的

 

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