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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Laravel 5

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

Q&A

解決済

1回答

11722閲覧

Laravel5 フラッシュメッセージが2ページに渡って表示し続ける

YATORI

総合スコア13

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2016/02/12 10:43

###前提・実現したいこと
フラッシュメッセージを該当ページのみ表示したい。

###ソースコード
全ページで下記のようにフラッシュメッセージを表示できるレイアウトを使用しております。

html

1{{-- layout.blade.php --}} 2 3 4<!DOCTYPE HTML> 5<html lang="ja"> 6<head> 7 <meta charset="UTF-8"> 8 <title>Test Title</title> 9 10 {{-- CSS --}} 11 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> 12 <link rel="stylesheet" href="{{ asset('/css/bootstrap-datepicker3.min.css') }}"> 13 14</head> 15<body> 16 @include('navbar') 17 18 <div class="container"> 19 @if (Session::has('flash_message')) 20 <div class="alert alert-success">{{ Session::get('flash_message') }}</div> 21 @endif 22 23 @yield('content') 24 </div> 25 26 {{-- 中略~ --}} 27</body> 28</html> 29

メッセージ出力の場所

PHP

1 2class TestController extends Controller 3{ 4 // ~中略~ 5 public function store(Request $request) 6 { 7 // ~中略~ 8 9 try { 10 DB::beginTransaction(); 11 // DB登録実施 12 DB::table('test_tables')->insert($test_tables); 13 // コミット 14 DB::commit(); 15 // 完了メッセージをフラッシュ 16 \Session::flash('flash_message', '試合結果を '.$target_cnt.'件 登録しました。'); 17 18 } catch ( \Exception $e) { 19 // ~中略~ 20 } 21 22 // ~中略~ 23 return view('test.teststore'); 24 } 25} 26

念のためセッション内容も記載しておきます。(内容はデフォルトのまま)

PHP

1// config\session.php 2 3<?php 4 5return [ 6 'driver' => env('SESSION_DRIVER', 'file'), 7 'lifetime' => 120, 8 'expire_on_close' => false, 9 'encrypt' => false, 10 'files' => storage_path('framework/sessions'), 11 'connection' => null, 12 'lottery' => [2, 100], 13 'cookie' => 'laravel_session', 14 'path' => '/', 15 'domain' => null, 16 'secure' => false, 17];

###発生している問題・エラーメッセージ
メッセージが表示されるものの、
表示後に別のページに遷移してもそのメッセージが表示されたままになる。
※そのあと再度別のページに遷移するとメッセージが消えます。
1)処理後の該当ページ → メッセージ表示
2)別ページ遷移 → メッセージ表示
3)さらに別ページ遷移 → メッセージ非表示

何かほかに提示すべき内容がございましたらご指摘願います。

どなたか、お力添え頂ければ幸いです

###補足情報(言語/FW/ツール等のバージョンなど)
・XAMPP
・Laravel 5.2.7
・PHP 7.0.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

フラッシュメッセージというのは遷移先で出す物ですのでredirectをした先で表示するので、そのデータを入れたメソッド内で表示させることは想定されていません。

storeメソッドということもありPOSTで送信している場合はreturn back();やredirectメソッド等で前のページに戻したりすると前のページでメッセージを1回だけ出力するようになり、うまくいくと思います。

移動せずに出すのであればそのままviewに引数を渡すと良いでしょう。(私はredirectを推奨したいですが)

例えば、、、

$flash_messages = []; try{ // 省略 $flash_messages[] = '試合結果を '.$target_cnt.'件 登録しました。'; } // 省略 return view('test.teststore',['flash_messages' => $flash_messages]);
@if (count($flash_messages) > 0) <div class="alert alert-success"> @foreach($flash_messages as $message) {{ $message }}<br> @endforeach </div> @endif

みたいな感じですね。

投稿2016/02/12 12:12

編集2016/02/12 12:24
fagai

総合スコア2158

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

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

YATORI

2016/02/12 17:09 編集

早速回答いただきましてありがとうございます。 なるほど・・・`return view`を使うという、初めから考えが間違えていましたね。 `redirect`が存在するのに、何気なく`return view`を使っていました・・・ わざわざ`return view`での使用例を書いていただき、お手数お掛けしました。 特にこのまま`return view`を利用する理由がないため、 ご指摘の通り`redirect`を利用することとします。 コントローラーの最後で return redirect()     ->back()     ->with('flash_message', '試合結果を '.$target_cnt.'件 登録しました。'); としました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問