2

我如何在 TWIG 文件中使用 $_GET 参数,例如使用 PHP 和使用 JS 发出警报。

URI-> ?comment=添加...

在树枝中,

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

3 回答 3

12

希望对你有帮助

{% if app.request.get('comment') == "added" %}
    <script>alert("in TWIG file!");</script>
{% endif %}
于 2013-07-22T07:49:26.607 回答
1

根据您真正想要实现的目标,显示确认消息的“Symfony 方式”将是使用“Flash Messages”:

你的控制器.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 消息只获取一次。

请参阅有关此主题的官方文档。

于 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=add 并且有一个错误,您的评论没有添加,用户仍然会收到警报。

于 2013-07-22T04:23:15.200 回答