最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年07月09日 10:39:35   作者:webbc  
這篇文章主要介紹了Laravel5.1框架注冊中間件的三種場景,結(jié)合實例形式詳細分析了Laravel5.1框架控制器中的方法進行注冊、給整個控制器進行注冊以及給全局注冊中間件三種應(yīng)用場景,需要的朋友可以參考下

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

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

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

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

Route::get('/', ['middleware'=>['App\Http\Middleware\EmailMiddleware'],'uses'=>'IndexController@index']);

  • 2、在整個控制器中注冊中間件

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

控制器基類(Controller.php)

首先來看一下控制器基類,可以看到Controller類繼承了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.");
  }

給整個控制器注冊中間件

我們選用系統(tǒng)的Authenticate中間件來舉例,這個中間件是用于檢測用戶是否登錄。

注意:中間件的名稱為鍵,值可以是一個空數(shù)組

protected $middleware = ['\App\Http\Middleware\Authenticate'=>[]];

  • 3、全局注冊中間件

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

此外還有一個$routeMiddleware屬性,使用這個屬性可以根據(jù)路由來注冊中間件。
我們的路由有: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,
  ];
}

更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家基于Laravel框架的PHP程序設(shè)計有所幫助。

相關(guān)文章

  • PHP 手機歸屬地查詢 api

    PHP 手機歸屬地查詢 api

    PHP 手機歸屬地查詢 api,大家可以結(jié)合調(diào)用即可。
    2010-02-02
  • PHP執(zhí)行l(wèi)inux命令常用函數(shù)匯總

    PHP執(zhí)行l(wèi)inux命令常用函數(shù)匯總

    一般情況下,很少會用php去執(zhí)行l(wèi)inux命令,不過特殊情況下,你也許會用到這些函數(shù)。以前我知道有二個函數(shù)可以執(zhí)行l(wèi)inux命令,一個是exec,一個是shell_exec,通過本文給大家介紹PHP執(zhí)行l(wèi)inux命令常用函數(shù)匯總,需要的朋友參考下
    2016-02-02
  • 使用php發(fā)送有附件的電子郵件-(PHPMailer使用的實例分析)

    使用php發(fā)送有附件的電子郵件-(PHPMailer使用的實例分析)

    本篇文章介紹了使用php發(fā)送有附件的電子郵件-(PHPMailer使用的實例分析)需要的朋友參考下
    2013-04-04
  • PHP簡單留言本功能實現(xiàn)代碼

    PHP簡單留言本功能實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了PHP簡單留言本功能的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • PHP未登錄自動跳轉(zhuǎn)到登錄頁面

    PHP未登錄自動跳轉(zhuǎn)到登錄頁面

    為了滿足用戶體驗度,需要用戶登錄才能跳轉(zhuǎn)到頁面,這篇文章給大家分享PHP未登錄自動跳轉(zhuǎn)到登錄頁面的實例代碼,需要的朋友參考下
    2016-12-12
  • thinkPHP5框架導出Excel文件簡單操作示例

    thinkPHP5框架導出Excel文件簡單操作示例

    這篇文章主要介紹了thinkPHP5框架導出Excel文件簡單操作,結(jié)合實例形式分析了thinkPHP5框架安裝及使用PHPExcel插件實現(xiàn)導出Excel格式文件的相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • PHP集成環(huán)境XAMPP的安裝與配置

    PHP集成環(huán)境XAMPP的安裝與配置

    XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟件包。接下來通過本文給大家分享PHP集成環(huán)境XAMPP的安裝與配置 ,需要的朋友可以參考下
    2018-11-11
  • PHP開發(fā)微信支付的代碼分享

    PHP開發(fā)微信支付的代碼分享

    最近一直在研究微信,不研究不知道,一研究下一跳啊,微信真的可以做太多事情了,先來看下微信支付的開發(fā)心得吧,以后會慢慢補全其他方面的開發(fā)代碼
    2014-05-05
  • 解決在laravel中l(wèi)eftjoin帶條件查詢沒有返回右表為NULL的問題

    解決在laravel中l(wèi)eftjoin帶條件查詢沒有返回右表為NULL的問題

    今天小編就為大家分享一篇解決在laravel中l(wèi)eftjoin帶條件查詢沒有返回右表為NULL的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 確保Laravel網(wǎng)站不會被嵌入到其他站點中的方法

    確保Laravel網(wǎng)站不會被嵌入到其他站點中的方法

    這篇文章主要介紹了確保Laravel網(wǎng)站不會被嵌入到其他站點中的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10

最新評論

察雅县| 图木舒克市| 咸阳市| 普宁市| 六盘水市| 乐至县| 宝鸡市| 富民县| 汶上县| 浙江省| 安达市| 景泰县| 酒泉市| 永昌县| 福清市| 泉州市| 平凉市| 浦江县| 尖扎县| 沭阳县| 岐山县| 长岭县| 股票| 礼泉县| 漳州市| 类乌齐县| 阳西县| 夏河县| 哈尔滨市| 筠连县| 杭锦后旗| 恩平市| 连南| 梅河口市| 岳池县| 林周县| 城市| 福建省| 江西省| 兴文县| 和政县|