質問編集履歴

3 説明追記

hasshy

hasshy score 79

2019/08/13 22:50  投稿

【Laravel】FormでPostしてもPostとして送信できない
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
<form method="POST" action="{{ route('csv.import') }}" accept-charset="UTF-8" enctype="multipart/form-data" >
   @csrf
   <input class="cutom-file-input" id="csv-input" type="file" name="import_file"/>
   <div class="btn-group">
       <button class="btn btn-primary" type="submit">アップロード</button>
   </div>
</form>
```
### route.php
Formのactionに設定しているルートです。 
管理画面配下のページなので、MiddlewareにAuthの処理が入っていますが、それ以外は入っていません。
```php
Route::post('/import', 'School\UserController@csvImport')
Route::post('/import', 'UserController@csvImport')
                   ->name('csv.import');
```
### UserController  
ルートで呼び出すコントローラーと  
```php  
public function csvImport(UserCsvImportRequest $request){  
   dd($request);  
}  
```  
 
### UserCsvImportRequest  
コントローラーで呼び出すRequestの処理は下記です。  
 
```php  
<?php  
 
namespace App\Http\Requests;  
 
use Illuminate\Foundation\Http\FormRequest;  
 
class UserCsvImportRequest extends FormRequest  
{  
   /**  
    * Determine if the user is authorized to make this request.  
    *  
    * @return bool  
    */  
   public function authorize()  
   {  
       return true;  
   }  
 
   public function attributes()  
   {  
       return [  
           'import_file' => 'インポートするファイル'  
       ];  
   }  
 
   /**  
    * Get the validation rules that apply to the request.  
    *  
    * @return array  
    */  
   public function rules()  
   {  
       return [  
           'import_file' => [  
               'required',  
               'max:5',  
               'file',  
               'mimes:csv'  
           ]  
       ];  
   }  
}  
 
```  
 
 
## 試した事
### メソッドを変える  
試しに、メソッドをgetに変えてみました。
```php
Route::get('/import', 'School\UserController@csvImport')
                   ->name('csv.import');
```
変更してGetでアクセスすると、下記のエラーが吐かれており、POSTでもGETでも、HEADでもない状態なのがわかりました。
> 405 The POST method is not supported for this route. Supported methods: GET, HEAD.
> 405 The POST method is not supported for this route. Supported methods: GET, HEAD.
#### GET,POSTを指定する
両方のメソッドを指定すると、Postが実行できることを確認できました。
```php
Route::match(['get', 'post'], '/import', 'School\UserController@csvImport')
                   ->name('csv.import');
```
### Requestをデフォルトに変える
自作したRequestクラスに変えたところ、post出来ました。
```php
public function csvImport(Request $request){
   dd($request);
}
```
  • PHP

    30615 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Laravel

    2552 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • Laravel 5

    3127 questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

2 form修正

hasshy

hasshy score 79

2019/08/13 22:20  投稿

【Laravel】FormでPostしてもPostとして送信できない
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
<form method="POST" action="{{ route('csv.import') }}" accept-charset="UTF-8">
<form method="POST" action="{{ route('csv.import') }}" accept-charset="UTF-8" enctype="multipart/form-data" >
   @csrf
   <input class="cutom-file-input" id="csv-input" type="file" name="import_file"/>
   <div class="btn-group">
       <button class="btn btn-primary" type="submit">アップロード</button>
   </div>
</form>
```
### route.php
Formのactionに設定しているルートです。 
管理画面配下のページなので、MiddlewareにAuthの処理が入っていますが、それ以外は入っていません。
```php
Route::post('/import', 'School\UserController@csvImport')
                   ->name('csv.import');
```
## 試した事
試しに、メソッドをgetに変えてみました。
```php
Route::get('/import', 'School\UserController@csvImport')
                   ->name('csv.import');
```
変更してGetでアクセスすると、下記のエラーが吐かれており、POSTでもGETでも、HEADでもない状態なのがわかりました。
> 405 The POST method is not supported for this route. Supported methods: GET, HEAD.
  • PHP

    30615 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Laravel

    2552 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • Laravel 5

    3127 questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

1 誤記

hasshy

hasshy score 79

2019/08/13 20:13  投稿

【Laravel】FormでPostしてもGetととして送信されてしまう。
【Laravel】FormでPostしてもPostとして送信できない
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
<form method="POST" action="{{ route('csv.import') }}" accept-charset="UTF-8">
@csrf
<input class="cutom-file-input" id="csv-input" type="file" name="import_file"/>
<div class="btn-group">
<button class="btn btn-primary" type="submit">アップロード</button>
</div>
</form>
```
### route.php
Formのactionに設定しているルートです。
管理画面配下のページなので、MiddlewareにAuthの処理が入っていますが、それ以外は入っていません。
```php
Route::post('/import', 'School\UserController@csvImport')
->name('csv.import');
```
## 試した事
試しに、メソッドをgetに変えてみました。
```php
Route::get('/import', 'School\UserController@csvImport')
->name('csv.import');
```
変更してGetでアクセスすると、下記のエラーが吐かれており、POSTでもGETでも、HEADでもない状態なのがわかりました。
> 405 The POST method is not supported for this route. Supported methods: GET, HEAD.
  • PHP

    30615 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Laravel

    2552 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

  • Laravel 5

    3127 questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る