ThinkPhp5.0
Composer: php世界里的包管理器
目录结构
project 应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录⭐️
│ │ ├─model 模型目录⭐️
│ │ ├─view 视图目录⭐️
│ │ └─ ... 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public WEB 部署目录(对外访问目录)
│ ├─static 静态资源存放目录(css,js,image)
│ ├─index.php 应用入口文件⭐️
│ ├─router.php 快速测试文件
│ └─.htaccess 用于 apache 的重写
├─runtime 应用的运行时目录(可写,可设置)
├─vendor 第三方类库目录(Composer)
├─thinkphp 框架系统目录
│ ├─lang 语言包目录
│ ├─library 框架核心类库目录
│ │ ├─think Think 类库包目录
│ │ └─traits 系统 Traits 目录
│ ├─tpl 系统模板目录
│ ├─.htaccess 用于 apache 的重写
│ ├─.travis.yml CI 定义文件
│ ├─base.php 基础定义文件
│ ├─composer.json composer 定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 惯例配置文件
│ ├─helper.php 助手函数文件(可选)
│ ├─LICENSE.txt 授权说明文件
│ ├─phpunit.xml 单元测试配置文件
│ ├─README.md README 文件
│ └─start.php 框架引导文件
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
架构
模型-视图-控制器
thinkphp5.0 is based on mvc
一个控制器包含多个操作(方法),操作方法是一个URL访问的最小单元。
http: //serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...]eg: localhost:8080/in`dex.php/index/method
模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。
ThinkPHP的模型层支持多层设计,可以将模型更加细分,例如把模型层分为逻辑层/服务层/事件层等等。
控制器调用模型类后返回的数据通过视图组装成不同格式的输出
5.0的URL访问受路由决定,如果关闭路由或者没有匹配路由的情况下,则是基于
http: //serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/参数/值…
应用与模块
一个典型的应用是由多个模块组成的,这些模块通常都是应用目录下面的一个子目录,每个模块都有自己独立的配置文件、公共文件和类库文件。如上index/test/test2为三个模块
行为Behavior
行为(Behavior)是在预先定义好的一个应用位置执行的一些操作。
发生作用的位置称之为钩子,当应用程序运行到这个钩子的时候,就会被拦截下来,统一执行相关的行为。给某一个钩子绑定相关行为就成了一种类 AOP编程的思想。
在应用程序中进行行为侦听
// 在app_init位置侦听行为
\think\Hook::listen('app_init');
然后对某个位置进行行为绑定:
// 绑定行为到app_init位置
\think\Hook::add('app_init','\app\index\behavior\Test');
入口文件和引导文件
入口文件
入口文件位置的设计是为了让应用部署更安全,public
目录为web可访问目录,其他的文件都可以放到非WEB访问目录下面。
一般路径在../public/index.php
Index.php
// 应用入口文件
// 定义项目路径
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
引导文件
start.php
文件就是系统默认的一个引导文件。在引导文件中,会依次执行下面操作:
加载系统常量定义;加载环境变量定义文件;注册自动加载机制;注册错误和异常处理机制;加载惯例配置文件;- 执行应用;
🤨 不要管细枝末节,往下看吧
分发请求
模块/控制器/操作
这是默认的分发请求机制,系统会根据URL或者路由地址来判断当前请求的模块、控制器和操作名,并自动调用相应的访问控制器类,执行操作对应的方法。
控制器的所有操作方法都是return
返回而不是直接输出,系统会调用Response::send
方法将最终的应用返回的数据输出到页面或者客户端,并自动转换成default_return_type
参数配置的格式。所以,应用执行的数据输出只需要返回一个正常的PHP数据即可。
一句话概括👇:
controller用return就完事了,系统会帮你把返回的数据格式搞好然后输出给页面/客户端
URL
默认情况下,URL
是不区分大小写的,也就是说 URL
里面的模块/控制器/操作名会自动转换为小写,控制器在最后调用的时候会转换为驼峰法处理。
如果希望URL
访问严格区分大小写,可以在应用配置文件中设置:
// 关闭URL中控制器和操作名的自动转换
'url_convert' => false,
关闭后就变成大小写敏感了
模块设计
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可选)
│ ├─common.php 公共函数文件
│ ├─route.php 路由配置文件
│ ├─database.php 数据库配置文件
│ ├─config.php 应用配置文件
│ ├─module1 模块1目录
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录(可选)
│ │ ├─view 视图目录(可选)
│ │ └─ ... 更多类库目录
│ │
│ ├─module2 模块2目录
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录(可选)
│ │ ├─view 视图目录(可选)
│ │ └─ ... 更多类库目录
命名空间
有效的解决了多模块和Composer
类库之间的命名空间冲突问题,并且实现了更加高效的类库自动加载机制。
$studentModel = new Student(✘)
//正确写法
$studentModel = new \app\index\model\Student
or
use app\index\model\Student
$studentModel = new Student
Traits
作为一种扩展机制,可以方便的实现一个类库的多继承问题。(看不懂👀)
数据输出
新版的控制器输出采用Response
类统一处理
通过设置default_return_type
或者动态设置不同类型的Response
输出就可以自动进行数据转换处理
例如设为json:
'default_return_type'=>'json'
namespace app\index\controller;
class Index
{
public function index()
{
$data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];
return ['data'=>$data,'code'=>1,'message'=>'操作完成'];
}
}
请求URL地址后返回
{"data":{"name":"thinkphp","url":"thinkphp.cn"},
"code":1,
"message":"\u64cd\u4f5c\u5b8c\u6210"}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。