5

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

我该怎么做呢?

4

3 回答 3

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>

请注意参数如何被限制在百分比符号中。您可以从官方书籍中阅读有关依赖注入的更多信息。

于 2012-06-18T20:55:15.477 回答
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');
于 2015-02-13T10:15:02.960 回答
0

我不知道在 Twig 视图中是否有可能,但在控制器中你可以这样做:

$this->container->getParameter('name_of_ini_value');
于 2012-06-18T19:23:58.227 回答