如何在twig文件中获取params

时间:2013-07-22 02:07:36

标签: symfony parameters get twig

如何在TWIG文件中使用$ _GET params,如使用PHP和使用JS进行警报。

URI-> ?注释=加入...

在TWIG,

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

3 个答案:

答案 0 :(得分:11)

希望它会帮助你

{% if app.request.get('comment') == "added" %}
    <script>alert("in TWIG file!");</script>
{% endif %}

答案 1 :(得分:1)

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

YourController.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消息仅提取一次。
  4. 请参阅此主题的official documentation

答案 2 :(得分: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 %}

原因是这更安全(我无法通过浏览网址触发警报),它维护控制器中的所有业务逻辑,并且您还能够处理任何错误 - 例如如果您浏览到foo.php?comment = added并且出现错误而未添加评论,则用户仍会收到提醒。