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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

9038閲覧

Laravel、Class内のprivate関数から呼び出し元のリターンをしたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

Laravel 5

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

0グッド

1クリップ

投稿2016/05/15 06:06

編集2016/05/15 06:06

Laravel、Class内のprivate関数から呼び出し元のリターンをしたい

Laravelで、確認画面付きのフォームコントローラを作成しました。
こちらで、確認画面用の各入力値をSessionで保持しているのですが、そもそもSessionがない状態で確認画面へGETリクエストされた際に、入力画面へリダイレクトさせたいです。
(URLの直入力など。)

現状、各メソッドで①のような評価をし、trueだった場合リダイレクトしています。
これのリダイレクトを、スコープで呼び出しているprivateメソッドから行いたいです。
スコープで呼び出しているメソッドから呼び出し元のリターンを指定することは可能なのでしょうか?

php

1class EntryController extends Controller 2{ 3 private function session_check(){ 4 if(is_null(Session::get('entry'))){ 5 return true; 6 } 7 } 8 9 public function confirm() 10 { 11 if($this->session_check()){ //① 12 return redirect('entry/form'); 13 } 14 $input = Session::get('entry'); 15 return view('entry.confirm',compact('input')); 16 } 17 18 public function complete() 19 { 20 if($this->session_check()){//① 21 return redirect('entry/form'); 22 } 23 $input = Session::get('entry'); 24 return view('entry.complete',compact('input')); 25 } 26 27}

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

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

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

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

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

guest

回答1

0

ベストアンサー

Laravelでは今回のケースのようにHTTPリクエストをフィルタリングするのに便利なMiddlewareという機能があります。
詳細はドキュメントを参照して頂きたいのですが、Middleware使うことでリクエストを予め加工したり、ログイン状態をチェックしたりといったことができます。
これによりController側で受け取るリクエストはエラーチェックの必要のない、処理可能な正しいリクエストであることが保証されます。

Laravel5ではデフォルトでVerifyCsrfTokenミドルウェアがMiddlewareフォルダ下にありますので、こちらを適用させてフォーム側に{{ csrf_field() }}をセットするだけでもセッションのチェックは可能かと思われます。
このミドルウェアはTokenMismatchExceptionを投げますので、App\Exceptions\Handlerでキャッチしてあげればそちらでリダイレクト処理が可能です。

もちろんカスタムミドルウェアを作成してもよろしいかと思います。

求めている回答ではなかったかもしれませんが、MiddlewareはControllerを肥大させないための大事な機能です。
コントローラ内で条件分岐が1つでもあればMiddlewareに分離できるチャンスかもしれません。

投稿2016/05/15 14:08

romiogaku

総合スコア546

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問