我正在创建 Twig 扩展,因此我可以创建自定义过滤器和函数。我需要访问“parameters.ini”文件中的全局配置参数。
我该怎么做呢?
您可以通过依赖注入传递它们。通过构造函数传递参数或使用 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>
请注意参数如何被限制在百分比符号中。您可以从官方书籍中阅读有关依赖注入的更多信息。
这不是在 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');
我不知道在 Twig 视图中是否有可能,但在控制器中你可以这样做:
$this->container->getParameter('name_of_ini_value');