国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

Laravel5.1框架注冊中間件的三種場景詳解

2024-05-05 00:10:12
字體:
來源:轉載
供稿:網友

本文實例講述了Laravel5.1框架注冊中間件的三種場景。分享給大家供大家參考,具體如下:

在Laravel中注冊中間件主要有三種場景,一種給控制器中的方法進行注冊,一種是給整個控制器進行注冊,最后一種是給全局注冊中間件。

  • 1、在控制器中的方法中注冊中間件

這種需求是最為常見,這個例子是給IndexController中的index方法添加中間件。

Route::get('/', ['middleware'=>['App/Http/Middleware/EmailMiddleware'],'uses'=>'IndexController@index']);
  • 2、在整個控制器中注冊中間件

這種需求有的時候也會出現,如果給整個控制器中注冊中間件,那么這個控制器中的所有方法都注冊了該中間件。跟我一起來找到答案!

控制器基類(Controller.php)

首先來看一下控制器基類,可以看到Controller類繼承了BaseController類,而BaseController的路徑是Illuminate/Routing/Controller,然后我們來看看Laravel的源碼。

<?phpnamespace 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 = [];
<?phpnamespace 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'=>[]];
  • 3、全局注冊中間件

打開app/Http/Kernel.php,這是一個內核文件,可以看到一個屬性$middleware,我們只需要將我們自定義的中間件的路徑添加到這個$middleware 這個屬性中即可。

此外還有一個$routeMiddleware屬性,使用這個屬性可以根據路由來注冊中間件。
我們的路由有:goods/infogoods/detail兩個路由器
我們可以將$routeMiddleware屬性添加一行

'goods.*' => /App/Http/Middleware/GoodsMiddleware::class,
<?phpnamespace 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框架的PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 阜城县| 虎林市| 莱阳市| 辽阳市| 扬州市| 元氏县| 临西县| 阿鲁科尔沁旗| 衡阳县| 卢湾区| 梧州市| 徐闻县| 古浪县| 清流县| 庆安县| 景宁| 城步| 福鼎市| 涿鹿县| 海南省| 永城市| 东乌珠穆沁旗| 凌云县| 富川| 交城县| 兴隆县| 宁安市| 繁峙县| 大埔区| 宁海县| 河东区| 洛扎县| 平南县| 濉溪县| 繁昌县| 旺苍县| 惠州市| 济宁市| 万山特区| 金沙县| 西宁市|