Posted at

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

More than 1 year has passed since last update.


やりたいこと

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