Laravel 5.1 프레임 워 크 등록 미들웨어 의 세 가지 장면 에 대한 상세 한 설명

본 고 는 Laravel 5.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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기