我的Symfony2项目中有一个常规课程:
class RangeColumn extends Column{
//...
}
现在这个类里面是一个渲染函数,我想在其中使用Twig或Symfony2的翻译服务来渲染一个特定的模板。如何以正确的方式访问此服务?
答案 0 :(得分:11)
代码示例:
<?php
class MyRegularClass
{
private $translator;
public function __construct(Translator $translator)
{
$this->translator = $translator;
}
public function myFunction()
{
$this->translator->trans('sentence_to_translate');
}
}
如果你想让你的班级成为一项服务: 在您的捆绑包中的services.yml文件中,
parameters:
my_regular_class.class: Vendor\MyBundle\Classes\MyRegularClass
services:
mybundle.classes.my_regular_class:
class: %my_regular_class.class%
arguments: [@translator]
有关详细信息,请参阅有关Symfony2 Service Container
的章节答案 1 :(得分:10)
使用dependency injection。这是一个非常简单的概念。
您应该只需将(注入)所需的服务传递给您的班级。
如果依赖项必须在构造函数中传递它们。如果他们可选,请使用 setters 。
您可以更进一步,将类的构造委托给依赖注入容器(从中创建服务)。
服务与您的“常规”课程没有什么不同。只是他们的构造被委托给容器。