在控制器外部访问$ this-> get('configuration')?

时间:2016-11-21 20:17:17

标签: php symfony

我正在尝试访问控制器外部的配置变量。

当我尝试:

class pdfFooter extends \TCPDF
{ 
public function footer()
{
    $config = $this->get('core_parameters'); 
}
}

我收到此错误:

  

未捕获的PHP异常Symfony \ Component \ Debug \ Exception \ UndefinedMethodException:“尝试调用类”Plugin \ PrintBundle \ Controller \ pdfFooter“的名为”get“的未定义方法。

只需致电:

$this->writeHTMLCell($config->getParameter('heading_color_config'));

触发它。我遇到过这个问题的大多数其他主题建议全球化它。当然有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

您必须注入容器,以便可以访问所需的服务和参数。

但是,就像@Cerad所说的那样,主要原因(很多:没有类型提示,无法控制使用的服务,RunTime编译错误,缺少依赖关系等)为什么注入容器不是一个好主意是因为依赖关系替换:如果在库中定义了服务,则无法将其依赖于满足您需求的本地属性[1]

如果可能,你应该避免它。 这里只注入您需要的参数:

(参数必须在配置文件中预先定义)

services:
    yourapp.bundle.pdffooter:
        class: App\Bundle\Foo\pdfFooter
        arguments: ['%param1%','%param2%',...]

在你班上:

class pdfFooter
{    
private $param1;
private $param2;
// ...

public function __construct($param1,$param2,...)
{
    $this->param1 = $param1;
    $this->param2 = $param2;
    // ...
}

public function footer()
{

    // you can access your params directly here
}