【问题标题】:Set a variable in session in twig symfony 2在 twig symfony 2 中的会话中设置一个变量
【发布时间】:2017-08-25 21:46:17
【问题描述】:

是否存在一种方法来定义(不获取)树枝文件中的会话变量? 像这样:

{{ app.session.set('key', value) }}

【问题讨论】:

  • app.session.has ('key')
  • 为什么要从模板中修改应用程序状态?
  • 为完成这项工作的树枝创建自定义 extension

标签: symfony session twig session-variables


【解决方案1】:

在 Symfony 3 中你可以。

{{ app.session.set('test', 1) }}
{{ dump(app.session.get('test')) }}

【讨论】:

  • 你可以,但你不应该从模板修改会话:]
  • 你能解释一下原因吗?
  • @HoussemZitoun 因为业务逻辑不应该在模板中实现。模板应该只有要显示的数据和它。以后如果有人想改模板,就不用担心你模板里面的业务逻辑了
  • @Basit 是真的,但是假设您有一些模式仅在登录时显示。此模式在模板 (base.html.twig) 中呈现。您将在成功登录时设置会话变量以显示该模式(可以显示在任何 url 上)。如果您在这种情况下不使用 twig,您打算如何防止它再次显示在下一个链接上?您无法知道用户在第一次登录后会到达哪里(例如,如果他使用了邮件中的链接),也无法知道他会去哪里。因此,您使用 twig 来更改会话变量。你是对的,但有一些特殊情况...... ;)
【解决方案2】:

其实不,你不能在twig中设置会话变量,但是你可以很容易地在控制器中添加它:

public function someAction()
{
    // In a controller
    $session = $this->get('session');
    $session->set('filter', array(
      'accounts' => 'value',
    ));
}
// In Twig
{% set filter = app.session.get('filter') %}
{% set account-filter = filter['accounts'] %}
}

【讨论】:

  • 也许你不能默认这样做,但没有什么能阻止 OP 使用可以为他设置会话的自定义扩展来扩展 twig
  • 同意,但要仔细考虑为什么需要 twig,将某些东西设置到会话中,无论它是在服务器端编译的任何方式。
【解决方案3】:

在 Symfony 3 中,您可以设置或更新会话。

{{ app.session.set('test', 'Apple') }}
{{ app.session.get('test') }} // return Apple

{{ app.session.set('test', 'Apple') }}
{{ app.session.set('test', 'Strawberry') }}
{{ app.session.get('test') }} // return Strawberry

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多