🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

PHP

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

Q&A

解決済

2回答

515閲覧

フォームリクエストを使用して画面遷移、バリデーションを適用させたい

twinparadox

総合スコア42

Laravel

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

PHP

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

0グッド

0クリップ

投稿2019/12/08 03:30

編集2019/12/09 08:30

バージョン Laravel Framework 6.5.0

#問題点 
フォームリクエストを使用してバリデーションを適用させようとした時に/Signupから/Homeへ画面遷移出来ない。

#試したこと
csrf_fieldの適用

以下コード

CreateUserRequest.php

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class CreateUserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * パスワード7文字以上 * パスワード(確認用)の入力チェック * 全ての項目が入力されているか * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'username' => 'required|max:20', 'email' => 'required|email|max:100', 'password' => 'required|min:7|confirmed', // ]; } }

UserController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\CreateUserRequest; class UserController extends Controller { public function Login() { return view('Lessons.Login'); } public function Signup() { return view('Lessons.Signup'); } public function Home(Request $request) { $name = $request->input('name'); return view('Lessons.Home', compact('name')); } public function postCreate(CreateUserRequest $req) { /** * 拡張クラスに書いたルールでリクエストが自動的に検証される    * バリデーションをパスするとこの後の処理が実行される    */ $this->userService->createUser($req->all()); return view('Lessons.Home'); } }

web.php

<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('Login', 'UserController@Login')->name('Login'); Route::get('Signup', 'UserController@Signup')->name('Signup'); Route::get('Home', 'UserController@Home')->name('Home'); Route::group(['middleware' => ['web']], function () { Route::post('Home', 'UserController@postCreate'); });

Home.blade.php

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>home</title> <link rel="stylesheet" type="text/css" href="login.css" media="all" /> <style> .top-username { position: absolute; right: 120px; top: 18px; color: lightcoral; text-decoration: none; } .top-logout { position: absolute; right: 30px; top: 18px; color: lightcoral; text-decoration: none; } #form { background: #053352; background-image: -webkit-linear-gradient(top, #053352, Courier New); background-image: -moz-linear-gradient(top, #053352, Courier New); background-image: -ms-linear-gradient(top, #053352, Courier New); background-image: -o-linear-gradient(top, #053352, Courier New); background-image: linear-gradient(to bottom, #053352, Courier New); -webkit-border-radius: 6; -moz-border-radius: 6; border-radius: 6px; font-family: Courier New; color: #ffffff; font-size: 30px; padding: 20px 20px 20px 20px; text-decoration: none; text-align: center; } </style> </head> <body> <p><a class="top-username" href={{ route('Home')}}>username</a></p> <p><a class="top-logout" href={{ route('Login')}}>ログアウト</a></p> <br> <br> <br> <br> <br> <div id="form"> <form method="POST" action="/Home"> {{ csrf_field() }} <p>Welcome!</p> <p>Your Home Page!</p> </form> </div> </body> </html>

Signup Blade.php

@extends('layouts.Loginapp') @section('title') 新規登録 @endsection @section('form') <p>名前</p> <p class="name"><input type="text" name="name" maxlength="32" autocomplete="OFF" /></p> <p>メールアドレス</p> <p class="mailaddress"><input type="text" name="mailaddress" maxlength="32" autocomplete="OFF" /></p> <p>パスワード</p> <p class="password"><input type="password" name="password" maxlength="32" autocomplete="OFF" /></p> <p>パスワード(確認用)</p> <p class="Confirm password"><input type="password" name="password_confirmation" maxlength="32" autocomplete="OFF" /></p> <p class="submit"><input type="submit" value="登録" class="top-username" href={{ route('Home')}}></p> @endsection

