iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 18
0
Software Development

30天快速上手Laravel系列 第 18

Day18-[Laravel 資料夾目錄與內容] Middleware

  • 分享至 

  • xImage
  •  

介紹

另外一個會幫忙過濾篩選的功能,中介層,之前在第11章 route的時候有提到可以加上中介層,它分為前中介層跟後中介層,主要是看被執行的時間,接下來看看要怎麼使用。

使用方法

第一步

一樣可以下指令建立Middleware
php artisan make:middleware CheckName

第二步

接著就可以在 App\Http\Middleware 編輯前中介層 或是 後中介層

前中介層

<?php

namespace App\Http\Middleware;

use Closure;

class CheckName //BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Perform action
        if ('TestName' !== $request->name) {
            return redirect('home');
        }

        return $next($request);
    }
}

後中介層

<?php

namespace App\Http\Middleware;

use Closure;

class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}

第三步

註冊中介層,註冊的位置是app/Http/Kernel.php,有三種註冊方式(以影響的範圍區分)

  1. 全域註冊: 在 $middleware 底下加入middleware
  2. 個別註冊: 在$routeMiddleware 底下加入key(自行設定)和middleware
  3. 設定成group註冊: 在 $middlewareGroups 底下加入key(自行設定) 和想要綁定的middleware,或是可以直接拿2設定好的key值加入

中介層group範例

laravel已經建好偷偷在執行的

/**
 * 應用程式的路由中介層群組。
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \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,
    ],

    'api' => [
        'throttle:60,1',
        'auth:api',
    ],
];
  • 其中 throttle代表的是訪問頻率限制,throttle:60,1 一分鐘內被訪問最高次數為60次
  • 配合上面提到第11章的route 設定方式,在web底下的就會被綁定上面這些middleware,而api同理被綁定下面兩個,所以像基本的CSRF Token防護機制已經默默被加入了。

應用

//使用單一middleware
Route::get('admin/profile', ['middleware' => 'auth', function () {
    //
}]);
//使用多個middleware,上面改成用array
Route::get('/', ['middleware' => ['first', 'second'], function () {

//或是加在最後
Route::get('/', function () {
    //
}])->middleware(['first', 'second']);

結論: 前面提過的Request Validation跟中介層的應用不太一樣,在我的理解上Request會比較專注在進來的input格式與內容,而中介層是可以更廣泛的應用例如紀錄log或是CSRF保護等等的使用,其他還有關於帶入參數或是中止中介層等等的使用方法,有興趣的話可以參考官網。

參考連結:


上一篇
Day 17-[Laravel 資料夾目錄與內容] Request Validation
下一篇
Day19-[Laravel 資料夾目錄與內容] Config
系列文
30天快速上手Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言