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