2018/10/12
CRUDアプリの作成時にstore()で処理を行ったあとにindexにリダイレクト+Flashメッセージを表示する処理を書きました。
今回はこの処理についてフォーカスを当てた記事をエントリーします。
やりたいこと
1)指定のURLを打ち込む
2)リダイレクト+フラッシュメッセージ表示
[デモ] http://laraweb.sakura.ne.jp/user/redirecttest/from
手順
《事前準備》リダイレクト前のページを作成
【1】コントローラの作成
【2】ビューの作成(リダイレクトFrom側)
【3】ルーティングの設定
《STEP1》リダイレクトの設定
【1】コントローラの編集
【2】ビューの作成 (リダイレクトTo側)
【3】ルーティングの設定
《STEP2》フラッシュメッセージの表示
【1】コントローラの編集
【2】ビューファイルの編集
《事前準備》リダイレクト前のページを作成
まずは何もしていないplainのページを作成します。
リダイレクト元となるページです。
【1】コントローラの作成
1 | php artisan make :controller RedirectTestController |
Laravel5.2ではオプションの指定なしでPlainのコントローラができます
1 2 3 4 5 6 7 8 | :(※省略) /** * リダイレクト元 */ public function from() { return view( 'redirecttest.from' ); } :(※省略) |
【2】ビューの作成(リダイレクトFrom側)
Bladeのマスターファイル(共通レイアウト)を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <!DOCTYPE html> <html lang= "ja" > <head> <meta charset= "utf-8" > <meta http-equiv= "X-UA-Compatible" content= "IE=edge" > <meta name= "viewport" content= "width=device-width, initial-scale=1" > <title>@ yield ( 'title' )</title> <link href= "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel= "stylesheet" > <!-- オプションのテーマ --> <style> :(※省略) </style> </head> <body> <nav class = "navbar navbar-inverse navbar-fixed-top" > <div class = "container" > <div class = "navbar-header" > <a class = "navbar-brand" href= "/redirecttest/from" >リダイレクト/フラッシュメッセージテスト</a> </div> <div id= "navbar" class = "collapse navbar-collapse" > </div><!--/.nav-collapse --> </div> </nav> <div class = "container" style= "margin-top: 30px;" > @ yield ( 'content' ) </div><!-- /container --> </body> </html> |
Bladeのブランチファイルを作成します。
1 2 3 4 5 6 7 | @ extends ( 'layouts.master_redirecttest' ) @section( 'title' , 'リダイレクト/フラッシュメッセージテスト' ) @section( 'content' ) リダイレクト元のページ @endsection |
【3】ルーティングの設定
1 | Route::get( 'redirecttest/from' , 'RedirectTestController@from' ); |
http://{ホスト名}/redirecttest/from
にアクセスして画面が表示されるか確認します。
※ローカル環境のURLに関しては以下を参照してください。
《STEP1》リダイレクトの設定
リダイレクト先のページを作成してリダイレクトの処理をコントローラに記述します。
【1】コントローラの編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | :(※省略) /** * リダイレクト元 */ public function from() { return redirect( 'redirecttest/to' ); } /** * リダイレクト先 */ public function to() { return view( 'redirecttest.to' ); } :(※省略) |
/redirecttest/to にアクセスしても
きちんとビュー表示させるようにto()を作成します。
【2】ビューの作成 (リダイレクトTo側)
1 2 3 4 5 6 7 | @ extends ( 'layouts.master_redirecttest' ) @section( 'title' , 'ダイレクト/フラッシュメッセージテスト' ) @section( 'content' ) リダイレクト先のページ @endsection |
【3】ルーティングの設定
リダイレクト元とリダイレクト先の両方にルーティングの設定をします。
1 2 | Route::get( 'redirecttest/from' , 'RedirectTestController@from' ); Route::get( 'redirecttest/to' , 'RedirectTestController@to' ); |
http://{ホスト名}/redirecttest/from
にアクセスして /redirecttest/to にリダイレクトされるか確認します。
《STEP2》フラッシュメッセージの表示
【1】コントローラの編集
1 2 3 4 5 6 7 8 | :(※省略) /** * リダイレクト元 */ public function from() { return redirect( 'redirecttest/to' )->with( 'status' , 'リダイレクト処理成功。Flashメッセージ表示' ); } :(※省略) |
redirectヘルパーにwithメソッドをつけます。
メッソッドをチェーンするだけでセッションへフラッシュデータを保存できます。
【2】ビューファイルの編集
1 2 3 4 5 6 7 8 9 10 11 12 13 | @ extends ( 'layouts.master_redirecttest' ) @section( 'title' , 'リダイレクト/フラッシュメッセージテスト' ) @section( 'content' ) @ if (session( 'status' )) <div class = "alert alert-success" onclick= "this.classList.add('hidden')" > {{ session( 'status' ) }} </div> @ endif リダイレクト先のページ @endsection |
もう一度 http://{ホスト名}/redirecttest/from アクセスします。
リダイレクトされ、フラッシュメッセージが表示されるか確認します。
ためしにリダイレクト先である /redirecttest/to にアクセスしても
フラッシュメッセージは表示されません。
to()はメソッドチェーンでフラッシュメッセージをつけていないからです。
以上です。

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。