2014-03-29 6 views
9

Im Template Naming and Locations Abschnitt in dem Symfony docs heißt es:Symfony: Gibt es eine Möglichkeit, eine Zweigvorlage mit einem relativen Pfad zur Vorlage zu rendern?

Symfony2 verwendet ein Bundle: Controller: template String-Syntax für Vorlagen. Dies ermöglicht verschiedene Arten von Vorlagen, die jeweils , die an einem bestimmten Ort lebt:

  • AcmeBlogBundle: Blog: index.html.twig: Diese Syntax verwendet wird, eine Vorlage für eine bestimmte Seite zu spezifizieren. Die drei Teile der Zeichenkette, jeweils getrennt durch einen Doppelpunkt (:), bedeuten Folgendes:
  • AcmeBlogBundle: (Bundle) die Vorlage lebt in der AcmeBlogBundle (z. B. src/Acme/BlogBundle); Blog: (Controller) zeigt an, dass die Vorlage im Blog-Unterverzeichnis von Resources/views lebt;
  • index.html.twig: (Vorlage) Der tatsächliche Name der Datei lautet index.html.twig.

Ich möchte einen Zweig Vorlage zu analysieren und zu beharren die html in das Eigentum einer Lehre Einheit während meiner Daten Leuchten Prozess Bootstrapping wie so:

// let's say it finds ./Data/Product/camera_description.html.twig 
$productDescriptionTemplate = __DIR__.sprintf(
    '/Data/Product/%s_description.html.twig', 
    $product->getName() 
); 

$product->setDescription(
    $this->container->get('templating')->render(
     $productDescriptionTemplate, 
     array() 
    ) 
); 

$em->flush(); 

, welche die folgende Ausnahme ausgelöst:

Ja, ich könnte die Produktbeschreibung Vorlagen zu path/to/bundle/Resources/views/ verschieben, aber ich bin mehr daran interessiert, ob es möglich ist zu umgehen nt diese Konvention: Gibt es eine Möglichkeit, die Zweig Templating-Engine relativen oder absoluten Pfad zu einem Zweig Vorlage geben und es nicht, um die Konvention bundle:controller:template zu verwenden?

+0

Verwandte: http://stackoverflow.com/questions/7064914/how-to-load-a-template-from-full-path-in-the-template- Motor-Zweig – jcroll

Antwort

5

Sie auch einen neuen Namensraum wie hier beschrieben erstellen: http://symfony.com/doc/current/cookbook/templating/namespaced_paths.html

zum Beispiel:

paths: 
     "%kernel.root_dir%/../Data/Product/": product 

, die Ihnen erlauben sollten zu schreiben:

'product::%s_description.html.twig', 

oder

'@product/%s_description.html.twig' 
+0

Nach der Überprüfung der [Twig Dokumentation für Entwickler: Built in Loaders] (http://twig.sensiolabs.org/doc/api.html#built-in-loaders) glaube ich, dass Ihre Antwort die beste Lösung ist, da es ** kein eingebauter Weg **, um Twig einfach einen relativen Pfad zu einer Vorlage zu übergeben. Es ist möglich, dass ich [meinen eigenen Loader erstellt habe] (http://twig.sensiolabs.org/doc/api.html#create-your-own-loader), aber das ist einfach zu aufwendig für meine Zwecke. – jcroll

1

Wenn Sie nicht wollen, bundle:controller:template Syntax verwenden, versuchen Sie könnten dann twig direkt mit:

$product->setDescription(
    $this->container->get('twig')->render(
     $productDescriptionTemplate, 
     array() 
    ) 
); 
+0

Ich versuchte dies und erhielt die gleiche Ausnahme, die im ursprünglichen Post erwähnt wird. – jcroll

Verwandte Themen