Разрешить локальный путь к файлу из имени шаблона Twig
Каковы программные шаги для преобразования этой строки:
AcmeProjectBundle::home.html.twig
в это?
/path/Symfony/src/Acme/ProjectBundle/Resources/views/home.html.twig
Ответы
Ответ 1
Если вы хотите получить путь от контроллера, вы можете использовать этот код:
$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
Ответ 2
(Чтобы расширить ответ молекулярного человека)
Для людей, нуждающихся в этом в Symfony 4:
Служба templating.name_parser
больше не регистрируется как таковая по умолчанию, и для ее использования вам понадобится зависимость symfony/templating
в Composer.
Кроме того, теперь рекомендуется не использовать контейнер напрямую для получения сервисов (не говоря уже о том, что новый 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'));
//...
}
}