Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
035e3072
C
Coding Tree
项目概览
檀越@新空间
/
Coding Tree
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coding Tree
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
035e3072
编写于
7月 20, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
9c055007
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
136 addition
and
0 deletion
+136
-0
blog/laravel/index.md
blog/laravel/index.md
+2
-0
blog/laravel/middleware.md
blog/laravel/middleware.md
+134
-0
未找到文件。
blog/laravel/index.md
浏览文件 @
035e3072
...
@@ -60,5 +60,7 @@ dev:
...
@@ -60,5 +60,7 @@ dev:
[
Session
](
/blog/laravel/session.md
)
[
Session
](
/blog/laravel/session.md
)
[
中间件 Middleware
](
/blog/laravel/middleware.md
)
https://www.bilibili.com/video/BV1gE411j78F?p=38&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
https://www.bilibili.com/video/BV1gE411j78F?p=38&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file
blog/laravel/middleware.md
0 → 100644
浏览文件 @
035e3072
# 中间件 Middleware
## 路由中间件
中间件:当程序接收HTTP请求时,拦截后进行过滤和处理
创建一个check中间件
```
bash
php artisan make:middleware Check
```
实现一个简单的登录身份验证的效果
首先创建一个Login控制器
```
php
class
LoginController
{
public
function
index
()
{
echo
'管理员,您好!'
;
}
public
function
login
()
{
echo
'登录失败!'
;
}
}
```
```
php
Route
::
get
(
'/admin'
,
'LoginController@index'
);
Route
::
get
(
'/login'
,
'LoginController@login'
);
```
要求,当Http接受
`id=1`
的情况下,它就是管理员,跳转index否则login
```
php
//固定方法,固定格式
public
function
handle
(
$request
,
Closure
$next
)
{
//这里编写验证跳转方法
if
(
$request
->
get
(
'id'
)
!=
1
)
{
return
redirect
(
url
(
'/login'
));
}
// 固定返回格式,让其继续往下执行
return
$next
(
$request
);
}
```
注册中间件
```
php
// Http/Kernel.php
protected
$routeMiddleware
=
[
'check'
=>
\
App\Http\Middleware\Check
::
class
,
]
```
执行中间件
```
php
// 这种中间件,属于前置中间件
Route
::
get
(
'/admin'
,
'LoginController@index'
)
->
middleware
(
'check'
);
```
-
前置中间件:先拦截 Http 请求,再执行主体代码
-
后置中间件:先执行主体代码,再拦截处理;
```
php
// 固定方法,固定格式
public
function
handle
(
$request
,
Closure
$next
)
{
//先执行主体代码
$response
=
$next
(
$request
);
//再进行拦截 Http 请求处理 echo '我是后置中间件';
//固定格式返回
return
$response
;
}
```
## 中间件进阶
设置多个中间件
```
php
->
middleware
(
'check'
,
'auth'
);
```
没有在配置中注册中间件,采用完整的类名来进行调用
```
php
->
middleware
(
\
App\Http\Middleware\Check
::
class
);
```
全局中间件,每次执行都必然调用
```
php
protected
$middleware
=
[
\
App\Http\Middleware\Every
::
class
,
]
```
中间件的核心方法可以有第三个参数,可以在控制器调用时传递
```
php
public
function
handle
(
$request
,
Closure
$next
,
$param
);
->
middleware
(
'check:abc'
);
```
中间件组,如果有一些需要固定调用多个中间件,我们可以将它群组
```
php
protected
$middlewareGroups
=
[
'mymd'
=>
[
'check'
=>
\
App\Http\Middleware\Check
::
class
,
]
];
```
中间件的terminate()方法,可以在中间件响应完之后(return$next)再调用
```
php
public
function
terminate
(
$request
,
$response
)
{
echo
'<br>Http响应完毕之后再调用我'
;
}
```
中间件也可以在控制器的构造方法里调用,这里注意错误跳转会死循环;
```
php
public
function
__construct
()
{
$this
->
middleware
(
'check:abc'
);
}
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录