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访问的最小单元。php
http: //serverName/index.php(或者其它应用入口文件)/模块/控制器/操做/[参数名/参数值...]eg: localhost:8080/in`dex.php/index/methodcss
模型类一般完成实际的业务逻辑和数据封装,并返回和格式无关的数据。html
ThinkPHP的模型层支持多层设计,能够将模型更加细分,例如把模型层分为逻辑层/服务层/事件层等等。
控制器调用模型类后返回的数据经过视图组装成不一样格式的输出web
5.0的URL访问受路由决定,若是关闭路由或者没有匹配路由的状况下,则是基于thinkphp
http: //serverName/index.php(或者其它应用入口文件)/模块/控制器/操做/参数/值…
一个典型的应用是由多个模块组成的,这些模块一般都是应用目录下面的一个子目录,每一个模块都有本身独立的配置文件、公共文件和类库文件。如上index/test/test2为三个模块数据库
行为(Behavior)是在预先定义好的一个应用位置执行的一些操做。apache
发生做用的位置称之为钩子,当应用程序运行到这个钩子的时候,就会被拦截下来,统一执行相关的行为。给某一个钩子绑定相关行为就成了一种类 AOP编程的思想。
在应用程序中进行行为侦听编程
// 在app_init位置侦听行为 \think\Hook::listen('app_init');
而后对某个位置进行行为绑定:json
// 绑定行为到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_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
做为一种扩展机制,能够方便的实现一个类库的多继承问题。(看不懂👀)
新版的控制器输出采用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"}