Laravel 5.1 프레임 워 크 등록 미들웨어 의 세 가지 장면 에 대한 상세 한 설명
5837 단어 Laravel5.1중간 부품 등록
Laravel 에 중간 부품 을 등록 하 는 것 은 주로 세 가지 장면 이 있 는데 하 나 는 컨트롤 러 에 등록 하 는 방법 이 고 하 나 는 전체 컨트롤 러 에 등록 하 는 것 이 며 마지막 하 나 는 전체 에 중간 부품 을 등록 하 는 것 이다.
4.567917.1.컨트롤 러 의 방법 에 중간 부품 을 등록 합 니 다이러한 수 요 는 가장 흔히 볼 수 있 는 것 이다.이 예 는 Index Controller 의 index 방법 에 미들웨어 를 추가 하 는 것 이다.
Route::get('/', ['middleware'=>['App\Http\Middleware\EmailMiddleware'],'uses'=>'IndexController@index']);
전체 컨트롤 러 에 중간 부품 을 등록 합 니 다이러한 수 요 는 때때로 나타 날 수 있다.만약 에 전체 컨트롤 러 에 중간 부품 을 등록 하면 이 컨트롤 러 의 모든 방법 이 이 중간 부품 을 등록 했다.나 와 함께 답 을 찾 아 라!컨트롤 러 기본 클래스(Controller.php)
먼저 컨트롤 러 기 류 를 살 펴 보면 컨트롤 러 류 가 BaseController 류 를 계승 한 것 을 볼 수 있 고 BaseController 의 경 로 는 Illuminate\Routing\Controller 입 니 다.그리고 Laravel 의 소스 코드 를 살 펴 보 겠 습 니 다.
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
abstract class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
BaseController 클래스원본 코드 에서 우 리 는 middleware 라 는 속성 을 볼 수 있 습 니 다.이 middleware 속성 은 우리 가 찾 는 것 입 니 다.따라서 등록 이 필요 한 컨트롤 러 에서 이 속성 을 사용 하면 등록 을 완성 할 수 있 습 니 다.
protected $middleware = [];
<?php
namespace Illuminate\Routing;
use BadMethodCallException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
abstract class Controller
{
/**
* The middleware registered on the controller.
*
* @var array
*/
protected $middleware = [];
/**
* Register middleware on the controller.
*
* @param array|string|\Closure $middleware
* @param array $options
* @return \Illuminate\Routing\ControllerMiddlewareOptions
*/
public function middleware($middleware, array $options = [])
{
foreach ((array) $middleware as $m) {
$this->middleware[] = [
'middleware' => $m,
'options' => &$options,
];
}
return new ControllerMiddlewareOptions($options);
}
/**
* Get the middleware assigned to the controller.
*
* @return array
*/
public function getMiddleware()
{
return $this->middleware;
}
/**
* Execute an action on the controller.
*
* @param string $method
* @param array $parameters
* @return \Symfony\Component\HttpFoundation\Response
*/
public function callAction($method, $parameters)
{
return call_user_func_array([$this, $method], $parameters);
}
/**
* Handle calls to missing methods on the controller.
*
* @param array $parameters
* @return mixed
*
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
*/
public function missingMethod($parameters = [])
{
throw new NotFoundHttpException('Controller method not found.');
}
/**
* Handle calls to missing methods on the controller.
*
* @param string $method
* @param array $parameters
* @return mixed
*
* @throws \BadMethodCallException
*/
public function __call($method, $parameters)
{
throw new BadMethodCallException("Method [{$method}] does not exist.");
}
전체 컨트롤 러 에 미들웨어 등록저 희 는 시스템 의 Authenticate 미들웨어 를 사용 하여 예 를 들 어 이 미들웨어 는 사용자 가 로그 인 했 는 지 확인 하 는 데 사 용 됩 니 다.
메모:미들웨어 의 이름 은 키 입 니 다.값 은 빈 배열 일 수 있 습 니 다.
protected $middleware = ['\App\Http\Middleware\Authenticate'=>[]];
전체 등록 중간 부품app/Http/Kernel.php 를 엽 니 다.이것 은 커 널 파일 입 니 다.속성$middleware 를 볼 수 있 습 니 다.사용자 정의 미들웨어 경 로 를 이$middleware 속성 에 추가 하면 됩 니 다.이 속성 을 사용 하면 경로 에 따라 중간 부품 을 등록 할 수 있 습 니 다.
우리 의 길 은 goods/info,goods/detail 두 개의 공유 기 가 있 습 니 다.
$routeMiddleware 속성 을 한 줄 추가 할 수 있 습 니 다.
'goods.*' => \App\Http\Middleware\GoodsMiddleware::class,
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
];
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];
}
Laravel 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 고 는 Laravel 프레임 워 크 를 바탕 으로 하 는 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.