ぬぬん!

やってみたこと,思ったこと

【這いよれLaravelさん】ミドルウェア(1)

ミドルウェアってなんじゃ

私は「ミドルウェア」と聞いてDBのことかぁああああああと思ってた

なんか色々違うようなので
私の認識でまとめる

ミドルウェアとは

アクセスしたメイン処理の前後に行う処理を記載するとこ
例:認証、アクセスログcsrfとか

雑だけどコレが一番しっくりきた

ミドルウェア定義

ミドルウェアの作り方
便利なartisanコマンドで一発作成

gomac:laravel-study goma$ php artisan make:middleware OldMiddleware
Middleware created successfully.

作成される場所はここ

app/Http/Middleware/OldMiddleware.php

同じ場所に既にいくつかミドルウェアが存在する

  • Authenticate.php(認証まわり
  • VerifyCsrfToken.php(CSRFまわり
  • EncryptCookies.php(Cookieまわり
  • RedirectIfAuthenticated.php(認証まわりのリダイレクタ

便利だなー(小並感

年齢フィルタリングミドルウェアを作る

ちゃんと動くか確認するために
app/Http/Kernel.phpのrouteMiddlewareに追記

<?php

    protected $routeMiddleware = [
        ......
        'old' => \App\Http\Middleware\OldMiddleware::class,
        ],

app/Http/Middleware/OldMiddleware.phpは雑にこんな感じ
年齢が200歳以下ならsuccessに飛んで
ダメならルートへ
(もっと良い検証方法なかったのかと思ってはいる)

<?php
  /**
   * リクエストフィルターを実行
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  \Closure  $next
   * @return mixed
   **/
  public function handle($request, Closure $next)
  {
    if ($request->input('age') <= 200) {
      return redirect('success');
    }
    return redirect('');
  }

コントローラーで読み込む

<?php
class HomeController extends Controller
{
  public function __construct()
  {
    $this->middleware('old');
  }

  public function index()
  {
    return view('home');
  }
}

rote.phpも足しておこう

<?php

Route::post('home', 'HomeController@index');
Route::get('success', 'SuccessController@index');

ここでルートリストの確認 f:id:gomayumax:20160527214959p:plain

midllewareにoldが追加されてる良さそう!

雑にフォームをwelcome.bladeに設置

    {!! Form::open(['url' => 'home', 'method' => 'post']) !!}
{!! Form::text('age', 200, ['class' => 'form-control']) !!}
    {!! Form::submit('Click Me!') !!}
    {!! Form::close() !!}

これで
home→(middlewareによる年齢フィルター)→succese or root
という流れが出来ました٩(ˊᗜˋ*)و

ミドルウェア動くのは確認はできた 良さそう?

github.com

次はミドルウェアbefore,afterについて