普通班级内的访问服务

时间:2012-01-21 14:27:14

标签: php symfony localization twig

我的Symfony2项目中有一个常规课程:

    class RangeColumn extends Column{
        //...
    }

现在这个类里面是一个渲染函数,我想在其中使用Twig或Symfony2的翻译服务来渲染一个特定的模板。如何以正确的方式访问此服务?

2 个答案:

答案 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

您可以更进一步,将类的构造委托给依赖注入容器(从中创建服务)。

服务与您的“常规”课程没有什么不同。只是他们的构造被委托给容器。