0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

laravel livewireで自作ミドルウェアを使う方法

Posted at

laravelのlivewireで自作ミドルウェアを使う方法を紹介します

まずは、下記のコマンドで自作ミドルウェアとなるファイルを生成します。

php artisan make:middleware MyMiddleware

今回は、こんな感じの内容にしてます。
ミドルウェアが有効である場合に$requestからミドルウェアで設定した値を受けるという動作をさせます。

MyMiddleware.php
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class MyMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */



    public function handle($request, Closure $next){
        $id = 1;
        $merge_data = [
            'id' => $id,
            'msg' => '確認です'
        ];

        //mergeメソッドはrequestが持つメソッドで、requestにデータを追加することができる
        $request->merge($merge_data);
        return $next($request);
    }
}

livewireのクラスとビューをこのコマンドで作成します

php artisan make:livewire middleware
Middleware.php
<?php

namespace App\Livewire;

use Livewire\Component;
use Illuminate\Http\Request;

class Middleware extends Component
{
    public $data;

    //ミドルウェアから値(request)を取得して、$this->dataに格納する
    public function mount(Request $request)
    {
        
        $this->data = [
            'id' => isset($request->id) ? $request->id : 'ミドルウェアで設定したIDがありません',
            'msg' => isset($request->msg) ? $request->msg : 'ミドルウェアで設定したメッセージがありません'
        ];
    }


    public function render()
    {
        //return view('livewire.middleware', ['data' => $this->data]);
        return view('livewire.middleware');
    }
}
middleware.blade.php
<div>
    {{-- Stop trying to control. --}}
    <h1 class="text-2xl font-bold">ミドルウェア確認ページ</h1>
    <div class="p-2 bg-gray-100 rounded-md">
        <a href="/middleware/false" class="text-blue-500 block">ミドルウェアを使用しないページ</a>
        <a href="/middleware/true" class="text-blue-500 block">ミドルウェアを使用するページ</a>
    </div>
    @foreach ($data as $key => $value)
        <p>{{ $key }}: {{ $value }}</p>
    @endforeach
</div>

最後にルートを下記のように定義します

web.php
//ミドルウェア無効
Route::get('/middleware/false', Middleware::class)->name('middleware.index');

//ミドルウェア有効
Route::get('/middleware/true', Middleware::class)->name('middleware.index')->middleware(MyMiddleware::class);

ローカルサーバーを立ち上げて
http://127.0.0.1:8000/middleware/false
http://127.0.0.1:8000/middleware/true

にそれぞれアクセスした時、ミドルウェアが有効な時だけ値が受け取れることが確認できます。

以上です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?