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
War es hilfreich?

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'));
        //...
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top