前提
商品登録機能などが行えるAPIの実装をしています。
・閲覧者は、商品の閲覧のみ行うことができる(userは認証機能を必要としない)
・user(管理者)は、商品の登録、編集、削除などを行うことができる
web.php
PHP
1/* 2|-------------------------------------------------------------------------- 3| 1) User 認証不要 4|-------------------------------------------------------------------------- 5*/ 6//商品一覧表示画面 7Route::get('/products', 'ProductController@index')->name('products.index'); 8//商品詳細表示画面 9Route::get('/products/{product}', 'ProductController@show')->name('products.show'); 10 11/* 12|-------------------------------------------------------------------------- 13| 2) User ログイン後 14|-------------------------------------------------------------------------- 15*/ 16//商品登録画面表示 17 Route::get('/products/create', 'ProductController@create')->name('products.create'); 18//商品登録 19 Route::post('/products', 'ProductController@store')->name('products.store'); 20
ProductController.php
PHP
1//商品登録画面表示 2 public function create() 3 { 4 return view('products.create'); 5 } 6//商品詳細画面 7 public function show(Request $request, int $productId) 8 { 9 dd($productId); 10 //idが一致する商品を取得 11 $product = Product::find($productId); 12 13 return view('products.show', [ 14 'product' => $product, 15 ]); 16 }
###困っていること
URLのパラメータにint型以外のものが入力できてしまい、指定されたパラメーターがURLの正しい場所へ埋め込まれない。
具体的には、URLで"localhost/product/create"を指定すると、$productIdがcreateと認識されてしまい、
show() must be of the type int, string given
というエラーが出てしまう。
"localhost/products/create"でルーティングしているはずが、コントローラーで、function create()ではなく、function show()になってしまう理由がわからず困っています。
###試したこと
ProductController.php
PHP
1public function show(Request $request, int $productId)
を
PHP
1public function show(Request $request, $productId)
とし、$productIdに入っている値を確認したところ、"create"と出ました。
回答1件
あなたの回答
tips
プレビュー