FormからPostしたいのですが、Postとして処理できず下記のようなエラーが発生します。
local.ERROR: Uncaught Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: The GET method is not supported for this route. Supported methods: POST. in /var/www/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php:256
他のページでは特に問題なくPOSTできるのですが、このrouteのページだけエラーが発生しています。
特に特殊な処理はしていないのですが、何か考えられる原因はないでしょうか?
もし、他の部分も載せた方が良い場合はご教示ください。
ソース
view
フォームのタグです。
methodもPOSTなのでPostで処理をされているはずです。
php
1<form method="POST" action="{{ route('csv.import') }}" accept-charset="UTF-8" enctype="multipart/form-data" > 2 @csrf 3 <input class="cutom-file-input" id="csv-input" type="file" name="import_file"/> 4 <div class="btn-group"> 5 <button class="btn btn-primary" type="submit">アップロード</button> 6 </div> 7</form>
route.php
Formのactionに設定しているルートです。
管理画面配下のページなので、MiddlewareにAuthの処理が入っていますが、それ以外は入っていません。
php
1Route::post('/import', 'UserController@csvImport') 2 ->name('csv.import');
UserController
ルートで呼び出すコントローラーと
php
1public function csvImport(UserCsvImportRequest $request){ 2 dd($request); 3}
UserCsvImportRequest
コントローラーで呼び出すRequestの処理は下記です。
php
1<?php 2 3namespace App\Http\Requests; 4 5use Illuminate\Foundation\Http\FormRequest; 6 7class UserCsvImportRequest extends FormRequest 8{ 9 /** 10 * Determine if the user is authorized to make this request. 11 * 12 * @return bool 13 */ 14 public function authorize() 15 { 16 return true; 17 } 18 19 public function attributes() 20 { 21 return [ 22 'import_file' => 'インポートするファイル' 23 ]; 24 } 25 26 /** 27 * Get the validation rules that apply to the request. 28 * 29 * @return array 30 */ 31 public function rules() 32 { 33 return [ 34 'import_file' => [ 35 'required', 36 'max:5', 37 'file', 38 'mimes:csv' 39 ] 40 ]; 41 } 42} 43
試した事
メソッドを変える
試しに、メソッドをgetに変えてみました。
php
1Route::get('/import', 'School\UserController@csvImport') 2 ->name('csv.import');
変更してGetでアクセスすると、下記のエラーが吐かれており、POSTでもGETでも、HEADでもない状態なのがわかりました。
405 The POST method is not supported for this route. Supported methods: GET, HEAD.
GET,POSTを指定する
両方のメソッドを指定すると、Postが実行できることを確認できました。
php
1Route::match(['get', 'post'], '/import', 'School\UserController@csvImport') 2 ->name('csv.import');
Requestをデフォルトに変える
自作したRequestクラスに変えたところ、post出来ました。
php
1public function csvImport(Request $request){ 2 dd($request); 3}

回答1件
あなたの回答
tips
プレビュー