1. 程式人生 > >Laravel5.1註冊中介軟體的三種場景

Laravel5.1註冊中介軟體的三種場景

在Laravel中註冊中介軟體主要有三種場景,一種給控制器中的方法進行註冊,一種是給整個控制器進行註冊,最後一種是給全域性註冊中介軟體。

  • 1、在控制器中的方法中註冊中介軟體
    這種需求是最為常見,這個例子是給IndexController中的index方法新增中介軟體。
Route::get('/', ['middleware'=>['App\Http\Middleware\EmailMiddleware'],'uses'=>'[email protected]']);
  • 2、在整個控制器中註冊中介軟體
    這種需求有的時候也會出現,如果給整個控制器中註冊中介軟體,那麼這個控制器中的所有方法都註冊了該中介軟體。跟我一起來找到答案!

控制器基類(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.");
    }

給整個控制器註冊中介軟體

我們選用系統的Authenticate中介軟體來舉例,這個中介軟體是用於檢測使用者是否登入。

注意:中介軟體的名稱為鍵,值可以是一個空陣列

 protected $middleware = ['\App\Http\Middleware\Authenticate'=>[]];
  • 3、全域性註冊中介軟體

開啟app/Http/Kernel.php,這是一個核心檔案,可以看到一個屬性$middleware,我們只需要將我們自定義的中介軟體的路徑新增到這個$middleware 這個屬性中即可。

此外還有一個$routeMiddleware屬性,使用這個屬性可以根據路由來註冊中介軟體。
我們的路由有: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,
    ];
}

相關推薦

Laravel5.1註冊中介軟體場景

在Laravel中註冊中介軟體主要有三種場景,一種給控制器中的方法進行註冊,一種是給整個控制器進行註冊,最後一種是給全域性註冊中介軟體。 1、在控制器中的方法中註冊中介軟體 這種需求是最為常見,這個例子是給IndexController中的inde

1.4 Illustrator的屏幕模式

illustrator 本節課將為您演示系統的三種屏幕模式,您可以根據工作需要,選擇合適的屏幕模式。當前的屏幕模式為正常屏幕模式。點擊工具箱最下方的[更改屏幕模式]按鈕。 在彈出的選項列表中,選擇[帶有菜單欄的全屏模式],將屏幕模式切換為帶有菜單欄的全屏模式,帶給您更多的工作空間。 繼續點擊工具箱

JS中註冊事件的方式及相容性處理

