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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

3774閲覧

laravelのvalidationの判定を分けたい。

harusyoui

総合スコア55

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2018/12/05 02:46

前提・実現したいこと

今集計表をつくってまして、それには図の通り
「日付指定検索」と「範囲指定検索」がありまして、
それぞれのデータ名はdateとstart,endです。

それぞれコントローラーの関数で判定してます。

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

図の通り日付が空欄のまま範囲は指定されてる状態で
日付指定の検索をしてしまうとno messageのエラーが出てしまいます。
その逆のパターンも起こります。

この場合はどうvalidationを書けばうまく動くでしょうか。

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException No message

該当のソースコード

laravel

1 // 日付指定検索の関数 2 public function date_data(Request $request) 3 { 4 $this->validate($request, [ 5 'date' => 'required', 6 ]); 7 ~略~ 8 } 9 10 // 範囲指定検索の関数 11 public function between_data(Request $request) 12 { 13 $this->validate($request, [ 14 'start' => 'bail|required', 15 'end' => 'required', 16 ]); 17   ~略~ 18 }

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

MethodNotAllowedHttpExceptionは、バリデーションエラーがきっかけで発生しているものですが、「バリデーションの設定内容」のせいで発生しているわけではありません。。。

集計ボタンが設置してある画面のルート設定が、postのみになっていませんか?

バリデーションエラーがあった時、送信元URLに自動リダイレクトされますが、これはGETでのアクセスになります。
なので、バリデーションを使うなら、集計ボタンが設置してある画面のルートにはgetの設定も必要になるのです。

コントローラー側も、getでアクセスされることを考慮して、
・バリデーションチェック
・集計処理を
この2点は、post時のみに行われるよう調整した方が良さそうです。


以下は「余計なお世話」なお話です。
「今後何かの参考になれば」程度に、、、なんなら、読み飛ばしても大丈夫です。

全く同じ見た目のボタンが二つ並んでいれば、誰でも押し間違える可能性が高いので、
ユーザーに優しくないな、と思いました。

私が、もしこういう画面を作るならば。

入力欄もボタンも、紛らわしいものは設置せず、最少数で賄います。

html

1<h2>集計</h2> 2<form action="xxxxxx"> 3日付<input type="text" name="start"><input type="text" name="end"> 4<button type="submit">集計</button> 5</form>

コントローラも1つにまとめてしまいます。

バリデーションチェックは、必須はstartのみに。

ついでに日付の正当性と、日付範囲で後ろになるendには「startより後ろの日」を付けると、後々の集計処理が楽かなと思って追加しています。

「日付指定」と「範囲指定」どちらの集計を行うかは、endの入力有無で、自動的に判断する方式に。。。

php

1 public function xxxxxx(Request $request) 2 { 3 //postなら、入力値チェックと集計の処理 4 if ($request->isMethod('post')) { 5 $this->validate($request, [ 6 'start' => 'bail|required|date', 7 'end' => 'bail|nullable|date|after:start' 8 ]); 9 10 $start = $request->get('start'); 11 $end = $request->get('end'); 12 13 if($end){ 14 //endがあるなら、範囲指定集計処理を 15 16 }else{ 17 //なければ、日付指定の集計処理を 18 19 } 20 }else{ 21 //getで何か処理したければここに 22 } 23 24 }

※コードはここで直接書いたものなので、動作検証はしておりません。ご了承を・・

投稿2018/12/05 06:17

mix-peach

総合スコア1910

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問