Каковы программные шаги для преобразования этой строки:
AcmeProjectBundle::home.html.twig
в это?
/path/Symfony/src/Acme/ProjectBundle/Resources/views/home.html.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::parseSymfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator::locate(Чтобы расширить ответ молекулярного человека)
Для людей, нуждающихся в этом в 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'));
//...
}
}