0
0

More than 3 years have passed since last update.

laravel5.8ミドルウェアについて[メモ]

Last updated at Posted at 2021-05-19

laravelで自作のミドルウェア作成する機会があったのでメモとして残していこうと思います。

■目次
・laravel MVC+(ルーティングとミドルウェア)について [図]
・ミドルウエア実装

■環境
・laravel5.8
・php7.2

laravel MVC+(ルーティングとミドルウェア)について [図]

Untitled (Draft)-1.jpg

図で書くとこんな感じです。
ミドルウェアは
ルーティングからコントローラ行くまでに実行されます。
(例)認証チェックなど

ミドルウェア実装

■前提(投稿アプリ作成)
現状として、
投稿4つあります。
id:4が自分が投稿したidとします。
しかし、localhost/post/1/editにアクセスするとid:1の投稿にアクセスでき変更更新ができてします。
今回はミドルウェアを使って解決していこうと思います。

1、ミドルウェア作成

php artisan make:middleware EditCheck

app\Http\Middlewareに作成されます。

2、ミドルウェア編集

EditCheck.php
<?php

namespace App\Http\Middleware;

use Closure;
use App\Post; //追加

class EditCheck
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $param = $request->route()->parameter('id');
        //リクエストできたルートのパラメータidを取得
        //今回は1が入ってくるとします

        $post = Post::findOrFail($param);
        //投稿したidを見つけます。今回は1の投稿を見つけます。

        if (auth()->user()->id !== $post->user_id) {
        //ログインしたユーザーidと投稿したユーザーidが一致しない場合
            return redirect('/')->with('error', '許可されていない操作です');
            //一番初めの画面に戻ります。
        }
        return $next($request);
        //正常なら通常のページが表示されます
    }
}

3、ミドルウェア登録

登録方法が3つあります

①全ての処理に共通して処理を行う場合→$middleware

②複数のミドルウェアをまとめて(グループ)登録する場合→$middlewareGroups

③単体で使うミドルウェアを登録しておく場合→$routeMiddleware

Kernel.php
protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'editcheck' => \App\Http\Middleware\EditCheck::class,//追加

今回は③を採用します。

4、Routeでミドルウェア設定

web.php
    Route::get('post/{id}/edit', 'PostsController@edit')->name('post.edit')->middleware('editcheck');

これでlocalhost/post/1/editにアクセスすると最初の画面に戻されると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0