スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    Symfony2.3でsessionのflashデータの操作方法が変わった件

    0
      先週後半から、最初のLTS版Symfony2.3を早速使っているわけですが、2.2以前に比べて結構たくさん仕様変更があり、慣れたつもりの私でも「あれ?」という事態が発生しています。
      日本語ドキュメントが全部追いつくまでかなり時間がかかると思われる(スミマセンスミマセン)ので、私がハマった部分だけ個別に書いておくことにしました。

      早速ですが、セッションのflashメッセージの件。
      セッションのflashメッセージは、一回限り(セットしたリクエストの次のリクエストまでの間だけ)保存されるセッションデータです。
      主な用途は、postされたデータをサーバー側で処理した際の完了メッセージ等(たぶん)

      (追記:ソースコードを追った結果この変更は2.3でなく2.1からの仕様変更で、2.2までは後方互換で使えていただけということがわかりました。)

      2.2までの書き方

      コントローラでflashメッセージをセットする:
      $this->get('session')->setFlash('notice', '更新しました。');

      twigテンプレートでflashメッセージが存在するかどうか確かめる:
      {% if app.session.hasFlash('data') %}
          {# dataというflashがある場合の処理 #}
      {% else %}
           {# dataというflashがない場合の処理 #}
      {% endif %}

      twigテンプレートでflashメッセージを表示:
      {# hogeというflashを表示 #}
      {{ app.session.flash('hoge') }}

      2.3からの書き方

      コントローラでflashメッセージをセットする:
      $this->get('session')->getFlashBag()->set('notice', '更新しました。');

      twigテンプレートでflashメッセージが存在するかどうか確かめる:
      {% if app.session.flashBag.has('data') %}
           {# dataというflashがある場合の処理 #}
      {% else %}
           {# dataというflashがない場合の処理 #}
      {% endif %}

      twigテンプレートでflashメッセージを表示:
      {# hogeというflashを表示 #}
      {% for flashMessage in app.session.flashBag.get('hoge') %}
           {{ flashMessage }}
      {% endfor %}
      $this->get('session')->getFlashBag()->set('notice', '更新しました。');のように文字列を一つだけセットしてあっても、app.session.flashBag.get('notice')の中身は必ず配列になります。
      一度$this->get('session')->getFlashBag()->set('notice', '更新しました。');としてから$this->get('session')->getFlashBag()->add('notice', 'もう一つ更新しました。');とすると、2つのメッセージを保存できます。
      ただし、$this->get('session')->getFlashBag()->set('notice', '更新しました。');としてから$this->get('session')->getFlashBag()->set('notice', '再度更新しました。');とすると、後でセットしたメッセージのみが保存されます。(addだと追加されるがsetだと上書き)

      #わかりづらくなって、正直言って改悪じゃないの?という気がしないでもないのですが(-_-;)


      スポンサーサイト

      0

        • 2014.12.23 Tuesday
        • -
        • 17:04
        • -
        • -
        • -
        • -
        • by スポンサードリンク

        コメント
        コメントする








           

        PR

        calendar

        S M T W T F S
             12
        3456789
        10111213141516
        17181920212223
        24252627282930
        << September 2017 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
          プログラマー
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          ななうぇぶ
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • WindowsのPCで開発するphperがxhprofを使う方法
          ななうぇぶ
        • WindowsのPCで開発するphperがxhprofを使う方法
          川本
        • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
          よし
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          77web
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          ktz

        recent trackback

        • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
          常山日記
        • django対symfony 日本語メール送信(その1 symfony編)
          CPA-LABテクニカル
        • CodeIgniterでユーザー認証
          されどLAMPな日々
        • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
          常山日記
        • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
          サーバー用語集
        • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
          常山日記
        • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
          mitszoの日記
        • python多次元リストをsort(並べ替え)する方法?
          mitszoの日記
        • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
          Humming Via Kitchen
        • 日本語テキストをtruncate@django(Python全般にも??)
          常山日記

        recommend

        links

        profile

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM