2014-11-08 23 views

回答

2

如果你看一看的TwigExtension(在TwigBundle内),你会看到配置存储在一个twig.form.resources参数:

$container->setParameter('twig.form.resources', $config['form']['resources']); 

你可以捆绑元素添加到这个参数编译器内通过。在加载所有捆绑包扩展并且容器具有一组完整的服务之后执行编译器传递。详细了解如何在Symfony documentation中创建编译器通行证。

基本上,只要你想要做的是一样的东西:

$resources = []; 
if ($container->hasParameter('twig.form.resources')) { 
    $resources = $container->getParameter('twig.form.resources'); 
} 

$resources[] = 'your_awesome_template_resource.twig'; 

$container->setParameter('twig.form.resources', $resources); 
-1

我想要做同样的事情,我想从包中加载表单模板,无所添加到config.yml。下面是它是如何做:

您需要实现在您的扩展,它位于你的bundle folder/DependencyInjection/BundleNameExtension.php

像这样PrependExtensionInterface

class YourExtension extends Extension implements PrependExtensionInterface { 
    ... 
    public function prepend(ContainerBuilder $container) { 
     foreach (array_keys($container->getExtensions()) as $name) { 
      switch ($name) { 
       case 'twig': 
        $container->prependExtensionConfig(
         $name, 
         array('form' => array('resources' => array('YourExtension:Form:fields.html.twig'))) 
        ); 
        break; 
      } 
     } 
    } 
} 

这里是SummerNote束采取完整的例子: https://github.com/solilokiam/SummernoteBundle/blob/a510386c49144ff0f4391c460bcc1640fd26b691/DependencyInjection/SolilokiamSummernoteExtension.php