国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel學(xué)習(xí)筆記之Route,Middleware和Controller參數(shù)傳遞

zhangyucha0 / 2415人閱讀

摘要:本文主要學(xué)習(xí)總結(jié)下間參數(shù)傳遞。開發(fā)時(shí)經(jīng)常碰到類似場(chǎng)景有時(shí)需要在中讀取中設(shè)置的和,有時(shí)也需要在中讀取中設(shè)置的參數(shù)。總結(jié)下這幾個(gè)知識(shí)點(diǎn),便于查閱。

本文主要學(xué)習(xí)總結(jié)下Route,Middleware,Controller間參數(shù)傳遞。開發(fā)時(shí)經(jīng)常碰到類似場(chǎng)景:有時(shí)需要在Middleware中讀取Route中設(shè)置的middleware parameter和route parameter,有時(shí)也需要在Controller@Action中讀取Middleware中設(shè)置的參數(shù)。

先假設(shè)路由是:

Route::group(["prefix" => "route", "namespace" => "RouteParameter"], function () {

    // route/user/{user}/role/{role}, route parameter是{user}, {role}
    Route::group(["middleware" => "route.parameter"], function () {
        Route::resource("user.role", "RouteParameterToMiddlewareController");
    });

    // route/advisor, middleware parameter是 "advisor", "show", "comment"
    Route::group(["middleware" => "middleware.parameter:advisor,show,comment"], function () {
        Route::resource("advisor", "MiddlewareParameterToMiddlewareController");
    });
    
    // /route/controller, middleware parameter是 "client"
    Route::group(["middleware" => "middleware.controller:client"], function () {
        Route::resource("controller", "MiddlewareToController");
    });
});

路由對(duì)應(yīng)的控制器是:

namespace AppHttpControllersRouteParameter;

use IlluminateHttpRequest;
use AppHttpControllersController;

class RouteParameterToMiddlewareController extends Controller
{
    public function show($user, $role)
    {
        
    }
}


namespace AppHttpControllersRouteParameter;

use IlluminateHttpRequest;
use AppHttpControllersController;

class MiddlewareParameterToMiddlewareController extends Controller
{
    public function index()
    {
        return "All";
    }
}

并且在Kernel.php中注冊(cè)中間件:

$routeMiddlewares = []
    ...
    
    "route.parameter"       => AppHttpMiddlewareRouteParameter::class,
    "middleware.parameter"  => AppHttpMiddlewareMiddlewareParameter::class,
    "middleware.controller" => AppHttpMiddlewareControllerParameter::class,
;
Passing Route Parameters to Middleware

在中間件route.parameter中讀取路由參數(shù)有三種方式:$request->route($parameter_name);$request->route()->parameter($parameter_name);$request->route()->parameters(),代碼如下:

route("user");
        $user = $request->route()->parameter("user"); // {user}
        $role = $request->route()->parameter("role"); // {role}
        dd($user, $role);
        $parameters = $request->route()->parameters(); // ["user" => {user}, "role" => {role}]
        dd($parameters["user"], $parameters["role"]);

        return $next($request);
    }
}
Passing Middleware Parameters to Middleware

在中間件middleware.parameter中讀取中間件參數(shù)只需要在handle()中映射上對(duì)應(yīng)的參數(shù)變量就行,就和在Controller@Action中獲取路由參數(shù)一樣:

namespace AppHttpMiddleware;

use Auth;
use Closure;
use IlluminateHttpResponse;

class MiddlewareParameter
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest $request
     * @param  Closure                 $next
     * @param                           $role
     * @param                           $action
     * @param                           $data
     *
     * @return mixed
     */
    public function handle($request, Closure $next, $role, $action, $data)
    {
        dd($role, $action, $data); // "advisor", "show", "comment"

        if (Auth::check() && (Auth::user()->type === $role)) {
            return $next($request);
        }

        return abort(Response::HTTP_UNAUTHORIZED, "You must log in to access the resource.", [
            "Set-Cookie" => "Laravel=0; path=/; Expires=Thu, 01-Jan-1970 00:00:00 GMT; Secure",
        ]);
    }
}
Passing Parameters in Middleware to Controller

有時(shí)需要在中間中把參數(shù)傳遞到控制器中,則可以通過Request對(duì)象作為傳輸管道,代碼如:

namespace AppHttpMiddleware;

use Closure;

class ControllerParameter
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        $request->attributes->add(compact("role")); // "client"
        return $next($request);
    }
}

控制器中使用Request對(duì)象獲取$role參數(shù):

namespace AppHttpControllersRouteParameter;

use IlluminateHttpRequest;
use AppHttpControllersController;

