Comment dois-je inclure raw fichiers HTML dans Symfony2/templates Twig?
Je suis en train de travailler sur un projet Symfony2 et j'ai plusieurs petits morceaux de html qui doivent être inclus dans l'un de mes principaux points de vue. Selon les officiels de la documentation de Twig, je devrais être en mesure de simplement utiliser {% include 'filename.html' %}
mais dans Symfony, sauf si le nom de fichier se termine par ".html.brindille" il jette et d'erreur disant qu'il ne trouve pas le fichier. J'aimerais éviter d'utiliser les templates Twig pour ces fichiers car ils n'ont pas de contenu dynamique, et beaucoup de doubles accolades (ils sont des modèles javascript) et nécessitant le concepteur de modèle à avoir à envelopper chacun de ces fichiers dans {% raw %}
tags semble vraiment comme un Kludgey façon de le faire.
J'ai essayé, mais je pense que cette question a à voir avec la façon dont Symfony gère emplacement de modèle/type plutôt qu'une Brindille de problème.
Alors vous devriez peut-être faire un rapport de bogue.
OriginalL'auteur wdh | 2011-10-05
Vous devez vous connecter pour publier un commentaire.
Un bref récapitulatif sur les rameaux des extensions de fichier (prises à partir de la documentation):
Par conséquent, il fait sens pour moi que le fait d'inclure un fichier .html serait à tout le moins ambiguë, même si elle ne renvoie pas d'erreur.
Donc, vous avez 3 choix:
Si les fichiers sont purement javascript alors inclure des balises script dans votre page.
Si ils sont mélangés, HTML et JS puis échapper à la JS avec {% brut %} et inclure les fichiers que foo.html.les templates twig. Si il y a beaucoup de scripts inclus comme cela, alors très probablement, vos concepteurs pourrait faire avec un peu de refactoring et de déplacer la majeure partie de leurs scripts dans des fichiers externes (voir l'option 1)
Si vraiment vous insistez, vous pouvez toujours écrire une extension Twig pour inclure du HTML brut, fichiers. (EDIT: Voir @Haprog la réponse ci-dessous pour plus de détails sur cette option).
{{ include_html('foo/bar.html') }}
Mise à JOUR 2015 brindille a depuis ajouté à la fonction source:
{{ source('AcmeSomeBundle:Default:somefile.html.twig') }}
Bravo à @Nigel Ange dans les commentaires ci-dessous pour l'option 4.
{% raw %}
balises fonctionne, mais je sens son assez désorganisé et peut obtenir difficile lorsqu'il y a beaucoup de petit gabarit bits. Chargement du modèle bits via ajax ralentit inutilement les choses sur le client final car il y a plus de demandes. Mettre les modèles dans une brindille de fichier qui n'a pas de réelle brindille de balisage (autres que{% raw %}
) bugs le trouble obsessionnel-compulsif développeur en moi, mais il semble que l'option la plus simple dans ce cas. Merci.brindille a depuis ajouté le
source
fonction{{ source('AcmeSomeBundle:Default:somefile.html.twig') }}
Est-il possible d'utiliser phtml fichiers à la place?
OriginalL'auteur rdjs
J'ai aussi tombé sur le même problème en essayant de trouver une solution pour inclure des fichiers (moustache modèles) comme matières premières dans les templates Twig donc Twig n'essayez pas de les analyser.
Au début, j'ai eu ma moustache fichiers de modèle nommé tout simplement sometemplate.html et enveloppé dans
{% raw %}
balises. Cela a fonctionné pendant un certain temps, mais ensuite j'ai commencé à l'aide de PhpStorm IDE avec le Guidon plugin (pour la moustache de syntaxe). Pour PhpStorm pour reconnaître les fichiers comme la moustache de syntaxe, ils doivent disposer d'une unique extension de fichier (.mustache
par défaut), j'ai donc renommé mon sometemplate.html pour sometemplate.moustache mais j'ai vraiment détesté l'idée que ma moustache modèles nécessaires pour être enveloppé avec des balises Twig. J'ai donc fini par faire ce que @rdjs dit dans son option 3. C'est la meilleure solution de l'omi.Voici le travail extension Twig fonction que j'ai faite:
Avec cela en place, vous pouvez facilement inclure des fichiers "raw" sans Rameau d'analyse en faisant:
J'ai même fait une Brindille de macro pour simplifier, y compris moustache modèles HTML tête sections:
Et après l'importation du fichier avec la macro ci-dessus à votre template Twig (
{% import "macros.twig" %}
par exemple), vous pouvez facilement importer moustache modèle dans vos fichiers de templates Twig simplement en faisant{{ mustache_script('sometemplate_tpl', 'sometemplate.mustache') }}
à l'intérieur d'un HTML<head>
section.J'espère que cela aide quelqu'un qui est à la recherche d'une solution au même problème.
Désolé, je n'ai pas répondu plus tôt. Vous pouvez définir la fonction de n'importe où vous le souhaitez. Assurez-vous de vous appeler
$twig->addFunction()
n'importe où après avoir défini la Brindille avec$twig = new Twig_Environment($loader);
j'ai l'habitude d'avoir mon propretwigInit()
fonction qui se charge de l'établissement le Rameau de l'environnement y compris le chargement des extensions que j'utilise. Vous pouvez aussi lire la page de documentation sur l'extension Twig twig.sensiolabs.org/doc/advanced.htmlCe qui est excellent. Vous pouvez ignorer la nécessité de "raw" si vous ajoutez "'is_safe'=> array('all')" pour les options après
needs_environment
.Quel espace de noms ne vous "utilisez" Twig_Function_Function? Où est ce code? Je vais essayer dans un contrôleur. Edit: Ah,
new \Twig_Function_Function
OriginalL'auteur Haprog
Je suis tombé sur ce post, car j'ai eu une question similaire. Après une heure de recherche et d'essayer, j'ai découvert qu'à partir de Brindille à la Version 1.15 de la "Fonction de la source" a été ajouté.
Peut-être qui aide quelqu'un à l'avenir.
OriginalL'auteur Chris
Suivi sur Kari, si vous êtes dans une extension.. vous pouvez l'appliquer de cette façon.
Et que j'avais un $this->twig_include_raw type de méthode. Vous vous souhaitez inclure dans votre modèle:
Pas besoin de "raw".
OriginalL'auteur Matt Kenefick