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

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

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

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

Q&A

解決済

1回答

1571閲覧

Laravel5.6:バリデーションuniqueを使った時のリダイレクト

sunaczip

総合スコア13

Laravel 5

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

0グッド

0クリップ

投稿2018/05/10 08:47

編集2018/05/11 07:07

DB接続が失敗したときにDBエラーのページにリダイレクトさせたい

"mail" => ['unique:users,mail'],
というバリデーションロジックではDB接続が発生するが接続エラーになった場合にエラーページにリダイレクトさせたい

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

try catchを入れようにもどこに書けばよいかわからない
また、ハンドラーで処理させようとしてもうまくエラーコードが取得できない

該当のソースコード

public function rules() { return [ 'name' => ['required', 'string','max:30'], "mail" => ['required','unique:users,mail','max:60','email'], 'gender' => ['required','integer','between:1,2'], ]; }
public function validateMailcheck($attribute, $value, $parameters){ try{ $count= Entry::where('mail',$value)->count(); //もしDBにそのメールアドレスが存在した場合にはelseに入る if ($count == 0){ return true; }else{ return false; } }catch (\Exception $e){ exit(redirect('entry/input')->withErrors(['systemError' => 'システムエラーが発生しました。お手数ですが登録を最初からやり直してください'])); } }

試したこと

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

m.ts10806

2018/05/10 12:07

コードの概要説明ではなくコード自身をご提示ください。
sunaczip

2018/05/11 01:17

すいません見せるほどのコードじゃないかと思って載せてませんでした、修正しました
m.ts10806

2018/05/11 01:18

コードを見ないことには何も判断ができないからです。設定だけではなくrules呼び出しているところとかも欲しいですね。あと、プログラムコード(およびエラーメッセージ)は```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)正しく反映されているかどうかは質問編集画面のプレビューを見ながら編集していってください。
guest

回答1

0

ベストアンサー

DB接続エラーはHTTP例外(500エラーなど)にすべきと思います。
なので、カスタムHTTPエラーページを用意すれば良いかと思います。

(追記)
おそらく、現在はLaravelをDEBUGモード(.envファイルでAPP_DEBUG=trueなど)で動かしているので、例外の詳細が表示されているのかと思います。
DEBUGモードを解除すると、Whoops, looks like something went wrong.という500エラーのページが表示されます。それで満足できない場合は、前述のカスタムHTTPエラーページを用意すれば良いと思います。

投稿2018/05/11 01:49

編集2018/05/11 02:40
Lulucom

総合スコア1899

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

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

sunaczip

2018/05/11 02:46

デバッグモードを解除した際にはQueryExceptionはすべて500エラーで処理されますか?また、エラーコードは500で拾ってこれますか?
Lulucom

2018/05/11 04:56

はい、仰る通りです。App\Exceptions\Handlerクラスの親クラスIlluminate\Foundation\Exceptions\HandlerのprepareResponseメソッドのソースを参照ください。
sunaczip

2018/05/11 06:44

重ね重ね質問すいません。ハンドラーのほうは想定通りの動きをしたのですがメールバリデーションでどうにかしてトライキャッチが動かせないかと思い、カスタムバリデーションにてDB接続を行ってそれをトライキャッチするという方法を試してみました。動き自体は想定通りなのですがバリデーションにおけるtrue/falseの判定がキャッチに入るとfalseになってしまいメールフォームにエラーがでてしまいます。こちらについてなにか良い解決方法はありませんか?よろしくお願いします
Lulucom

2018/05/11 07:01 編集

具体的にどういうことをされているのかイメージできないところがありますので、もし可能でしたら質問の方に追記をお願いできますでしょうか。その際、質問修正依頼でmts10806さんのご指摘にあるようにコード整形もお願いします。
sunaczip

2018/05/11 07:08

このような感じのカスタムバリデーションを定義してみました。今の処理だとバリデーションが返らないのでerrorsに設定している文言が入らない処理になってしまってます
Lulucom

2018/05/11 08:13

DBエラーのページにリダイレクトしたいのでしょうか。それとも元のフォームのページにリダイレクトしたいのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問