请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索
开启左侧

MVC开发模式与ThinkPHP5.0

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
THhinkPHP5.0是基于MVC(模型-视图-控制器)方式来组织的,MVC的全称是Model View Controller,是模型-视图-控制器的缩写,是一种软件设计典范,用一种业务逻辑,数据,界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里,在改进和个性化定制界面以及用户交互的同时,不需要重新编写业务逻辑。MVC被独特地发展起来用于映射传统的输入,处理和输出功能在一个逻辑的图形化用户界面的结构中。而MVC开发模式是一种使用MVC设计创建Web应用程序的模式。
传统的Web开发中,我们将数据的处理和数据显示写在一起,模型和视图是直接关联的,视图直接从模型获取数据并显示,代码复杂,维护困难,不利于团队分工,开发效率低
传统开发模式类似如下代码:
MVC开发模式与ThinkPHP5.0-1.jpg MVC开发模式与ThinkPHP5.0-2.jpg 而使用MVC开发时,情况则发生了变化,模型和视图依旧负责数据处理和数据显示,但它们之间并不直接进行数据交换,而是借助控制器完成,控制器首先从模型中获取数据,然后根据数据的类型或者格式等选择合适的视图进行显示,从而达到模型与视图的完全分离,而是由控制器完成数据获取与展示
Model是应用程序中用以处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据,View是应用程序中处理数据显示的部分,通常视图是一句模型数据创建的。Controller是应用程序中处理用户交互的部分。通常控制器负责从视图中读取数据控制用户输入并向模型发送数据。
ThinkPHP的应用目录:


MVC开发模式与ThinkPHP5.0-3.jpg

我们可以注意到在public目录下有一个index.php,该文件是应用的入口文件,几乎所有的PHP MVC框架都会采用单一入口(网站的所有访问都会经过该文件)进行项目访问,ThinkPHP也不例外。入口文件主要完成以下事情:
1. 定义框架路径,项目路径
2. 定义调试模式和应用模式(可选)
3. 定义全局常量(可选)
4. 加载框架入口文件
Index.php代码如下:


MVC开发模式与ThinkPHP5.0-4.jpg

当我们加载一个初始的thinkphp5框架时,显示出的是一个“欢迎使用ThinkPHP!”
大致的加载流程如下:
1. Web服务器加载默认首页
2. Index.php加载ThinkPHP.php,框架开始运行
3. 当未指定模块,控制器和动作时,框架采用默认配置:Home模块,Index控制器,index动作
4. 根据APP_PATH找到Application目录,再根据模块名,控制器名和动作名找到Home目录下的IndexController.class.php,并执行其中的index方法。
ThinkPHP中的控制器:
作为MVC模式中最核心的控制器,起着沟通视图和模型的作用一个好的MVC架构中,View永远不应该直接操作Model,而应该通过View->Controller->Model的方式进行操作。一方面减少了耦合程度,另一方面之后对View进行重构时不会影响到Model。
一般来说ThinkPHP的控制器就是一个类,该类位于模块/Controller文件夹下,而操作指的是控制器的一个public方法,以下截图是最近笔者在做的一个项目的实例:(v1是版本号便于版本控制)


MVC开发模式与ThinkPHP5.0-5.jpg

由上图我们可以发现控制器的定义非常简单,只需满足两个条件:(1)文件是一个php类并存放在模块/Controller文件夹下(2)继承ThinkPHP的Controller及其子类。
ThinkPHP中的视图:
视图功能由\think\View类配合视图驱动(模板引擎)类一起完成,目前的内置模板引擎包括PHP原生模板和Think模板引擎
因为新版的控制器可以无需继承任何的基础类,因此在控制器中如何使用视图取决于你怎么定义控制器。
1. 继承\think\controller类
如果你的控制器继承了\think\Controller类的话,则无需自己实例化图类,可以直接调用控制器基础类封装的相关视图类的方法。如:
fetch渲染模板输出
display渲染内容输出
assign模板变量赋值
engine初始化模板引擎
2. 助手函数:
如果只是需要渲染模板输出可以使用系统提供的助手函数view
return view('hello',['name'=>'thinkphp'])
助手函数调用格式:
view('[模板文件]'[,'模板变量(数组)'][,模板替换(数组)])
ThinkPHP中的模型:
模型类:Think\Model配合数据库中间层Think\Db实现了完整的ORM功能,包括CURD和ActiveRecord实现。
基础模型类Model的设计非常灵活,无需进行任何模型定义,就可以进行相关数据表的ORM和CURD操作,只需要在封装单独的业务逻辑的时候,模型类才必须是被定义的。
新版采用了PHP的Trait特性实现了模型的动态组装,可以更加灵活的实现模型的扩展
当我们需要使用模型时,首先我们需要在database.php配置文件中进行相关的设置:
MVC开发模式与ThinkPHP5.0-6.jpg 而模型的定义方面,如果我们仅仅需要实现对数据表的CURD操作的话,实际上根本不需要定义模型类,直接实例化基础模型类即可。 只有当你需要额外定义模型的属性或者方法逻辑的时候,才需要额外定义模型类。模型类一般位于模块的 model 目录下面,类名通常与数据表的名相同
例如:
MVC开发模式与ThinkPHP5.0-7.jpg

当我们需要使用模型时,我们需要在对应的控制器中引入该模型类,使用相关的查询语句,核心\Think\Model除了基本的CURD和AR查询之外, 还提供了一些统计函数、getField方法,及动态查询方法,使用如下:
$User = D('User');
$User->count();
$User->getField('name');
$User->getByName('thinkphp');
$User->getFieldByName('thinkphp','name');
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

  • 0 关注
  • 0 粉丝
  • 4 帖子
广告招商