Подтвердить что ты не робот

Разрешить локальный путь к файлу из имени шаблона Twig

Каковы программные шаги для преобразования этой строки:

AcmeProjectBundle::home.html.twig

в это?

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

Ответ 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'));
        //...
    }
}