シムノート

PHPフレームワークSymfonyの学習帳

ユーザ用ツール

サイト用ツール


サイドバー

メニュー



このエントリーをはてなブックマークに追加

blog:2016-01-07:超入門_symfony3_flash_message

超入門 Symfony3 : (11) Flash Message

運勢のメンテナンス機能が一通り揃った所で、Flash Messagesを使って、もう少しユーザーフレンドリーな画面にしてみたいと思います。

Flash Messageとは一時的なメッセージをsessionに保存する機能です。sessionからメッセージを取り出すと、自動的にsessionから削除されます。ユーザーへのお知らせに使用されます。

Controllerの修正

UnseiController.phpを修正します。

<?php
...
class UnseiController extends Controller
{
    ...
    public function newAction(Request $request)
    {
        ...
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            ...
            $em->flush();
            
            $this->addFlash('notice', "{$unsei->getName()}を追加しました");
            
            return $this->redirectToRoute('unsei_index');
        }
        ...
    }
    ...    
    public function editAction(Request $request, $id)
    {
        ...
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            ...
                        
            $this->addFlash('notice', "{$unsei->getName()}に更新しました");
            
            return $this->redirectToRoute('unsei_index');
        }
        ...
    }
    ...    
    public function deleteAction(Request $request, $id)
    {
        ...
        if ($this->isCsrfTokenValid('unsei', $request->get('_token'))) {
            ...
            
            $this->addFlash('notice', "{$unsei->getName()}を削除しました");
        }

        return $this->redirectToRoute('unsei_index');
    }
    ...
}

addFlash()を使って、sessionにメッセージを追加します。
第1引数は任意のキー文字列です。sessionからメッセージを取得する時に使います。
第2引数にメッセージを渡します。

Viewの修正

次にViewを修正します。

<!DOCTYPE html>
<html>
    ....
    <body>
        {% include '_menu.html.twig' %}
    	{% include '_flash_message.html.twig' %}

        {% block body %}{% endblock %}
        {% block javascripts %}{% endblock %}
    </body>
</html>

bodyタグincludeを使って、_flash_message.html.twigを挿入します。

{% for flash_message in app.session.flashbag.get('notice') %}
    <div class="flash-notice">
        {{ flash_message }}
    </div>
{% endfor %}

Flash Messageの表示部分を独立したファイルにしました。
app.session.flashbag.get('キー文字列')で、キー文字列を使って登録された全てのメッセージを取得できます。

最後にCSSファイル修正します。
Flash Messageの背景に色付けます。

...

.flash-notice {
	background-color: #E0FFFF;
	margin-bottom: 10px;
}

動作確認

http://localhost:8000/unsei にアクセスして、運勢の追加や編集、削除を試してみてください。Flash Messageが表示されるはずです。


Comments



142 +0 = ?
blog/2016-01-07/超入門_symfony3_flash_message.txt · 最終更新: 2016/01/07 18:22 by tsubo