resouceを利用してルートを設定しています。
php
1Route::resource('users', 'UserController');
この時、ルートは下記のようになります。
php
1+----------------------------------------+---------------------+---------------+------------------------------------------- 2| Method | URI | Name | Action 3+----------------------------------------+---------------------+---------------+------------------------------------------- 4| GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | / | | Illuminate\Routing\RedirectController 5| POST | users | users.store | App\Http\Controllers\UserController@store 6| GET|HEAD | users | users.index | App\Http\Controllers\UserController@index 7| GET|HEAD | users/create | users.create | App\Http\Controllers\UserController@create 8| GET|HEAD | users/{user} | users.show | App\Http\Controllers\UserController@show 9| PUT|PATCH | users/{user} | users.update | App\Http\Controllers\UserController@update 10| GET|HEAD | users/{user}/edit | users.edit | App\Http\Controllers\UserController@edit
UserController.php
php
1namespace App\Http\Controllers; 2 3use Illuminate\Http\Request; 4use App\Http\Controllers\Controller; 5use Illuminate\Support\Facades\DB; 6use App\User; 7use App\Http\Requests\UserRequest; 8 9class UserController extends Controller 10{ 11 public function edit(User $user) 12 { 13 //$user = User::findOrFail($id); 14 15 return view( 16 'user.edit', 17 ['user' => $user] 18 ); 19 } 20 21 public function update(UserRequest $request, $id) 22 { 23 $user = User::findOrFail($id); 24 $user->fill($request->all())->save(); 25 return redirect()->route('users.index'); 26 } 27}
views/user/edit.blade.php
php
1<form method="POST" action="{{ route('users.update', ['id' => $user->id ]) }}" id="myform"> 2@if ($errors->any()) 3 <div class="alert alert-danger"> 4 <ul> 5 @foreach( $errors->all() as $error) 6 <li>{{ $error }}</li> 7 @endforeach 8 </ul> 9 </div> 10@endif 11{{ csrf_field() }} 12{{ method_field('PATCH') }} 13(略) 14</form> 15 16<button class="btn btn-primary save" type="submit" form="myform">保存</button>
UserRequest.php
php
1namespace App\Http\Requests; 2 3use Illuminate\Foundation\Http\FormRequest; 4 5class UserRequest extends FormRequest 6{ 7 public function authorize() 8 { 9 return true; // 認証が必要 10 } 11 12 public function rules() 13 { 14 return [ 15 'name' => 'required|max:255', 16 (略) 17 ]; 18 } 19 20 public function attributes() 21 { 22 return [ 23 'name' => '名前', 24 (略) 25 ]; 26 } 27}
この時、編集画面(/users/{user}/edit)から「PATCH」を指定して送信した際、
「The PATCH method is not supported for this route. Supported methods: GET, HEAD, POST. 」
のエラーになってしまいます。
当然「PUT」でも通りませんでした。
ルート名の指定に間違いはありませんので、「更新」とは別のリクエストが送信されているとも思えないのですが…。
URLは"example.com/users?id=1"という形式になっています。
どのような理由が考えられますでしょうか?
回答1件
あなたの回答
tips
プレビュー