3

アクションでは、ユーザーにフィードバックを設定します。

    $this->getUser()->setFlash('message', array(
    "type" => "notice",
    "content" => "Well done buddy, you did it."
    ));

    $this->redirect('home/index');

ビューでは、次のコードを使用します。

<?php if ($sf_user->hasFlash('message')): $message = $sf_user->getFlash('message') ?>
  <p class="<?php echo $message["type"] ?>" ><?php echo $message["content"]?></p>
<?php endif; ?>

ただし、メッセージは表示されません。

問題が「一度現れると消える」ということではなく、それが機能することを意味します。問題は、それが表示されないことです。一度もありません。

私はSymfony1.2を使用しています。これが、flashvarがユーザーオブジェクトにバインドされる理由です。

4

2 に答える 2

2

setFlash(配列ではなく)文字列を使用して2つで同じことを試してください。これでうまくいくと思います。Symfonyは、テンプレートで配列にアクセスするときに配列をエスケープしています。var_dump($sf_user->getFlash('message'));あなたが何を得るかを確認するようにしてください。

于 2011-08-08T14:42:07.507 に答える
1

Symfonyのフラッシュは、応答をページに1回だけ表示するためのものです。つまり、メッセージを「フラッシュ」します。ページが更新されると、そのフラッシュは表示されなくなります。

したがって、ユーザーがフォームを送信し、アクションが次のコードを実行したと仮定します

$this->getUser()->setFlash( 'message', 'Some message here' );

そして、ビューには次のものがあります

# Note: getFlash returns "" if flash is not set
echo $sf_user->getFlash('message');

次に、フォームを送信した後のこのユーザーからビューへの最初のリクエスト。したがって、そのフラッシュを設定すると、getFlashは「ここにメッセージがあります」を返し、フラッシュを削除/設定解除します。そのため、そのユーザーからの同じメッセージに対するリクエストは、空の文字列を返すようになりました。

これが意味するのは、フラッシュは1つのリクエストに対してのみ持続するということです。フォームと同じページにフォームの回答を表示するのに適した方法です。

于 2009-05-29T16:31:52.150 に答える