Symfony2:实体中的访问请求对象

时间:2014-05-26 14:22:23

标签: symfony request locale

我想知道如何访问实体(Symfony2)中的Request对象来修改用户区域设置。

如果有人找到解决我问题的方法,请告诉我。

2 个答案:

答案 0 :(得分:2)

这是不可能的。这是设计的:实体只是一个简单的对象,应该对请求一无所知 - 它是控制器解释请求的责任,并基于此操纵实体。

类似的东西:

//inside your controller:
public function fooBarAction(Request $request)
{
    $entity = // get entity
    $entity->setLocale($request->getSession()->getLocale());
}

以上只是示例代码,如果您只是复制并粘贴它就不会起作用。它只是为了展示一般的想法。实体应该只是一个非常简单的对象,唯一的责任是保存一些数据。它不应该知道数据的来源 - 保持灵活性(如果你想根据其他东西设置语言环境,你只需要更改控制器,而不是所有实体)。

答案 1 :(得分:1)

有可能,但是......

除了从不应该做的是将Request对象注入实体(实际上将您的实体转变为服务,请参阅here)。此外,即使更糟的想法(但人们仍然这样做),您可以注入整个容器并从那里获取请求。您不应该这样做的原因是您永远不应该有任何代码来处理您的实体中的业务规则或任何系统代码。

您可以使用_locale自定义变量(也可以从Request访问)直接在路由中切换您的语言环境。或者您可以创建kernel listener,它将为您执行所需的功能。这样就可以保持代码的可测试性和解耦性。