PHP
Web
laravel
userAgent
laravel5.4

laravel5.4のMiddlewareでユーザーエージェントによる振り分けを行う

やりたいこと

ユーザーエージェントがSPだったらトップページへリダイレクトしたい

コード

Middlewareの基本的な使い方はこちらをご覧ください。

app/Http/Middleware/SampleRedirect.php
    public function handle($request, Closure $next)
    {
        $ua = $_SERVER['HTTP_USER_AGENT'];
        //spの場合
        if((strpos($ua, 'Android') !== false) && (strpos($ua, 'Mobile') !== false) || (strpos($ua, 'iPhone') !== false) || (strpos($ua, 'Windows Phone') !== false)) {
            return redirect('/');
        }
        return $next($request);
    }
app/Http/Kernel.php
    protected $routeMiddleware = [
        'sampleRedirect' => \App\Http\Middleware\SampleRedirect::class,
    ];
web.php
Route::match(['get', 'post'], '/abcd/', 'sampleController@mainMethod')->middleware('sampleRedirect');

上記のように書いた場合、/abcd/にアクセスがあった際、sampleController.phpのmainMethodの処理をする前にSampleRedirect.phpのhandleの処理をします。
リダイレクトする条件以外の場合はそのままsampleController.phpのmainMethodが処理されます。

Middlewareに書くことでルーティングファイルがすっきりし、汎用的に利用でき、リクエストが処理された後に何かしたいという場合にも使えるため、便利だと思います。