admin 管理员组文章数量: 887016
目录
- 一、路由
- 1.路由的作用
- 2路由模式
- 3.路由注册
- 4.路由绑定
- 5.URL生成
- 二、控制器
- 1.控制器定义
- 2.前置操作
- 注意:前置方法执行完成后,hello方法再执行,输出hello
- 3.跳转与重定向
- 4.空操作
- 5.空控制器
- 三、请求
- 1.请求信息
- 2.输入变量
- 3.更改变量
- 4.请求类型
- 5.HTTP头信息
- 6.伪静类
- 7.参数绑定
一、路由
1.路由的作用
路由的作用是简化URL访问地址,并根据定义的路由类型做出正确的解析。
2路由模式
- path_info模式 index.php(入口文件)
http://域名/项目名/入口文件/模块名/控制器/方法名/键1/值1/键2/值2
'url_route_on' => false, //关闭路由
- 混合模式
混合模式:即可以使用path_info,也可以使用路由模式,并不是对同一个操作方法。混和模式指的是:有两三个操作方法,一个使用path_info一个使用路由等。
'url_route_on' => true, //开启路由
'url_route_must' => false, //自定义关闭
3.强制模式
开启路由,并设置必须定义路由才能访问:
'url_route_on' => true, //开启路由
'url_route_must' => true, //自定义关闭
3.路由注册
格式:
Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
路由参数与变量规则介绍略,感兴趣者看开发文档。
举例:
use think\facade\Route;
// 注册 GET 请求的路由
Route::rule('new', 'index/News/read', 'GET');
http://serverName/new === http://serverName/index/news/read
// 注册 POST 请求的路由
Route::rule('user', 'user/update', 'POST');
http://serverName/user === http://serverName/user/update
// 注册带有参数的路由
Route::rule('user/:id', 'index/News/read', 'GET');
http://serverName/new/5 === http://serverName/index/news/read/id/5
4.路由绑定
说明:把当前的URL绑定到模块/控制器/操作,最多支持绑定到操作级别。
绑定到的界别可以省略不写
举例:http://serverName/index/news/read/id/5
// 绑定当前的URL到 index模块
Route::bind('index');
==== http://serverName/news/read/id/5
// 绑定当前的URL到 index模块的blog控制器
Route::bind('index/news');
==== http://serverName/read/id/5
// 绑定当前的URL到 index模块的blog控制器的read操作
Route::bind('index/news/read');
==== http://serverName/id/5
5.URL生成
URL生成使用 \think\Url::build() 方法或者使用系统提供的助手函数url(),参数一致:
格式:
Url::build('地址表达式',['参数'],['URL后缀'],['域名'])
url('地址表达式',['参数'],['URL后缀'],['域名'])
举例:
// 输出 blog/thinkphp
Url::build('blog/read', 'name=thinkphp');
Url::build('blog/read', ['name' => 'thinkphp']);
url('blog/read', 'name=thinkphp');
// 输出 blog/5
Url::build('blog/get', 'id=5');
Url::build('blog/get', ['id' => 5]);
url('blog/get', 'id=5');
// 输出 blog/2015/05
Url::build('blog/archive', 'year=2015&month=05');
Url::build('blog/archive', ['year' => '2015', 'month' => '05']);
url('blog//archive', 'year=2015$month=05');
二、控制器
1.控制器定义
控制器文件放在application/module/controller下,类名和文件名保持大小写一致,采用驼峰法命名(首字母大写)。
举例:
定义一个Idex类,文件位置:application\index\controller*Index.php*
namespace app\index\controller;
class Index
{
public function index()
{
return 'index';
}
}
2.前置操作
说明:设置 beforeActionList属性可以指定某个方法为其他方法的前置操作,人话就是:在执行一个方法前,会先执行一些在 beforeActionList中的一些方法。
['except' => '方法名,方法名']
except是指哪些方法不能调用前面的方法
['only' => '方法名,方法名']
only是指哪些方法可以调用前面的方法
举例:
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
protected $beforeActionList = [
'first',
'second' => ['except'=>'hello'],
'three' => ['only'=>'hello,data'],
];
protected function first()
{
echo 'first<br/>';
}
protected function second()
{
echo 'second<br/>';
}
protected function three()
{
echo 'three<br/>';
}
public function hello()
{
return 'hello';
}
public function data()
{
return 'data';
}
}
访问http://localhost/index.php/index/Index/hello时,就是调用hello方法时,会查找前置方法,前置方法中有first、second、three方法,调用三者方法的结果分别是first、second、three,但是second与three加了限定值,所以结果为first、three、hello. first与three是前置方法输出的,hello是hello方法输出的。
注意:前置方法执行完成后,hello方法再执行,输出hello
3.跳转与重定向
- 两个跳转方法success和error,用于页面跳转提示。
跳转地址是可选的,success方法的默认跳转地址是$_SERVER[“HTTP_REFERER”],error方法的默认跳转地址是javascript:history.back(-1);。
$this->success();
$this->error();
if(true){
//设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER']
$this->success('新增成功', 'User/list');
} else {
//错误页面的默认跳转页面是返回前一页,通常不需要设置
$this->error('新增失败');
}
/**
* 操作成功返回的数据
* @param string $msg 提示信息
* @param mixed $data 要返回的数据
* @param int $code 错误码,默认为1
* @param string $type 输出类型
* @param array $header 发送的 Header 信息
*/
$this->result($msg, $data, $code, $type, $header);
- $this->redirect();
\think\Controller类的redirect方法可以实现页面的重定向功能。
edirect方法的参数用法和Url::build方法的用法一致(URL生成)
举例:
//重定向到指定的URL地址 并且使用302
$this->redirect('http://thinkphp/blog/2',302);
使用redirect助手函数:
redirect('News/category')
4.空操作
在控制器类中定义一个_empty()的 空操作方法,当系统找不到指定的操作方法时,会自动触发空操作的方法。
举例:
<?php
namespace app\index\controller;
class City
{
public function _empty($name)
{
return '空方法'.$name;
}
}
访问不存在的a方法:
5.空控制器
给项目定义一个Error控制器类,当系统找不到指定的控制器时,会触发空控制器返回。
举例:
<?php
namespace app\index\controller;
class Error
{
public function index($name)
{
return '空控制器'.$name;
}
}
访问不存在的a控制器类:
三、请求
1.请求信息
如果要获取当前的请求信息,可以使用\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: http://www.fast
file: /index.php
url: /day1/abc/def
url with domain: http://www.fast/day1/abc/def
url without query: /day1/abc/def
root:
root with domain: http://www.fast
pathinfo: day1/abc/def
pathinfo: day1/abc/def
ext:
常用:
方法 说明
url() 获取当前完整URL
baseUrl() 获取不含参数信息的URL地址
query() 获取当前URL地址的参数信息
domain() 获取当前包含协议的域名
method() 获取当前请求类型
module() 获取当前模块
controller() 获取当前控制器
action() 获取当前方法
2.输入变量
- 检测变量是否设置
has() 检测变量是否设置
可以使用has方法来检测一个变量参数是否设置,如下:
Request::instance()->has('id','get');
Request::instance()->has('name','post');
或者使用助手函数
input('?get.id');
input('?post.name');
- 变量获取
方法 说明
param() 获取当前请求变量
get() 获取$_POST变量
post() 获取$_GET变量
session() 获取$_SESSION变量
cookie() 获取$_COOKIE变量
request() 获取$_REQUEST变量
file() 获取$_FILES变量
举例:
// 获取当前请求的name变量
Request::instance()->param('name');
// 获取当前请求的所有变量(经过过滤)
Request::instance()->param();
// 获取当前请求的所有变量(原始数据)
Request::instance()->param(false);
// 获取当前请求的所有变量(包含上传文件)
Request::instance()->param(true);
使用助手函数实现:
input('param.name');
input('param.');
或者
input('name');
input('');
3.更改变量
// 更改GET变量
Request::instance()->get(['id'=>10]);
// 更改POST变量
Request::instance()->post(['name'=>'thinkphp']);
4.请求类型
// 是否为 GET 请求
if (Request::instance()->isGet()) echo "当前为 GET 请求";
// 是否为 POST 请求
if (Request::instance()->isPost()) echo "当前为 POST 请求";
/ 是否为 Ajax 请求
if (Request::instance()->isAjax()) echo "当前为 Ajax 请求";
// 是否为 Pjax 请求
if (Request::instance()->isPjax()) echo "当前为 Pjax 请求";
助手函数
// 是否为 GET 请求
if (request()->isGet()) echo "当前为 GET 请求";
5.HTTP头信息
$info = Request::instance()->header();
echo $info['accept'];
echo $info['accept-encoding'];
echo $info['user-agent'];
也可以直接获取某个请求头信息,例如:
$agent = Request::instance()->header('user-agent');
6.伪静类
说明:把动态文件经过修饰,在视觉上呈现为静态文件。
'url_html_suffix' => '后缀名'
7.参数绑定
把URL地址(或者路由地址)中的变量作为操作方法的参数直接传入。
版权声明:本文标题:thinkphp5框架之路由、控制器、请求 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1728999559h1305200.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论