class MiddlewareToController extends Controller
{
    public function index(Request $request)
    {
        dd($request->get("role"));
    }
}

總結(jié):Route,Middleware,Controller之間傳遞參數(shù)這個(gè)知識(shí)點(diǎn)會(huì)經(jīng)常在設(shè)計(jì)代碼時(shí)用到,還有從Route中傳遞參數(shù)到Controller中,這個(gè)就更是經(jīng)常要用到的,也簡(jiǎn)單。總結(jié)下這幾個(gè)知識(shí)點(diǎn),便于查閱。

RightCapital招聘Laravel DevOps

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21971.html

相關(guān)文章

  • Laravel核心解讀--控制器

    摘要:下面是剛才說的這些步驟對(duì)應(yīng)的核心代碼收集路由和控制器里應(yīng)用的中間件我們?cè)谇懊娴奈恼吕镆呀?jīng)詳細(xì)的解釋過中間件和路由的原理了,接下來就看看當(dāng)請(qǐng)求最終找到了路由對(duì)應(yīng)的控制器方法后是如何為控制器方法注入正確的參數(shù)并調(diào)用控制器方法的。 控制器 控制器能夠?qū)⑾嚓P(guān)的請(qǐng)求處理邏輯組成一個(gè)單獨(dú)的類, 通過前面的路由和中間件兩個(gè)章節(jié)我們多次強(qiáng)調(diào)Laravel應(yīng)用的請(qǐng)求在進(jìn)入應(yīng)用后首現(xiàn)會(huì)通過Http Ker...

    fxp 評(píng)論0 收藏0
  • Laravel源碼解析路由的使用

    摘要:入口啟動(dòng)后,會(huì)先加載服務(wù)提供者中間件等組件,在查找路由之前因?yàn)槲覀兪褂玫氖情T面,所以先要查到的實(shí)體類。注冊(cè)第一步當(dāng)然還是通過服務(wù)提供者,因?yàn)檫@是啟動(dòng)的關(guān)鍵,在內(nèi)加載路由文件。因路由文件中沒有命名空間。 showImg(https://segmentfault.com/img/bVbhjvY?w=600&h=296); 前言 我的解析文章并非深層次多領(lǐng)域的解析攻略。但是參考著開發(fā)文檔看此...

    MartinDai 評(píng)論0 收藏0
  • laravel框架應(yīng)用composer擴(kuò)展包開發(fā)

    摘要:官方地址是目前最流行的框架,發(fā)展勢(shì)頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場(chǎng)景,框架思想前衛(wèi),跟隨時(shí)代潮流,提倡優(yōu)雅代碼,自稱為工匠,其中的模板引擎容器以及擴(kuò)展包為業(yè)務(wù)的開發(fā)提供了極大的便利。 laravel5.5+ laravel官方地址 laravel是目前最流行的php框架,發(fā)展勢(shì)頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場(chǎng)景,lara...

    shevy 評(píng)論0 收藏0
  • Laravel核心解讀--中間件(Middleware)

    摘要:解析出后將進(jìn)入應(yīng)用的請(qǐng)求對(duì)象傳遞給的方法,在方法負(fù)責(zé)處理流入應(yīng)用的請(qǐng)求對(duì)象并返回響應(yīng)對(duì)象。攜帶了本次迭代的值。通過這種方式讓請(qǐng)求對(duì)象依次流過了要通過的中間件,達(dá)到目的地的方法。 中間件(Middleware)在Laravel中起著過濾進(jìn)入應(yīng)用的HTTP請(qǐng)求對(duì)象(Request)和完善離開應(yīng)用的HTTP響應(yīng)對(duì)象(Reponse)的作用, 而且可以通過應(yīng)用多個(gè)中間件來層層過濾請(qǐng)求、逐步完善...

    enda 評(píng)論0 收藏0
  • illuminate/routing 源碼分析注冊(cè)路由

    摘要:本文將會(huì)源碼分析下是如何把開發(fā)者在中寫的路由列表注冊(cè)到對(duì)象內(nèi)的。通過以上的分析,就能對(duì)路由系統(tǒng)的基本設(shè)計(jì)越來越清晰。一個(gè)進(jìn)來后,首先開始啟動(dòng)并按照以上邏輯開始注冊(cè)路由列表,然后就是根據(jù)當(dāng)前信息查找對(duì)應(yīng)的對(duì)象。 我們知道,在 Laravel 世界里,外界傳進(jìn)來一個(gè) Request 時(shí),會(huì)被 Kernel 處理并返回給外界一個(gè) Response。Kernel 在處理 Request 時(shí),會(huì)...

    seal_de 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<