問題
「Laravel」+「Docker」+「Nginx」のリバースプロキシ環境で、Breeze導入後、記事投稿のCRUDを実装していたところ次のようなエラーが発生したため、解消方法をまとめています。
エラー内容
Router::resources() の1番目の引数は配列でなければならないが文字列が渡されているという型のエラーが出ているようです。
Internal Server Error
TypeError
Illuminate\Routing\Router::resources(): Argument #1 ($resources) must be of type array, string given, called in /var/www/src/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 361
問題発生時のコード
src/route/web.php
<?php
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\ArticleController;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('top');
})->name('top');
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
Route::resources('/article', ArticleController::class); // 原因となるコード
});
require __DIR__.'/auth.php';
解決方法
「resources」と記述していたのが原因だったため、「resource」に修正しました。
src/route/web.php
Route::resource('/article', ArticleController::class);
全体のコード
<?php
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\ArticleController;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('top');
})->name('top');
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
Route::resource('/article', ArticleController::class); // 修正完了
});
require __DIR__.'/auth.php';
おわりに
以前にrailsで学習しており、「resources」と記述していtのもあってついその記述をしてしまいました。
ちなみにこのエラー出す以前にタイポミスをしており、「〜〜does not exist.」というエラーも出しておりました。
Laravelもわかってくると楽しいのですが、コードの記述量やRailsと書き方も違って慣れるまで難しさを感じます。
この記事がエラー解消のために役立ちましたら幸いです。
また、この記事の内容に不備や改善点などがありましたら、ご指摘いただけると嬉しいです。
参考