我正在创建Twig扩展,因此我可以创建自定义过滤器和函数。我需要在'parameters.ini'文件中访问全局配置的参数。
我该怎么做?
答案 0 :(得分:9)
您可以通过依赖注入传递它们。通过构造函数传递参数或使用setter方法。此示例使用xml进行服务定义:
public class MyExtension extends \Twig_Extension
{
protected $param;
public function __construct($param)
{
$this->param = $param;
}
}
<!-- in services.xml -->
<service id="my_bundle.twig.extension.name" class="Acme\Bundle\DemoBundle\Twig\Extension\MyExtension">
<argument>%my_parameter%</argument>
<tag name="twig.extension" />
</service>
注意参数如何限制在百分比符号中。您可以从official book了解有关依赖注入的更多信息。
答案 1 :(得分:2)
在Twig扩展中使用容器不是一个好习惯,但是在services.xml中声明twig扩展时可以将service_container作为参数传递
<service id="example.twig.my_extension" class="Example\CoreBundle\Twig\MyExtension">
<argument type="service" id="service_container" />
<tag name="twig.extension" />
</service>
在__construct()函数声明中添加ContainerInterface参数:
<?php
namespace Example\CoreBundle\Twig;
use Symfony\Component\DependencyInjection\ContainerInterface;
class MyExtension extends \Twig_Extension
{
/**
* @var ContainerInterface
*/
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
...
(别忘了使用Symfony \ Component \ DependencyInjection \ ContainerInterface)
在您的函数中调用配置参数,如下所示:
$this->container->getParameter('key');
答案 2 :(得分:0)
我不知道在Twig视图中是否可以,但在控制器中你可以这样做:
$this->container->getParameter('name_of_ini_value');