Разрешить локальный путь к файлу из имени шаблона Twig - PullRequest
15 голосов
/ 17 февраля 2012

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

AcmeProjectBundle::home.html.twig

в это?

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

Ответы [ 2 ]

25 голосов
/ 25 февраля 2012

Если вы хотите получить путь от контроллера, вы можете использовать этот код:

$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
0 голосов
/ 22 января 2019

(Расширить ответ Молекулярного Человека)

Для людей, нуждающихся в этом в 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'));
        //...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...