자체 제작 Laravel Middleware
7290 단어 Laravel
이번에는 보기 날짜와 시간을 보기 위해 보기 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로 이동합니다.viewData
alias에서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-Ymd
Y/m/d
viewDate-Ym
이후Y/m
매개변수로 지정됩니다.
web.phpRoute::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
방문하면
에서 설명한 대로 해당 매개변수의 값을 수정합니다.
Reference
이 문제에 관하여(자체 제작 Laravel Middleware), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Syy12345-Unity/items/86256ae8c62239e12fa7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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, //追加
];
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');
Reference
이 문제에 관하여(자체 제작 Laravel Middleware), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Syy12345-Unity/items/86256ae8c62239e12fa7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)