【问题标题】:What is middleware in laravel?laravel 中的中间件是什么?
【发布时间】:2017-08-18 04:56:57
【问题描述】:

我试图了解中间件在 Laravel 中是如何工作的。这是我的课程,任何人都可以解释它的工作原理吗?

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->age <= 200) {
            return redirect('home');
        }

        return $next($request);
    }

}

谢谢

【问题讨论】:

  • 如果这是一个路由中间件,那么当您访问每个路由(URL)时,如果您在路由或控制器构造函数中指定此中间件,则必须通过此中间件。在 laravel 中,当您向包含大量数据的链接发出请求时,在该数据中必须有一个年龄字段,如果年龄小于 200,那么您的请求将直接转到主路由,否则会转到请求页面,有中间件像 Auth 一样检查是否授权
  • 感谢您的指导。

标签: php laravel


【解决方案1】:

Middleware 提供了一种方便的机制来过滤进入您的应用程序的HTTP 请求。例如,Laravel 包含一个 middleware,用于验证您的应用程序的用户是否已通过身份验证。如果用户未通过身份验证,middleware 会将用户重定向到登录屏幕。但是,如果用户通过了身份验证,middleware 将允许请求进一步进入应用程序。

Reference

编辑:正如@num8er 所解释的

中间件是介于路由器和路由处理程序之间的功能(或逻辑)。

在您的代码中:

public function handle($request, Closure $next)
{
    if ($request->age <= 200) {
        return redirect('home');
    }

    return $next($request);
}

$request-&gt;age 是请求中提供的变量,可以在每个 HTTP 请求上检查,如果其值为 &lt;= 200,则用户重定向到主路由。

【讨论】:

  • It works like a firewall for every HTTP request entering in your application. - 它不是防火墙,如果您要检查某些内容并重定向到其他地方或显示某些 4xx 页面,它可以充当防火墙。证明我可以向第三方服务请求记录请求,然后调用$next($request) - 因为你知道它不是防火墙。总结:Middleware is the function (or logic) that stands between router and route handler.
  • 不客气 (:
【解决方案2】:

你可以看到中间件是什么,现在让我们看看代码

public function handle($request, Closure $next)
{
    if ($request->age <= 200) {
        return redirect('home');
    }

    return $next($request);
}

此代码检查每个请求并检查请求中的年龄变量。如果年龄小于 200 则请求将被重定向到主页,否则它将转到请求页面。假设您正在请求/about 页面,但如果您不能通过中间件条件,您将被重定向到/home,否则将重定向到/about,即由return $next($request); 给出。 Similary 适用于 auth 和 cors 中间件。您可以类似地进行一些检查,例如$request-&gt;user-&gt;role=='admin' 并重定向到管理页面或其他页面。

return $next($request); 这给了你下一个请求路由(已经请求的原始路由)

【讨论】:

    【解决方案3】:

    中间件提供了一种方便的机制来过滤进入您的应用程序的 HTTP 请求。例如,Laravel 包含一个中间件,用于验证您的应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件会将用户重定向到登录屏幕。但是,如果用户通过了身份验证,中间件将允许请求进一步进入应用程序。

    当然,除了身份验证之外,还可以编写额外的中间件来执行各种任务。 CORS 中间件可能负责将正确的标头添加到离开您的应用程序的所有响应中。日志中间件可能会将所有传入请求记录到您的应用程序中。

    https://laravel.com/docs/5.4/middleware#introduction

    中间件是围绕您的应用程序的一系列包装器,它们以不属于您的应用程序逻辑的方式装饰请求和响应。

    https://mattstauffer.co/blog/laravel-5.0-middleware-filter-style

    【讨论】:

      【解决方案4】:

      中间件的主要目标是限制不需要的操作,在这里您可以检查用户给定的输入值,并且您可以只允许有效。

      【讨论】:

        猜你喜欢
        • 2021-09-06
        • 2020-02-22
        • 2021-09-03
        • 2018-01-27
        • 1970-01-01
        • 2016-12-13
        • 2018-01-02
        • 2017-11-06
        • 1970-01-01
        相关资源
        最近更新 更多