thinkphp目录结构
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 命令行入口文件
URL访问
ThinkPHP5.O的URL访问受路由决定,如果关闭路由或者没有匹配路由的情况下,则是基于:
http://serverName/index.php(或者其他应用入口文件,可省略)/模块/控制器/操作/参数/值
在Thinkphp5.0框架中,在url地址栏里面如果不写模块、控制器和操作名,
默认访问的就是index模块下面的index控制器下面的index操作,可以在config.php文件中进行修改。
入口文件
用户请求的PHP文件,负责处理一个请求(注意,不一定是URL请求)的生命周期,最常见的入口文件就是index.php,有时候也会为了某些特殊的需求而增加新的入口文件,例如给后台模块单独设置的一个入口文件admin.php或者一个控制器程序入口think都属于入口文件。
请求信息
如果要获取当前的请求信息,可以使用\think\Request类,除了下文中的
$request = Request::instance( );
也可以使用助手函数
$request = request( );
当然,最方便的还是使用注入请求对象的方式来获取变量。
获取URL信息
$request = Request: :instance();
//获取当前域名
echo "domain: ' . $request->domain() . '<br/ > ';
//获取当前入口文件
echo 'file: ' . $request->baseFile() . '<br/ > ' ;
//获取当前URL地址不含域名
echo 'url: ' . $request->url() . '<br/ > ' ;
//获取包含域名的完整URL地址
echo 'url with domain: ' . $request->url(true) . '<br/> ';
//获取当前URL地址不含QUERY_STRING
echo 'url without query: ' . $request->baseUrl() . '<br/> ';
//获取URL访问的ROOT地址
echo 'root: ' . $request->root() . '<br/> ';
//获取URL访问的ROOT地址
echo 'root with domain: ' . $request->root(true) . '<br/> ' ;
//获取URL地址中的PATH_INFO信息
echo 'pathinfo: ' . $request->pathinfo() . '<br/> ';
//获取URL地址中的PATH_INFO信息不含后缀
echo 'pathinfo: ' . $request->path() . '<br/> ';
//获取URL地址中的后缀信息
echo 'ext: ' . $request->ext() . '<br/> ';
输出结果为:
domain: https://www.codelovers.cnfile:/index.php
url:/index /index/hello.html?name=thinkphp
url with domain: https:// www.codelovers.cn/index/index/hello.html?name=thinkphpurl without query :/index / index /hello.html
root:root with domain : https: // www . codelovers.cnpathinfo: index/index/hello.html
pathinfo: index /index/hello
ext: html
练习
设置/获取模块/控制器/操作名称
$request= Request::instance();
echo"当前模块名称是".$request->module();
echo "当前控制器名称是". $request->controiler();
echo ""当前操作名称是”. srequest->action() ;
如果当前访问的地址是http://serveriName/index.php/index/hello_world/index
输出结果为:
当前模块名称是index
当前控制器名称是Helloworld
当前操作名称是index
设置模块名称值需要像module方法中传入名称即可,同样使用于设置控制器名称和操作名称
Request::instance()->module( " module_name " );
获取请求参数
Srequest = Request::instance();
echo '请求方法:'.$request->method()."<br/>';
echo '资源类型:'.$request->type().'<br/>' ;
echo '访问地址:'. $request->ip() . '<br/>';
echo '是否AJax请求:'.var_export($request->isAjax(),true).'<br/>' ;
echo '请求参数:';
dump( $request->param( ));
echo '请求参数:仅包含name';
dump($request->only(["name"]));
echo "请求参数:排除name" ;
dump($request->except(['name"]));
输出结果为:
请求方法:GET
资源类型: html
访向地址:127.0.0.1
是否AJax请求:false
请求参数∶
array (size=2)
"test"=> string 'ddd'(length=3)
"name"=>string 'thinkphp'(length=8)
请求参数:仅包含name
array (size=1)
'name'=>string 'thinkphp'(length=8)
请求参数︰排除name
array (size=1)
变量
输入变量
概述
可以通过Request对象完成全局输入变量的检测、获取和安全过滤,支持包括 $ _GET 、$ _POST 、$_REQUEST 、 $_SERVER 、 $_SESSION . $_CO0KIE . $_ENV等系统变量,以及文件上传信息。
检测变量是否设置
可以使用has方法来检测一个变量参数是否设置,如下:
Request::instance()->has( 'id', 'get');
Request::instance()->has('name','post');
或者使用助手函数
input( '?get.id');
input( '?post.name');
变量检测可以支持所有支持的系统变量。
变量获取
变量获取使用\think\Request类的如下方法及参数︰
变量类型方法('变量名/变量修饰符','默认值','过滤方法')
变量类型方法包括:
方法 | 描述 |
---|---|
param | 获取当前请求的变量 |
get | 获取 $_GET 变量 |
post | 获取 $_POST 变量 |
put | 获取 PUT 变量 |
delete | 获取 DELETE 变量 |
session | 获取 $_SESSION 变量 |
cookie | 获取 $_COOKIE 变量 |
request | 获取 $_REQUEST 变量 |
server | 获取 $_SERVER 变量 |
env | 获取 $_ENV 变量 |
route | 获取 路由(包括PATHINFO) 变量 |
file | 获取 $_FILES 变量 |
练习
获取PARAM变量
PARAM变量是框架提供的用于自动识别GET、POST或者PUT请求的一种变量获取方式,是系统推荐的获取请求参数的方法,用法如下:
// 获取当前请求的name变量
Request::instance()->param('name');
// 获取当前请求的所有变量(经过过滤)
Request::instance()->param();
// 获取当前请求的所有变量(原始数据)
Request::instance()->param(false);
// 获取当前请求的所有变量(包含上传文件)
Request::instance()->param(true);
param方法会把当前请求类型的参数和PATH_INFO变量以及GET请求合并。
使用助手函数实现:
input('param.name');
input('param.');
或者
input('name');
input('');
因为input函数默认就采用PARAM变量读取方式。
练习
获取GET变量
Request::instance()->get('id'); // 获取某个get变量
Request::instance()->get('name'); // 获取get变量
Request::instance()->get(); // 获取所有的get变量(经过过滤的数组)
Request::instance()->get(false); // 获取所有的get变量(原始数组)
或者使用内置的助手函数input方法实现相同的功能:
input('get.id');
input('get.name');
input('get.');
注:pathinfo地址参数不能通过get方法获取,查看“获取PARAM变量”
获取POST变量
Request::instance()->