【问题标题】:Where to put code which should run and set up some variables for every route?在哪里放置应该运行的代码并为每条路线设置一些变量?
【发布时间】:2012-10-30 14:31:36
【问题描述】:

我想在每次调用 URL 或路由时运行一些会话处理代码,但我显然希望能够在任何我希望的控制器中访问此会话变量。假设这应该放在我的捆绑包的前端控制器中,我错了吗?

我尝试将一些变量放在 ...Bundle.php 文件中,该文件位于我的捆绑包的 src 的根目录中、DefaultController.php 中(我创建了一个构造函数)等等。没有任何效果。

如何运行一些代码并为每条路线设置一些变量?


注意事项:

  • 我是 MVC 和 Symfony2 的新手。
  • “每条路线” == 我所说的捆绑包中的每个控制器

【问题讨论】:

    标签: php symfony controller symfony-2.1


    【解决方案1】:

    我建议将其实现为内核事件侦听器,并将会话注入其中。

    详细说明:

    如果您查看http://symfony.com/doc/current/cookbook/service_container/event_listener.html,您将了解如何注册事件侦听器。

    基本上,您使用此方法创建一个内核事件侦听器,该侦听器在每次系统启动时运行,并注入会话(yml 中的@session)以执行您需要的操作。

    【讨论】:

    • 对于访问者,我必须在config.yml 的服务定义中的class 行之后添加行arguments: [@session](请参阅答案中的链接),并为我的侦听器创建一个构造函数它将Session 对象作为参数但什么也不做。然后在我的onKernelRequest 方法中,我设置了我的会话并可以在那里操作它。然后可以在控制器中引用它;例如如果我在onKernelRequest 中设置会话变量,例如$session->set('a', 'b');,那么它可以像$this->get('session')->get('a') 一样访问
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多