我正在尝试访问控制器外部的配置变量。
当我尝试:
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'));
触发它。我遇到过这个问题的大多数其他主题建议全球化它。当然有更好的方法吗?
答案 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
}