Q&A
前提・実現したいこと
Laravel ミドルウェアのサンプルコードでエラー(argument must be of type array|object, null given)がでるので解決したいです。
###環境
- Laravel8
- PHP8.0
- PhpStorm
発生している問題・エラーメッセージ
ErrorException foreach() argument must be of type array|object, null given ( View: /Users/...(略).../resources/views/hello/index.blade.php)
該当のソースコード
php
1// Http/Middleware/HelloMiddleware.php 2namespace App\Http\Middleware; 3use Closure; 4use Illuminate\Http\Request; 5use Illuminate\Support\Facades\Log; 6 7public function handle(Request $request, Closure $next): mixed 8 { 9 $data = [ 10 ['name' => 'taro', 'mail' => 'taro@yamada'], 11 ['name' => 'hanako', 'mail' => 'hanako@flower'], 12 ['name' => 'sachiko', 'mail' => 'sachiko@happy'], 13 ]; 14 15 $request->merge(['data' => $data]); 16 17 return $next($request); 18 }
php
1// resources/views/hello/index.blade.php 2 <table> 3 @foreach($data as $item) 4 <tr><th>{{$item['name']}}</th><td>{{$item['mail']}}</td></tr> 5 @endforeach 6 </table>
php
1// web.php 2use Illuminate\Support\Facades\Route; 3use App\Http\Middleware\HelloMiddleware; 4use App\Http\Controllers\HelloController; 5 6Route::get('hello', 'HelloController@index')->middleware(HelloMiddleware::class);
php
1// Http/Controllers/HelloController.php 2namespace App\Http\Controllers; 3use Illuminate\Http\Request; 4 5class HelloController extends Controller{ 6 public function index(Request $request){ 7 return view('hello.index', ['data' => $request->data]); 8 } 9}
php
1// Kernel.php 2 protected $routeMiddleware = [ 3 'hello' => \App\Http\Middleware\HelloMiddleware::class, 4 ];
試したこと
- null になる原因はHelloMiddleware.phpが機能していないことにあると考え、Laravel8 で変更されたルーティングの書き方を試行錯誤しましたが、解決できませんでした。
※参考記事
2. artisan コマンドで route, config, view, cache のキャッシュをクリアしましたが結果は変わりませんでした。
自己解決
web.php を下記のように訂正
Route::get('hello', [HelloController::class, 'index'])->middleware(HelloMiddleware::class);
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。