Loginapp.blade.php

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>@yield('title')</title> <link rel="stylesheet" type="text/css" href="login.css" media="all" /> <style> body, p, form, input { margin: 0 } .top-login { position: absolute; right: 120px; top: 18px; color: lightcoral; text-decoration: none; } .top-signup { position: absolute; right: 30px; top: 18px; color: lightcoral; text-decoration: none; } #form { width: 350px; margin: 30px auto; padding: 20px; border: 1px solid #555; } form p { font-size: 14px; } .form-title { font-size: 20px; text-align: center; margin-bottom: 20px; border-bottom: solid 3px #fff; " } .name { margin-bottom: 20px; } .mailaddress { margin-bottom: 20px; } .password { margin-bottom: 20px; } .confirm password { margin-bottom: 20px; } input[type="text"], input[type="password"] { width: 350px; padding: 4px; font-size: 14px; margin: 0 auto; } .submit { text-align: center; } /* skin */ #form { background: #053352; background-image: -webkit-linear-gradient(top, #053352, Courier New); background-image: -moz-linear-gradient(top, #053352, Courier New); background-image: -ms-linear-gradient(top, #053352, Courier New); background-image: -o-linear-gradient(top, #053352, Courier New); background-image: linear-gradient(to bottom, #053352, Courier New); -webkit-border-radius: 6; -moz-border-radius: 6; border-radius: 6px; font-family: Courier New; color: #ffffff; font-size: 20px; padding: 20px 20px 20px 20px; text-decoration: none; } .submit input { background: #f78181; background-image: -webkit-linear-gradient(top, #f78181, #f78181); background-image: -moz-linear-gradient(top, #f78181, #f78181); background-image: -ms-linear-gradient(top, #f78181, #f78181); background-image: -o-linear-gradient(top, #f78181, #f78181); background-image: linear-gradient(to bottom, #f78181, #f78181); -webkit-border-radius: 8; -moz-border-radius: 8; border-radius: 8px; -webkit-box-shadow: 1px 1px 3px #666666; -moz-box-shadow: 1px 1px 3px #666666; box-shadow: 1px 1px 3px #666666; font-family: Courier New; color: #ffffff; font-size: 16px; padding: 10px 20px 10px 20px; text-decoration: none; } .submit input:hover { background: #f5c7c7; background-image: -webkit-linear-gradient(top, #f5c7c7, #f5c7c7); background-image: -moz-linear-gradient(top, #f5c7c7, #f5c7c7); background-image: -ms-linear-gradient(top, #f5c7c7, #f5c7c7); background-image: -o-linear-gradient(top, #f5c7c7, #f5c7c7); background-image: linear-gradient(to bottom, #f5c7c7, #f5c7c7); text-decoration: none; } #form { background: #053352; background-image: -webkit-linear-gradient(top, #053352, Courier New); background-image: -moz-linear-gradient(top, #053352, Courier New); background-image: -ms-linear-gradient(top, #053352, Courier New); background-image: -o-linear-gradient(top, #053352, Courier New); background-image: linear-gradient(to bottom, #053352, Courier New); -webkit-border-radius: 6; -moz-border-radius: 6; border-radius: 6px; font-family: Courier New; color: #ffffff; font-size: 20px; padding: 20px 20px 20px 20px; text-decoration: none; } </style> </head> <body> <p><a class="top-login" href={{ route('Login')}}>ログイン</a></p> <p><a class="top-signup" href={{ route('Signup')}}>新規登録</a></p> <br> <br> <br> <br> <br> <br> <div id="form"> <p class=form-title>@yield('title')</p> <form method="POST" action="/Home"> {{ csrf_field() }} @yield('form') </form> </div> </body> </html>

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

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

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

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

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

guest

回答2

0

自己解決

①親レイアウトで<form>タグを使用していた為Signup.blade.phpにおいては<form>タグを使用していませんでした。

②CreateUserRequest.phpにおいての名付けとview側での名付けが違った為修正しました。

親身になって回答して下さった方々ありがとうございました。

投稿2019/12/12 12:51

twinparadox

総合スコア42

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

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

0

起きてる現象とタイトルが乖離しているように見えなくもないですけど・・

エラーの通り、ルーティングではPOSTしか書かれていません。

Route::post('Home', 'UserController@Home')->name('Home');

「URLを直接入力」はリクエスト上は「GET」です。
リダイレクトもGETです。
ルーティングで受け入れるように書いていなければ当該エラーとなります。

投稿2019/12/08 05:24

m.ts10806

総合スコア80875

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

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

twinparadox

2019/12/08 05:30

ルーティングで 、、、Route::post('Home', 'UserController@Home')->name('Home');        Route::get('Home', 'UserController@Home')->name('Home');、、、 とすれば良いのでしょうか?
m.ts10806

2019/12/08 05:34

まずやってみては? 「GETの受け口がない」というのが今回の現象というのはお分かりかと思うので。
twinparadox

2019/12/08 19:14

返信ありがとうございます。ヒントを元にweb.phpとコントローラーを修正してみました。 新規登録ページからホームへ遷移はしないままですがエラーは消えました。URLを直接入力するとHOMEは表示されますが。。。
m.ts10806

2019/12/09 03:00

あまり回答急かされても。ちょっと。 結局どういう動作を想定されていましたっけ? バリデーション結果をHomeで表示したいとかになるんでしょうか。 「新規登録ページ」のビューやコントローラの処理に足りてない部分がありそうですけど、コードがないとなんとも言えませんね
twinparadox

2019/12/09 08:27

<バリデーション結果をHomeで表示したいとかになるんでしょうか。 「新規登録ページ」からバリデーションが通れば「Home」に遷移して、通らなければ遷移させない動きをさせたいです。 「新規登録ページ」のビューを追記させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問