Jakie są kroki programistyczne, aby zmienić ten ciąg:

AcmeProjectBundle::home.html.twig

Zaangażowany w to?

/path/Symfony/src/Acme/ProjectBundle/Resources/views/home.html.twig
16
ojreadmore 17 luty 2012, 18:40

2 odpowiedzi

Najlepsza odpowiedź

Jeśli chcesz pobrać ścieżkę z kontrolera, możesz użyć tego kodu:

$parser = $this->container->get('templating.name_parser');
$locator = $this->container->get('templating.locator');

$path = $locator->locate($parser->parse('AcmeProjectBundle::home.html.twig'));

Aby uzyskać więcej informacji, spójrz na kod:

  • Symfony\Bundle\FrameworkBundle\Templating\TemplateNameParser::parse
  • Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator::locate
26
Molecular Man 25 luty 2012, 16:52

(Aby rozwinąć odpowiedź Molecular Man)

Dla osób, które tego potrzebują w Symfony 4:

Usługa templating.name_parser nie jest już domyślnie zarejestrowana jako taka i potrzebujesz zależności symfony/templating w Composer, aby można było z niej korzystać.
Ponadto zaleca się, aby teraz nie używać kontenera bezpośrednio do pobierania usług (nie wspominając o tym, że nowy kontroler AbstractController nie udostępnia wszystkich usług), ale raczej wykonywać wstrzykiwanie zależności za pomocą podpowiedzi typu.

Tak więc, sposób na to, aby działał z 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'));
        //...
    }
}
0
Dennis98 22 styczeń 2019, 14:39