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

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

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

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

PHP

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

Laravel 5

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

Q&A

解決済

3回答

6952閲覧

Laravel でのvalidationでテンプレートを切り分けたい

hidepon

総合スコア206

Framework

Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2018/01/19 09:04

編集2018/01/20 05:37

Laravel 5.5 を勉強しています。
お問い合わせのフォームのようなものを試しに作成していますが、エラー処理の際に
エラーの有無で切り分けたいと思っています。
単に、テンプレートファイル内にコードを入れて見えづらくするのを回避したいためです。
構想を書くと
if エラーあり
//エラー内容と入力内容を表示
return view("input_error.blade");
else
//確認画面
return view("confirm.blade");

という形にしたいと思っています。
実際には

//入力 Route::get('/contact', 'Contact@index'); Route::post('/input_error', 'Contact@input_error'); Route::post('/confirm', 'Contact@confirm'); Route::get('/thanks', 'Contact@thanks');
public function index(){ return view('miyawaki.input'); } public function confirm(Request $request){ $validator = Validator::make($request->all(), [ 'name'=>'required|min:6|max:10', 'email'=>'required|email|confirmed', 'sex'=>'required', 'contents'=>'required|max:10', ]); //if fails if($validator->fails()) { return redirect('/input_error')->withErrors($validator)->withInput(); } $name = Request::input('name'); $email = Request::input('email'); $sex = Request::input('sex'); $contents = Request::input('contents'); return view('confirm',compact('name','sex','email','contents')); } public function input_error(){ return view('input_error'); } public function thanks(){ return view('thanks'); }

入力画面のformの遷移先は /confirm としています。そこでエラーの有無で振り分け、
エラーがあった時のinput_error.blade.php の遷移先も /confirmとしています。
このようなことができればテンプレートのHTMLもスッキリするのでありがたいです。

現時点のエラーは
「Call to undefined method Illuminate\Support\Facades\Request::all()」となっています。
いろいろ調べながらやっていますが、うまくいかず悩んでいます。
宜しくお願いいたします。

(追記)
input_errorにリダイレクトができたのですが、
今度は
「MethodNotAllowedHttpException」というエラーが発生しています。
この解決方法についていろいろと調べているのですが、
解決方法が見つかりません。
ご存知の方がいらっしゃいましたら、教えていただけるでしょうか?
宜しくお願いいたします。
※自己解決しました
route に
Route::get('/input_error', 'Contact@input_error');

(追記)
POST送信したデータならびにエラーメッセージが表示されません。
Undefined variable: name
return redirect('/input_error')->withErrors($validator)->withInput();
でエラーメッセージと入力データが送信されると思うのですが、違うのでしょうか?
宜しくお願いいたします。

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

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

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

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

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

guest

回答3

0

以下のエラーとしては、Requestクラスがファザード扱いになってしまっているので、

Call to undefined method Illuminate\Support\Facades\Request::all()

以下のuseをファイル先頭に追加してみて下さい。

#use Illuminate\Http\Response; use Illuminate\Http\Request; //修正

投稿2018/01/19 09:53

編集2018/01/20 06:28
aro10

総合スコア4106

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

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

hidepon

2018/01/19 10:00

ご返答有難うございます。 namespace App\Http\Controllers; use Illuminate\Http\Response; use Validator; use Request; という感じで変更しましたが、うまくいかないです。エラーメッセージは Call to undefined method Illuminate\Support\Facades\Request::all() という状態です。 どこがおかしいのか調べながら挑戦しています。 宜しくお願いいたします。
hidepon

2018/01/20 05:54

有難うございます。 namespace App\Http\Controllers; use Validator; use Illuminate\Http\Request; の組み合わせでうまくいきました。 現在は、エラーメッセージが表示されない、入力したメッセージが表示されない。というところで困っています。 宜しくお願いいたします。
hidepon

2018/01/20 05:58

一旦クローズします。有難うございました。
aro10

2018/01/20 06:17

いま確認すると、doubutsu.karadaさんの use Illuminate\Http\Request; が正しいですね。
hidepon

2018/01/20 06:23

え、そうなんですか?混乱してきました・・・orz 質問内容が多岐にわたるので、以下で質問をやり直しました。 https://teratail.com/questions/109856 よろしくお願いいたします。
aro10

2018/01/20 06:28 編集

上のコメントは自分の回答のuse文に関しての修正に対してのみです。
hidepon

2018/01/20 06:30

何度も、ご返答頂き有難うございます。 現状は namespace App\Http\Controllers; use Validator; use Illuminate\Http\Request; となっているので、ご指摘頂いている内容化と思います。本当に有難うございます
guest

0

POST送信したデータならびにエラーメッセージが表示されません。 Undefined variable: name return redirect('/input_error')->withErrors($validator)->withInput(); でエラーメッセージと入力データが送信されると思うのですが、違うのでしょうか? 宜しくお願いいたします。

redirectレスポンスで遷移した場合は、$nameなど変数ではなくセッションからnameなどのキーを取得する必要があります。

投稿2018/01/20 05:57

doubutsu.karada

総合スコア26

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

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

hidepon

2018/01/20 06:00

ご回答有難うございます。そ、そうなんですね・・・・。勉強始めたばかりで知らなかったです。有難うございます。
doubutsu.karada

2018/01/20 06:03 編集

viewで session('name') のようににヘルパ関数を使えば取得できるかと思います。
hidepon

2018/01/20 06:06

一度回答が落ち着いたので、もう一度質問をし直そうとしてるのですが、このようなテンプレートを切り分けたい場合でリダイレクトをせずに処理をすることが可能なのかどうか、知りたいです。それが可能であれば、セッションを使わずに処理ができるかと・・・
doubutsu.karada

2018/01/20 06:36 編集

ビューレスポンスでpostされた入力値などを持たせたいってことですか? if ($validator->fails()) { /** @var array $errorMessages */ $errorMessages = $validator->getMessageBag()->all(); return view('input_error', $request->input())->with('errorMessages', $errorMessages); } こんな記述をしたらできないでしょうか?自分もそこまで詳しいわけではないので、回答になってなかったらすみません・・・。
hidepon

2018/01/20 06:36

ご回答有難うございます。実際にやりたいことはこういうことなんです。ちょっとやってみます。リダイレクトを使わずに、入力値とエラーメッセージを一度に渡したいんです。 有難うございます。
guest

0

ベストアンサー

質問文のソースコードですが、namespace宣言の行から乗せてもらったほうが問題が見つけやすくなります。


use Request;で、本来利用したいIlluminate\Http\Requestではなく、Illuminate\Support\Facades\Requestがインポートされてしまっているようです。

次の修正で治らないでしょうか?

php

1// 現在 2use Illuminate\Http\Response; 3use Validator; 4use Request;

php

1use Validator; 2use Illuminate\Http\Request;

投稿2018/01/20 01:10

rkojima

総合スコア421

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

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

hidepon

2018/01/20 03:38

ご返答有難うございます。 今度はエラーメッセージが変化しています。 MethodNotAllowedHttpException エラーがあった時に、リダイレクトして、input_errorに遷移するのですが、 ルートに記載しているにも関わらず、機能していません。 調査してみますが、ご存知であれば教えて頂ければ幸いでございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問