Laravelでは、自分でミドルウェアを設定できます。
ミドルウェアの適用するには、ルート設定に書く方法や、コントローラのコンストラクタに書く方法があります。
それぞれの方法の手順を解説していきます。
「ミドルウェアって何?」と思ったら、まずは下記記事をご覧ください。マンガ入りで解説しています。
今回作成するLaravelのミドルウェア
今回は、特定のユーザー以外は入れないページを設定してみます。
次のような設計にします。
- ユーザーidが1のユーザーのみ、testページにアクセスできるようにする
- 他のユーザーがtestページにアクセスしようとした場合、もしログインしていなければログインページに、ログイン済みならトップページにリダイレクトする
なお、実行にあたってはLaravelの認証機能が必要になります。
もしまだ認証機能を付けていない場合には、前回の記事を参考にしながらインストールをしておいてくださいね。
10分程度で終わります。
Laravelミドルウェアの作成:ルート設定に書く
それでは、実際にLaravelを操作しながら、ミドルウェアを実装してみましょう。
①新しくミドルウェアを作成する
php artisan コマンドで新しくミドルウェアを作成します。
1 |
php artisan make:middleware TestMiddleware |
②Kernel.phpファイルにミドルウェアのパスを入力する
app/Http フォルダの中のKernel.phpファイルに、作成したミドルウェアについて登録しておきます。
1 |
'TestMiddleware'=>\App\Http\Middleware\TestMiddleware::class, |
入力後のファイルは、次のようになります。
③データベースを準備しておく
まずはユーザー登録画面より、ユーザーを1人登録しておいてください。
ユーザー登録画面は、トップページ右上のRegisterをクリックすると表示されます。
【トップページ】
【ユーザー登録ページ(/register)】
データベースのusersテーブルを開きます。登録したユーザーのidが1であることを確認しておきます。
④ユーザーモデルファイルを編集する
app/Modelsフォルダの中のUser.phpを開きます。次のコードを追加します。
1 2 3 4 5 |
public function test(){ if($this->id=='1'){ return true; } return false; } |
コードの意味
- もしユーザーのidが【1】であれば、trueとします。
- そうでなければ、falseとします。
⑤ミドルウェアファイルを編集する
先ほど作成したミドルウェアファイルを編集します。
app/Http/Middleware の中のTestMiddleware.phpファイルを開き、一番上に次のコードをいれます。
1 |
use Illuminate\Support\Facades\Auth; |
入力後のファイルは、次のようになります。
次に、下記のコードを追加します。
1 2 3 4 5 6 7 8 9 |
public function handle($request, Closure $next) { $user = Auth::user(); if(!$user->test()){ return redirect('/'); } return $next($request); } |
コードの意味
- $userは、認証済みユーザー(ログイン済みユーザー)とします。
- もし$userが(ユーザーモデルに記した)testの条件を満たしていなければ、redirect処理をします。トップページを表示してください。
- もしtestの条件を満たしていたら、リクエストを実行してください。
⑥ルートファイルを編集する
routesフォルダの中のweb.phpファイルを開きます。
下記のコードを入力します。
1 2 3 |
Route::get('/test', function(){ return "ミドルウェアの実験成功"; })->middleware('auth', 'TestMiddleware'); |
コードの意味
- /test ページにアクセスがあれば、AuthミドルウェアとTestMiddlewareを実施してください。
- もしミドルウェアを通過したら、「ミドルウェアの実験成功」と返してください。
/testにアクセスしたユーザーは、まずミドルウェアのチェックを受けることになります。
最初にauthミドルウェアのチェックを受けます。これによって、ログインしていなければログイン画面にリダイレクトします。
authミドルウェアは、前回記事で解説しています。
ログイン済みだった場合は、TestMiddlewareのチェックを受けます。TestMiddlewareは、idが1番のユーザーしか通さないように設定しています。そのため、idが1以外のユーザーがアクセスすると、トップページにリダイレクトします。
idが1のユーザーがアクセスした場合、「ミドルウェアの実験成功」メッセージが表示されます。
⑦ミドルウェアの実験をしてみる
準備が整ったら、実験をしてみましょう。
idが【1】のユーザーとして、Laravelのトップページからログインしまず。
/test ページを開き、下記のメッセージが表示されていれば成功です!
他の条件でもテストしてみてください。
ログインしていない状態で/testにアクセスした場合は、ログイン画面が表示されます。
idが1でないユーザーとしてログインして、/testにアクセスした場合は、トップページが表示されます。
Laravelミドルウェアの作成:コントローラーのコンストラクタに書く
次にミドルウェアを適用する2つ目の方法を解説します。
上記の【Laravelミドルウェアの作成:ルート設定に書く】と途中まで同じです。
手順⑥から変わってくるので、そこから解説していきますね。
⑥ルートファイルを編集する(コンストラクタ編)
routesフォルダの中のweb.phpファイルを開きます。
下記のコードを入力します。
1 |
Route::get('/test2', 'App\Http\Controllers\TestController@index')->middleware('auth'); |
- /test ページにアクセスがあれば、Authミドルウェアを実施してから、TestControllerのindexメソッドを実行します。
次にTestControllerのindexメソッドを書いていきます。
⑦ コントローラーファイルを作成する(コンストラクタ編)
次のようにコマンドを入力して、TestControllerを作成します。
1 |
php artisan make:controller TestController |
⑧コントローラーファイルを編集する(コンストラクタ編)
app/Http/Controllers ファイルから、TestContoller.phpファイルを開きます。
次のように入力します。
1 2 3 4 5 6 7 8 9 10 |
class TestController extends Controller { public function __construct(){ $this->middleware('TestMiddleware'); } public function index(){ return "ミドルウェアの実験成功2"; } } |
コードの意味
◆__constructメソッド(コンストラクタ):初期設定。
このクラスの各メソッドを実行するときは、TestMiddlewareを実行してください。
◆index()メソッドでは、「ミドルウェアの実験成功2」と返してください。
⑨ミドルウェアの実験をしてみる(コンストラクタ編)
準備が整ったら、先ほどと同じように実験してみましょう。
まずidが【1】のユーザーとして、Laravelのトップページからログインしてみます。
/test2 ページを開き、下記のメッセージが表示されていれば成功です!
他の条件でも試してみましょう。
ログインしていない状態で/testにアクセスした場合は、ログイン画面が表示されます。
idが1でないユーザーとしてログインして、/testにアクセスした場合は、トップページが表示されます。
さいごに
今回のまとめ
- middlewareは【php artisan make:middleware】で作成できる。ファイル作成後、Kernel.phpに作成したmiddlewareを入力しておく
- 作成にはルート設定に書く方法や、コントローラーに書く方法がある
Larvelはファイル同士の関連性を理解するのが面倒です。
ただ分かってくると、あらかじめ色々準備されていて、非常に効率よく機能を実装できるシステムだということが見えてきます。
「Laravelの使い方を基本から学びたい」と思ったら、学習サイト【Laravelの教科書】をご活用ください。
Laravelの基本を学びながら、フォーラムサイトを作成していきます。
詳しくは、下記の案内ページをご覧ください。
基礎編部分は無料プレゼント中です♪