Laravelのミドルウェアの2つの作成方法【初心者のためのLaravel超入門講座】

Laravel 入門講座

Laravelには、手軽にミドルウェアを作れる機能がついています。

ミドルウェアの適用の指定は、ルート設定に書く方法や、コントローラのコンストラクタに書く方法があります。

今回は、この2つの手順を紹介します。

実際にLaravelにコードを打ち込んで、試してみてくださいね。

なお「ミドルウェアが何か」知りたい場合は、マンガ入りで解説している記事をご覧ください。

今回作成するLaravelのミドルウェア

今回は、特定の役割のユーザー以外は入れないページを設定してみます。

次のような設計にします。

  • ユーザーテーブルに【role_id】という新しいカラムを追加する
  • 【role_id】が【1】のユーザーのみに、testページが表示されるようにする
  • 【role_id】が【1】ではないユーザーは、トップページに追い返されるようにする

なお、実行にあたってはLaravelの認証機能が必要になります。

もしまだ認証機能を付けていない場合には、前回の記事を参考にしながらインストールをしておいてくださいね。

10分程度で終わります。

Laravelミドルウェアの作成:ルート設定に書く

それでは、実際にLaravelを操作しながら、ミドルウェアを実装してみましょう。

①新しくミドルウェアを作成する

php artisan コマンドで新しくミドルウェアを作成する

②Kernel.phpファイルにミドルウェアのパスを入力する

app/Http フォルダの中のKernel.phpファイルに、作成したミドルウェアについて登録しておきます。

入力後のファイルは、次のようになります。

③データベースを準備しておく

ユーザーテーブルに【role_id】カラムを追加します。

マイグレーションファイルには、次のカラムを追加します。

マイグレーションを行ってカラムを追加する手順は、こちらのページを参考にしてください。

カラムを追加後、【role_id】が【1】のユーザーと、【role_id】が【2】のユーザーも作っておきます。

【ユーザーテーブル例】

④ユーザーモデルファイルを編集する

appフォルダの中のUser.phpを開きます。次のコードを追加します。

コードの意味

  • もしユーザーのrole_idが【1】であれば、tureとします。
  • そうでなければ、falseとします。

⑤ミドルウェアファイルを編集する

先ほど作成したミドルウェアファイルを編集します。

app/Middleware の中のTestMiddleware.phpファイルを開き、一番上に次のコードをいれます。

入力後のファイルは、次のようになります。

次に、下記のコードを追加します。

コードの意味

  • ユーザーは、認証が通ったユーザー(ユーザー登録済)とします。
  • もしユーザーが(ユーザーモデルに記した)testの条件を満たしていなければ、redirect処理をします。トップページを表示してください。
  • もしtestの条件を満たしていたら、リクエストを実行してください。

⑥ルートファイルを編集する

routesフォルダの中のweb.phpファイルを開きます。

下記のコードを入力します。

コードの意味

  • /test ページにアクセスがあれば、TestMiddlewareを実施してから、function() { } の命令を実行します。
  • 「ミドルウェアの実験成功」と返してください。

これで、/testにアクセスしたユーザーはミドルウェアのチェックを受けることになります。

設定した条件(role_id=1)を満たしたユーザーにだけ、「ミドルウェアの実験成功」メッセージが表示されます。

⑦ミドルウェアの実験をしてみる

準備が整ったら、実験をしてみましょう。

まず【role_id】が【1】のユーザーとして、Laravelのトップページからログインしてみます。

/test ページを開き、下記のメッセージが表示されていれば成功です!

念のため、【role_id】が【1】以外のユーザーとしても、ログインしてみましょう。

/testページを開くと、すぐに追い返されてトップページに戻るはずです。

Laravelミドルウェアの作成:コントローラーのコンストラクタに書く

ミドルウェアを使うときには、コンストラクタを使う方法もあります。

上記の【Laravelミドルウェアの作成:ルート設定に書く】と途中まで同じです。

手順⑥から変わってくるので、そこから解説していきますね。

⑥ルートファイルを編集する(コンストラクタ編)

routesフォルダの中のweb.phpファイルを開きます。

下記のコードを入力します。

コードの意味
/test2 ページにアクセスがあれば、TestControllerのindexメソッドを実行してください。

⑦ コントローラーファイルを作成する(コンストラクタ編)

次のようにコマンドを入力して、TestControllerを作成します。

⑧コントローラーファイルを編集する(コンストラクタ編)

app/Http/Controllers ファイルから、TestContoller.phpファイルを開きます。

次のように入力します。

コードの意味

◆__constructメソッド(コンストラクタ):初期設定。
このクラスの各メソッドを実行するときは、まずTestMiddlewareを実行してください。
(注:まずというのは、before型の場合。after型もあるけどあまり使わないです。)

◆index()メソッド:「ミドルウェアの実験成功2」と返してください。

⑨ミドルウェアの実験をしてみる(コンストラクタ編)

準備が整ったら、先ほどと同じように実験してみましょう。

まず【role_id】が【1】のユーザーとして、Laravelのトップページからログインしてみます。

/test2 ページを開き、下記のメッセージが表示されていれば成功です!

【role_id】が【1】以外のユーザーとしてログインすると、【/test2】ページを開くと、すぐにトップページに追い返されます。

さいごに

今回のまとめ

  • middlewareは【php artisan make:middleware】で作成できる。ファイル作成後、Kernel.phpに作成したmiddlewareを入力しておく
  • 作成にはルート設定に書く方法や、コントローラーに書く方法がある

Larvelはファイル同士の関連性を理解するのが面倒です。

ただ分かってくると、あらかじめ色々準備されていて、非常に効率よく機能を実装できるシステムだということが見えてきます。

Laravelの使い方は【Laravel超入門講座】の他の記事も参考にしてみてくださいね。

コメント

タイトルとURLをコピーしました