转换此字符串的程序步骤是什么:
AcmeProjectBundle::home.html.twig
进入这个?
/path/Symfony/src/Acme/ProjectBundle/Resources/views/home.html.twig
答案 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'));
//...
}
}