質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Laravel 5

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

Q&A

解決済

2回答

8800閲覧

submitでPOSTした結果、404 not foundになる

dato

総合スコア64

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Laravel 5

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

0グッド

0クリップ

投稿2019/09/03 15:25

編集2019/09/05 03:15

コントローラーにpostした値をおくる。

ログイン画面にて、ログインボタンを押すと、コントローラーにpostされ、フォームリクエストでvalidationされる流れなのですが、名前とパスワードを入力してもしなくても404になってしまいます。

発生している問題・エラーメッセージ

404 not found

該当のソースコード

Login.blade.php

@if(count($errors)>0) <ul>@foreach ($errors->all() as $error) <li>{{$error}}</li> @endforeach </ul> @endif <form action="/LogVali" method="post"> 名前 <input type="text" name="name2" value="{{old('name2')}}"> <br> パスワード <input type="text" name="password2"value="{{old('password2')}}"> <br> <input type="hidden" name="_token" value="{{csrf_token()}}"> <input type="submit" value="ログイン"> </form>

web.php

Route::post('/LogVali', 'AdministratorController@LogVali');

AdministratorController.php

namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs; use App\Http\Requests\ValiRequest2; use App\Http\Requests\ValiRequest3; use App\Models\LaravelContact; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AdministratorController extends Controller public function validation(ValiRequest2 $request){ $laravelcontact= new LaravelContact(); $laravelcontact->name=$request->input('name'); $laravelcontact->password=$request->input('password'); $laravelcontact->save(); return view('Login'); public function LogVali(ValiRequest3 $request){ return view('input'); }

valiRequest3

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ValiRequest3 extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name2'=>'required|max:32', 'password2'=>'required', // ]; } public function messages(){ return[ 'name2.required'=>'名前を入力してください。', 'name2.max'=>'名前を32文字以下にしてください。', 'password2.required'=>'パスワードを入力してください。', ]; } }

試したこと

php artisan route:list
するとルートで、LogValiはありました。
同じコントローラー内で、異なる値にたいして$requestがつかえないのでしょうか?
@csrfにしたところThe GET method is not supported for this route. Supported methods: POST.がでる

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/09/04 00:29 編集

> public function LogVali(ValiRequest3 $request){ ちゃんとnamespaceもクラスも書いてください(できれば全体)
mix-peach

2019/09/04 02:10

下記の追記をお願いします。 ①Route::post('/LogVali', 'AdministratorController@LogVali'); を記載したファイル名 ②ValiRequest3 の中身 ③ログイン画面のroute設定と、そのControllerの中身
dato

2019/09/04 11:29

返信ありがとうございます。登録画面からログイン画面への表示とデータべースへの挿入はできています。ログイン画面からのpostができていない状態です。
guest

回答2

0

自己解決

今日突然治りました。
原因はわかりませんが、なぜか突然治りました。恐ろしいことですが、これで解決とさせていただきます。

投稿2019/09/06 07:39

dato

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/09/06 07:40

考えられるのはキャッシュですかね ただURL生成部分は私の回答に書いたことを参考にしてください。 サイト内URLであれば直接記述することってありません。環境依存にもなりますし。
dato

2019/09/07 06:14

ありがとうございます。 参考にさせていただきます。
guest

0

可能性だけ書きます。

  • @csrfでいいのでは
  • 404はつまり「指定先がみつからない」ってことだからnamespaceが正しく指定されてないとかコントローラ名のスペルミスがあるとかでは
  • URL生成するときはroute()とかaction()の方が確実

投稿2019/09/04 00:35

編集2019/09/04 00:35
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dato

2019/09/04 16:50

@csrfでやってみたところ、ログイン画面でなにも入力せずにログインボタンを押すと The GET method is not supported for this route. Supported methods: POST.のエラーがでました。やはり、値がpostされていないみたいです。
m.ts10806

2019/09/04 20:03

ひとつ進んだみたいですね。 ただ 404から進んだのであれば「や」と並列にするのは状況として正しくありません。 「試したこと」に追記し、その結果として出た現象として記載してください。 そのエラーはよくあるものです。解決方法も絞られてきますので調べてみてください。 teratail内にも何度か投稿されたことがあるものです。
dato

2019/09/05 03:55

getとpostを両方設定する方法でやったところ、再び404のエラーがでてきました。 しかし、urlをみると、localhost:8000/LogValiとなっていたため、コントローラーまではうまくいっているとおもいます。ValiRequest3に問題があるのでしょうか、、
m.ts10806

2019/09/05 03:59 編集

404はあくまでリクエストしたURLが見つからないということですので、そこはどうかなとは思います。400とか別のエラーになりそう。 親クラスのRequestにしたらどうなりますか?
dato

2019/09/05 04:38

404でした。1コントローラー1フォームリクエストなのでしようか? あたらしくコントローラーつくってやってみたいとおもいます。
m.ts10806

2019/09/05 04:40

いえ、ちゃんとルーティングしていればリクエストは幾らでも送れます。 あまり関係ないのとは思いますが composer dump-autoload を実行してみてください。
dato

2019/09/05 05:05

404でした。。
dato

2019/09/05 05:07

Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: beyondcode/laravel-dump-server Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. Generated optimized autoload files containing 3630 classes 実行結果です。
m.ts10806

2019/09/05 05:08

あ、で、同じように操作するとどうなりますか?
m.ts10806

2019/09/05 05:09

>404でした。。 すみません。見落としてました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問