Beheben Sie den lokalen Dateipfad vom Namen des Zweigvorlagennamens
Frage
Was sind die programmatischen Schritte, um diese Zeichenfolge zu drehen:
AcmeProjectBundle::home.html.twig
das mögen?
/path/Symfony/src/Acme/ProjectBundle/Resources/views/home.html.twig
Lösung
Wenn Sie den Pfad von einem Controller abrufen möchten, können Sie diesen Code verwenden:
$parser = $this->container->get('templating.name_parser');
$locator = $this->container->get('templating.locator');
$path = $locator->locate($parser->parse('AcmeProjectBundle::home.html.twig'));
Weitere Informationen finden Sie in Code von:
Symfony\Bundle\FrameworkBundle\Templating\TemplateNameParser::parse
Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator::locate
Andere Tipps
(Um die Antwort des molekularen Mannes zu erweitern)
Für die Menschen, die dies brauchen Symfony 4:
Der Service templating.name_parser
ist standardmäßig nicht mehr als solche registriert und Sie benötigen die Abhängigkeit symfony/templating
im Komponisten, damit es verwendet werden kann.
Es wird auch empfohlen, den Container nicht direkt zu verwenden, um Dienste zu erhalten (ganz zu schweigen davon, dass der neue AbstractController nicht über alle Dienste verfügt), sondern die Abhängigkeitsinjektion durch Typ-Sinne.
Der Weg, es also zum Arbeiten mit Symfony 4 zu bringen:
//...
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'));
//...
}
}