在树枝扩展中使用配置参数

时间:2012-06-18 19:03:58

标签: symfony twig

我正在创建Twig扩展,因此我可以创建自定义过滤器和函数。我需要在'parameters.ini'文件中访问全局配置的参数。

我该怎么做?

3 个答案:

答案 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');