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
にそれぞれアクセスした時、ミドルウェアが有効な時だけ値が受け取れることが確認できます。
以上です。