2

PHP の使用や JS でのアラートのように、TWIG ファイルで $_GET パラメータを使用するにはどうすればよいですか。

URI-> ?comment=追加...

TWIGでは、

    if($_GET['comment'] == "added"){
     ...echo '<script>alert("in TWIG file!");</script>';
    }
4

3 に答える 3

1

本当に達成しようとしていることに応じて、確認メッセージを表示する "Symfony の方法" は "Flash Messages" を使用することです:

あなたのController.php:

public function updateAction()
{
    $form = $this->createForm(...);

    $form->handleRequest($this->getRequest());

    if ($form->isValid()) {
        // do some sort of processing

        $this->get('session')->getFlashBag()->add(
            'notice',
            'Your changes were saved!'
        );

        return $this->redirect($this->generateUrl(...));
    }

    return $this->render(...);
}

あなたの TwigTemplate.twig:

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

このようにして、複数の利点があります。

  1. アクション後にリダイレクトすると、フォームのリロードが防止されます。
  2. 外部からメッセージをトリガーすることはできません。
  3. Flash メッセージは 1 回だけ取得されます。

このトピックに関する公式ドキュメントを参照してください。

于 2013-07-22T09:53:25.890 に答える
0

「正しい」解決策は、クエリ文字列をオンにするのではなく、コントローラーを使用して Twig に機能を提供することです。これにより、より堅牢になり、より優れたセキュリティが提供されます。

コントローラ:

function someAction()
{
    $params = array('added' => false);
    if( /* form logic post */ )
    {
          //some logic to define 'added'
          $params['added'] = true;
    }

    $this->render('template_name', $params);
}

見る:

{% if added %}
    <script>alert('added');</script>
{% endif %}

理由は、これがより安全であり (URL を参照するだけではアラートをトリガーできない)、コントローラー内のすべてのビジネス ロジックを維持し、エラーを処理することもできるからです (たとえば、foo を参照する場合)。 php?comment=added で、コメントが追加されていないというエラーが発生した場合でも、ユーザーはアラートを受け取ります。

于 2013-07-22T04:23:15.200 に答える