第一種(所有瀏覽器都支援,但是無法給同一個物件的同一個事件註冊多個事件處理函式) btn.onclick = function() { alert("111") } btn.onclick = function() {

5-18-CSS(1):CSS的使用方法及實際寫法

CSS:用於控制網頁樣式和佈局三種使用方法:直接使用:標籤內/body內內部:head內定義標籤外部:head內使用link讀取CSS檔案---------------------------------------------------------------------

【原】iOS容易造成迴圈引用的場景,就在你我身邊!

ARC已經出來很久了,自動釋放記憶體的確很方便,但是並非絕對安全絕對不會產生記憶體洩露。導致iOS物件無法按預期釋放的一個無形殺手是——迴圈引用。迴圈引用可以簡單理解為A引用了B,而B又引用了A,雙方都同時保持對方的一個引用,導致任何時候引用計數都不為0,始終無法釋放。若當前物件是一個ViewControll

面向物件開發軟體——模型

用面向物件方法開發軟體,通常需要建立三種形式的模型:物件模型:描述系統資料結構動態模型:描述系統控制結構功能模型:描述系統功能 什麼是物件模型物件模型表示靜態的、結構化的系統的“資料”性質。物件模型是對模擬客觀世界實體的物件以及物件彼此間的關係的對映,描述了系統的靜態結構。

【C語言】輸入一個整數,輸出該數二進位制表示中1的個數(方法)

輸入一個整數,輸出該數二進位制表示中1的個數。如輸入32,輸出1.程式碼實現:方法1:與運算#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOne

iOS容易造成迴圈引用的場景之Block以及對應的使用方法(二)

         可以看到在Block結構體中含有isa指標,這就證明了Block其實就是物件,並具有一般物件的所有功能。這個isa指標被初始化為_NSConcreteStackBlock或者_NSConcreteGlobalBlock類的地址。在沒有開啟ARC的情況下,如果Block中包含有區域性變數則is

maven打包springboot專案的場景

近期開發了一個微服務專案,打包部署的時候遇到過很多問題,現將遇到的問題總結,方便有需要的猿友們借鑑1、有些公共程式碼,如快取,資料來源和公共實體類以及其它工具類的封裝我們可以打包成工具包,方便其他服務開發時呼叫,其他服務在pom檔案裡新增依賴即可使用,這個時候pom.xml裡

訊息中介軟體的使用場景

一般認為,採用訊息傳送機制/訊息佇列 的中介軟體技術,進行資料交流,用在分散式系統的整合。為什麼使用訊息中介軟體解決分散式系統之間訊息的傳遞。電商場景:使用者下單減庫存,呼叫物流系統,系統擴充後服務化和業務拆分。系統互動,y一般用RPC(遠端過程呼叫)。如果系統擴充到有幾十個

loadrunner(1)----http POST請求格式的指令碼

本篇文章主要針對POST請求的三種資料請求格式,組織不同的指令碼,較為基礎,入手教簡單 (1)、application/x-www-form-urlencoded 鍵值對 (2)、multipart/form-data 表單 (3)、application/json Jso

統計一個整數的二進位制中1的個數的解法

一、每一位與0x1進行與運算 int countOne(int num)   {       int count = 0;       while ( num )       {         

1.express中介軟體的簡介

                                            &

1.5 Photoshop的螢幕模式 [Ps教程]

1. 本節課將為您演示,系統的三種螢幕顯示模式。首先依次點選[檔案 > 開啟]命令,開啟一張示例圖片。 2. 3. 在彈出的[開啟]視窗中, 雙擊圖片的縮圖,開啟示例圖片。 4. 依次點選[檢視 > 螢幕模式 > 帶有選單欄的全屏模式]命令,將螢幕模式切換為

OLE:物件的類沒有在註冊資料庫中註冊 問題的解決方法

我在網上下載了破解版的SAS9.3,用了一段時間之後,今天開啟就填出一個提示框: OLE:物件的類沒有在註冊資料庫中註冊  啟用該物件所需的應用程式不可用。是否用“轉換……”將其轉換為或啟用為另一型別

1.13 物件的狀態(transient,peisistent,detached)

1.沒有給物件設定ID,沒有save之前為瞬時狀態(記憶體中有物件沒ID,在資料庫和快取沒有); 2.save之後為持久狀態(在資料庫和記憶體、快取裡有ID) 3.session關閉之後為脫管狀

MYSQL 每個使用者取1條記錄的寫法(group by xxx)

今天以前的同學問我關於這方面的SQL語句,我特意記憶一下,畢竟這個也比較常見了 select * from (select * from member_payment order by id desc) t group by member

laravel5.6】 laravel中介軟體內生成引數並且傳遞到控制器的2方法

中介軟體方法: /** * 自定義中介軟體: * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */

Laravel 中介軟體作用講解

昨天在開發過程中,需要使用到中介軟體的技術,之前都只是簡單的認為要增加中介軟體就往middleware裡新增中介軟體即可。本著週末的時間,就仔細研究了下 $middleware $middlewareGroup $routeMiddleware三個屬性,到底是怎麼樣用的,通過查閱文件和網上資料,可算

訊息中介軟體(二)訊息佇列常見的幾使用場景介紹

一、訊息佇列概述 訊息佇列中介軟體是分散式系統中重要的元件,主要解決應用耦合,非同步訊息,流量削鋒等問題。實現高效能,高可用,可伸縮和最終一致性架構。是大型分散式系統不可缺少的中介軟體。 目前在生產環境,使用較多的訊息佇列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaM