Perl日記

PerlとかRubyとかPHPとかPythonとか

Laravel5.1入門その3

ミドルウェアを触ってみる。


artisanでミドルウェアのスケルトンを作る。

$ php artisan make:middleware AuthenticateUserAgent
Middleware created successfully.

できた。

app/Http/Middleware/AuthenticateUserAgent.php

<?php

namespace App\Http\Middleware;

use Closure;

class AuthenticateUserAgent
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}


本当に動いているか変えてみる。

<?php
    public function handle($request, Closure $next)
    {
        \Log::debug("before dayo.");

        $response = $next($request);

        \Log::debug("after dayo.");

        return $response;
    }

app/Http/Kernel.php

$middlewareに突っ込むと、全リクエストに対してこのミドルウェアが有効になるらしい。(グローバルミドルウェア
デフォルトで通るミドルウェアを一旦全部外して、自分のやつだけを置く。

<?php
    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,

        \App\Http\Middleware\AuthenticateUserAgent::class,
    ];

一回アクセスしてみる。 http://localhost/

storage/logs/laravel.log
ちゃんと出た。

[2015-06-17 14:39:21] local.DEBUG: before dayo.
[2015-06-17 14:39:21] local.DEBUG: after dayo.

たとえばFirefox以外はアクセスさせないようにしてみる。

app/Http/Middleware/AuthenticateUserAgent.php

<?php
    public function handle($request, Closure $next)
    {
        $ua = $request->server->get('HTTP_USER_AGENT');
        if (strpos($ua, 'Firefox') === false)
        {
            abort(404);
        }

        $response = $next($request);
        return $response;
    }

Firefoxだとちゃんと出るけど、Safariだと、

f:id:rightgo09:20150617235330p:plain

となった。