자체 제작 Laravel Middleware

7290 단어 Laravel
Laravel의 Middleware 비망록.
이번에는 보기 날짜와 시간을 보기 위해 보기 DateMiddleware를 만들 것입니다.
미들웨어를 만드는 데 사용되는artisan 명령이 준비되어 있기 때문에 사용합니다.
중간부품 이름을 매개 변수에 맡기면 ok입니다.php artisan make:middleware ミドルウェア名help
$ php artisan make:middleware --help
Description:
  Create a new middleware class

Usage:
  make:middleware <name>

Arguments:
  name                  The name of the class
다음 명령을 사용하여 생성합니다app/Http/Middleware/ViewDateMiddleware.php.
ViewDateMiddleware.php 만들기
$ php artisan make:middleware ViewDateMiddleware
Middleware created successfully.
자동으로 생성되는 Middleware는 handle 함수만 정의합니다.
요청을 첫 번째 매개변수에 전달하고 Closure를 두 번째 매개변수에 전달합니다.Request는 http 요청을 통해 input 값 등을 얻을 수 있습니다.
Closure를 실행하면 다음 Middleware가 수행됩니다.
컨트롤러 논리 이전에 처리하려면 $next($request) 전에 코드를 작성하십시오.
디렉터 논리 다음에 처리하려면 $next($request) 다음에 코드를 작성하십시오.
ViewDateMiddleware.php
<?php

namespace App\Http\Middleware;

use Closure;

class ViewDateMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}
응용 프로그램 서비스 용기에 의해 실례화되었기 때문에 구조기 파라미터에 어떤 종류를 지정하여 DI를 진행합니다.
이번에 변수를 전달하려면view에 접근 날짜와 시간을 표시할 수 있기 때문에View의 Factory를 매개 변수로 지정합니다.
ViewDateMiddleware
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\View\Factory;

class ViewDateMiddleware
{

    private $view;

    public function __construct(Factory $view)
    {
        $this->view = $view;
    }

  省略
}

handle 함수에서 Factory의share 함수를 사용하면view에서 사용할 수 있는 변수를 정의할 수 있습니다.
ViewDateMiddleware
    public function handle($request, Closure $next)
    {
        $this->view->share('access_date', time());
        return $next($request);
    }
index.blade.php 등view 파일{{ $access_date }}에서 사용할 수 있습니다.
index.blade.php
{{ $access_date }}
그리고 브라우저에서 봤는데 오류가 발생했어요.
Undefined variable이므로 access_date 변수 정의가 실패했습니다.

laravel 생명주기에서 읽을 수 있도록kernel,route,controller에 Middleware를 지정해야 합니다.
kernel에는 세 개의 Middleware가 지정되어 있습니다.
$middleware
모든 http 통신 처리 중간부품 추가
・$middlewareGroups
특정routeGroup(예를 들어 웹이나api)에 사용할 중간부품을 추가합니다
・$routeMiddleware
중간부품의alias 이름을 지정할 수 있습니다.각 루트에서alias 이름으로middleware를 지정할 수 있습니다.
이번에는 모든 웹 요청에서 읽고 싶어서kernel의middlewareGroups에서 추적합니다.
App/Http/Kernel.php
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\ViewDateMiddleware::class, //ここに追加
        ],

        'api' => [
            'throttle:60,1',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
이제 Midoel 소프트웨어를 실행하고view에서access_현재date 변수를 사용할 수 있습니다.
↓ 결과 html

매개 변수를middleware에 전달


루트에서 단독으로middleware를 지정할 때 매개 변수를middleware에 전달할 수 있습니다.
방금의middleware를 개조하면 모든 루트에 시간 형식을 지정할 수 있습니다.
일단 커널.php의 $middleware Groups에 추가된middleware를 $routeMiddleware로 이동합니다.viewDataalias에서middleware를 지정할 수 있습니다.
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'ViewDate' => \App\Http\Middleware\ViewDateMiddleware::class, //追加
    ];
그리고 루트에서middleware를 지정합니다.middleware名:引数 형식으로 지정하면 매개 변수를middleware에 전달할 수 있습니다.
방문한 경우viewDate-YmdY/m/dviewDate-Ym 이후Y/m 매개변수로 지정됩니다.
web.php
Route::get('/viewDate-Ymd', function() {
    return view('index');
})->middleware('viewDate:Y/m/d');


Route::get('/viewDate-Ym', function () {
    return view('index');
})->middleware('viewDate:Y/m');
지금
http://127.0.0.1:8000/viewDate-Ymd
방문하면

http://127.0.0.1:8000/viewDate-Ym
방문하면

에서 설명한 대로 해당 매개변수의 값을 수정합니다.

좋은 웹페이지 즐겨찾기