从Twig模板名称解析本地文件路径

时间:2012-02-17 14:40:20

标签: symfony twig

转换此字符串的程序步骤是什么:

AcmeProjectBundle::home.html.twig

进入这个?

/path/Symfony/src/Acme/ProjectBundle/Resources/views/home.html.twig

2 个答案:

答案 0 :(得分:25)

如果要从控制器检索路径,可以使用以下代码:

$parser = $this->container->get('templating.name_parser');
$locator = $this->container->get('templating.locator');

$path = $locator->locate($parser->parse('AcmeProjectBundle::home.html.twig'));

有关详细信息,请查看以下代码:

  • Symfony\Bundle\FrameworkBundle\Templating\TemplateNameParser::parse
  • Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator::locate

答案 1 :(得分:0)

(以扩展Molecular Man的答案)

对于 Symfony 4 中需要此功能的人:

服务templating.name_parser不再默认注册,您需要在Composer中使用依赖项symfony/templating才能使用。
另外,现在建议不要直接使用容器来获取服务(更不用说新的AbstractController不能提供所有可用的服务),而是通过类型提示进行依赖注入。

因此,使其与Symfony 4配合使用的方法:

//...
use Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator;
use Symfony\Bundle\FrameworkBundle\Templating\TemplateNameParser;

class DefaultController extends AbstractController
{
    public function indexAction(TemplateNameParser $parser, TemplateLocator $locator)
    {
        $path = $locator->locate($parser->parse('AcmeProjectBundle::home.html.twig'));
        //...
    }
}