symfony2中的自动定位

symfony2中的自动定位,symfony,Symfony,请查看以下代码: public function __construct($error_code) { $translator = new Translator('en'); $translator->addLoader('yaml', new YamlFileLoader()); $translator->addResource('yaml', dirname(__DIR__).'/Resources/translations/messages.en.yml

请查看以下代码:

public function __construct($error_code)
{
    $translator = new Translator('en');
    $translator->addLoader('yaml', new YamlFileLoader());
    $translator->addResource('yaml', dirname(__DIR__).'/Resources/translations/messages.en.yml', 'en');
    $this->setErrorCode($translator->trans($error_code));
}
我是新来的。我创建了一个类MyProjectExceptions,它扩展了Exception。现在,当我必须抛出一个自定义异常时,我调用这个类,从中得到$error\u代码。现在,这个$error_代码是另一个类的常量,该类的区域设置在MyBundle/Resources/translations/messages.en.yml中,将用作抛出异常消息

现在我的问题是:

如何避免addResource,使其能够根据区域设置自动添加并查找字符串? 如何访问此类中的serviceContainer,以便访问会话以设置和获取区域设置或其他服务。 我们也可以设置默认加载程序。 在上面的代码中,我创建了一个Translator类的实例并手动传递“en”。但它应该选择默认语言环境或用户设置的语言环境。 我尝试了许多解决方案,但没有达到预期的效果


任何帮助都将不胜感激。提前感谢。

您需要将您的班级注册为Symfony服务。阅读文档:

之后,您可以在构造函数中注入其他服务,如翻译。它将使用您已经设置的所有参数


如果您注入翻译服务,它将选择您已经设置的参数。例如,如果您在config.yml中为translator定义了参数,包括默认的区域设置,然后在route中使用参数覆盖此区域设置,您将使用此区域设置translator服务。它将自动使用位于适当目录中的资源。

谢谢您的回答。但这只是部分答案。我的主要问题是我不想手动添加资源。我希望它根据用户区域设置自动拾取。如果您注入翻译服务,它将拾取您已经设置的参数。例如,如果您在config.yml中为translator定义了包括默认语言环境在内的参数,则在route中使用参数覆盖此语言环境,您将获得具有此语言环境的translator服务。它会自动使用适当目录中的资源。啊,现在我明白了。非常感谢: