ThinkPHP5
ThinkPHP
是一个免费开源的、快速简单的、面向对象的、轻量级PHP
开发框架。php
为何选择ThinkPHP5
?css
ThinkPHP5
采用了全新的架构思想;composer
方式安装;API
进行了大量的优化更符合了现代web
开发的方式;MVC
定义:MVC
全名Model-View-Controller
,是模型、视图、控制器的缩写,是一种软件设计典范,而不是一种设计模式。其特色:html
开发环境:PHP
>= 5.4.0Mysql
Apache/Nginx
git
Mysql
默认端口号3306
,Apache/Nginx
默认端口号80
github
三种安装方法:web
github
上下载think
, framework
composer
下载thinkphp
官网下载composer
简介composer
是php
的一个依赖管理工具
文档:http://docs.phpcomposer.com/
安装:sql
curl -sS https://getcomposer.org/installer | php #下载composer安装工具 sudo mv composer.phar /usr/local/bin/composer #将下载下来的composer.phar移动到系统的PATH目录,这样全局可以进行访问。
composer
安装TP5
composer create-project --prefer-dist topthink/think proj_name
thinkphp
Apache
设置根目录数据库
/Applications/XAMPP/etc/httpd.conf
文件为Apache
的核心配置文件,打开后从新设置DocumentRoot
的值,DocumentRoot
为web
的根目录,而后重启Apache
服务器便可。json
TP5
目录讲解
tp5 |-application #应用目录 |-index |-controller #控制器 |-view #视图 |-model #模型 |-command.php #控制台的配置文件 |-common.php #项目全局的公共文件 |-config.php #应用的配置文件 |-database.php #数据库配置文件 |-route.php #路由文件 |-tag.php #应用行为扩展文件 |-extend #扩展类库目录 |-public #网站对外访问目录 |-index.php #应用入口文件,全部的请求都是经过index.php以后进行转发 |-robots.text #定义哪些文件能被搜索引擎爬取,哪些不能 |-router.php #框架快速启动的配置文件 |-static #存放网站的静态资源,如css,html,image等 |-runtime #运行时目录,包含项目运行时的缓存文件、编译文件、日志等 |-thinkphp #框架核心目录 |-lang #语言包目录 |-library #框架核心类库目录 |-tpl #系统模版文件 |-base.php #框架基础文件,经常使用于定义一些常量 |-composer.json #composer定义文件 |-console.php #控制台入口文件 |-convention.php #惯例配置文件 |-helper.php #助手函数文件 |-phpunit.xml #单元测试配置文件 |-README.md #README文件 |-start.php #框架引导文件 |-vendor #第三方类库目录 |-bulid.php #自动生成定义文件 |-composer.json #composer定义文件 |-LICENSE.text #受权说明文件 |-README.md #README文件 |-think #命令行工具入口
开发规范:
__
开头的方法属于魔术方法+
下划线的命名方式 不能如下划线开头app
(能够配置)ThinkPHP5
模块设计5.0
版本对模块的功能作了灵活设计,默认采用多模块的架构,而且支持单一模块设计,全部模块的命名空间均以app
做为根命名空间(可配置更改,通常不进行更改)。
注意:application
目录下建立的common
文件夹,common
会默认做为公共模块,里面的文件,不能经过url直接访问
设置命名空间:namespace app\index\controller
;
设置别名:use app\common\controller\Index as commonIndex
;
ThinkPHP5
配置
ThinkPHP
框架下的默认配置,在think/convention.php
文件中,通常不进行修改。应用配置
应用配置文件是应用初始化的时候首先加载的公共配置文件,默认位于application/config.php
,做用域为整个应用项目。能够在入口文件public/index.php
中定义CONF_PATH
,而后新建文件夹,达到将应用配置放到该文件的目的,这样方便将配置进行统一管理。
在config
目录下建立config.php
,添加应用配置或者对惯例配置进行修改(须要更改惯例配置时,通常不在原文件中直接更改,能够在建立的config.php
中进行更改)
在config
目录下建立database.php
,在里面配置数据库链接
//定义配置文件目录 define('CONF_PATH', __DIR__ . '/../application/config/');
config
目录下添加名为extra
的文件夹,而后添加配置文件,将会以数组形式做为元素添加到应用配置下。home.php
:家庭办公环境的配置项office.php
:公司办公环境的配置项application/模块名/config.php
,能够在和application
同级目录下建立文件路径config/index/config.php
,而后在public/index.php
中定义CONF_PATH
为该路径,这种状况也分为应用配置config/config.php
和模块配置config/index/config.php
,但会忽略application
路径下的配置。动态配置
在具体的控制器或者方法里面进行动态配置,动态配置只在当前的控制器或者当前的方法中有效。好比在Index.php
下设置以下代码,就能够为Index
控制器动态的添加或修改配置。
public function __construct() { config('before', 'beforeAction'); Config::set('before', 'beforeAction'); //功能同上,动态配置 }
Config
类下的方法
目录:thinkphp/library/think/Config.php
range($range)
:设定配置参数的做用域parse($config, $type = '', $name = '', $range = '')
:解析配置文件或内容load($file, $name = '', $range = '')
:加载配置文件(PHP格式)has($name, $range = '')
:检测配置是否存在get($name = null, $range = '')
:获取配置参数 为空则获取全部配置set($name, $value = null, $range = '')
:设置配置参数 name
为数组则为批量设置reset($range = '')
:重置配置参数
环境变量配置和使用
隐藏入口文件
public/.htaccess里面: # 将请求转发到index.php以后 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
入口文件绑定
public/index.php中添加: define('BIND_MODULE', 'admin'); #绑定模块为admin,只能访问admin模块下的全部文件 define('BIND_MODULE', 'admin/Index'); #绑定的模块为admin下的Index控制器,只能访问Index控制器下的全部方法
能够在public
目录下添加文件api.php
,而后在文件下定义应用目录、加载框架引导文件等..,而后进行模块绑定,这样能够实现经过访问api.php
下的模块实现让用户只能访问具体模块api
下的文件,这样一个项目中能够进行多种开发(API
开发等)。
应用配置中:auto_bind_module
:自动绑定模块
其值设置为true
以后
入口文件api.php
会自动绑定为api
模块
但入口文件index.php
不会自动绑定为index
模块
路由
将请求地址url
和具体控制器中的具体方法绑定,经过路由来转发使其对应。
在conf/config.php
中添加(也能够不添加,系统默认开启路由):
'url_route_on' => true
在index/Index
控制器下有方法:
public function info($id = '') { return "{$id}"; }
而后在config/route.php
中添加:
return [ //设置路由 'info/:id' => 'index/Index/info' ];
这样就实现了经过访问localhost/info/5
能够访问localhost/index/Index/info/5
。
请求对象Request
ThinkPHP
是一个单入口框架,全部的请求都经过index.php
,能够经过index.php
来接收全部的http
请求,请求中的全部参数均可以经过Request
对象来接收。
获取Request
对象的三种方式:
public function index() { //获取方式一:经过助手函数request() $request = request(); //获取方式二:经过Request对象实例 $request = Request::instance(); } //获取方式三:经过注入对象的方式(经常使用) public function index(Request $request) { dump($request); }
Request
中经常使用方法:
#注意:Requset中全部的方法都在thinkphp/think/Request.php文件中,可查阅 public function index(Request $request) { #url信息 dump($request->domain()); #域名 dump($request->pathinfo()); #url的pathinfo信息(含URL后缀) dump($request->path()); #url的pathinfo信息(不含URL后缀) dump($request->url()); #url #请求方式 GET、POST dump($request->method()); #请求方式 dump($request->isGet()); #是否为GET请求 dump($request->isPost()); #是否为POST请求 dump($request->isAjax()); #是否为AJAX请求 #请求参数 dump($request->get()); #获取全部参数的数组 dump($request->param()); #获取全部参数的数组(包含get、post、pathinfo等) dump($request->get('name')); #获取name参数的值 dump($request->get('age')); #获取age参数的值 dump($request->param('name')); #获取name参数的值 dump($request->param('age')); #获取age参数的值 #获取模型 控制器 操做 dump($request->module()); #当前模块 dump($request->controller()); #当前控制器 dump($request->action()); #当前方法 }
input
助手函数
/* * function input($key = '', $default = null, $filter = ...) * $key:表示传入参数 * $default:参数默认值 * $filter:参数过滤函数 * 获取输入数据 支持默认值和过滤 * * 其中$key支持'.'语法,支持以下: * ['get', 'post', 'put', 'patch', 'delete', 'route', 'param', 'request', 'session', 'cookie', 'server', 'env', 'path', 'file'] * */ public function index(Request $request) { $res_get = $request->get('name'); $res_param_get = $request->param('name'); $res_input_get = input('get.name'); #功能同上,获取get请求中参数name对应的数据 $res_input_get1 = input('get.name', '张三'); #若是参数name对应的数据为null,设置默认值 $res_post = $request->post('name'); $res_param_get = $request->param('name'); $res_input_post = input('post.name'); #功能同上,获取post请求中参数name对应的数据 }
响应对象Response
http对每一个请求都有相应的响应。 public function getUserInfo() { //动态配置返回数据类型 //config('default_return_type', 'json'); Config::set('default_return_type', 'json'); //功能同上 $res = [ 'code' => 200, 'body' => [ 'name' => '张三', 'age' => 22, 'sex' => '男' ], 'msg' => '请求成功' ]; return $res; }