IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Impossible d'inclure un template dans mon layout [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut Impossible d'inclure un template dans mon layout
    Bonjour,

    J'aimerais inclure un template "connexion.html.twig" (présent dans les View de mon bundle "Utilisateur"), dans le layout de mon bundle "Main", mais j'obtiens le message d'erreur suivant:

    Unable to find template "SiteUtilisateurBundle::connexion.html.twig" in "SiteMainBundle::layout.html.twig" at line 15.
    500 Internal Server Error - Twig_Error_Loader


    (Je suis ce tutorial: http://j-place.developpez.com/tutori...fony2/#LVI-A-1 et j'en suis tout à la fin).

    Voici le code de mon layout (dans mon MainBundle):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <!DOCTYPE html>
    <html>
    	<head>
    		<title>{% block title %}Marketing{% endblock %}</title>
     
    		{% stylesheets output='css/am.min.css'
    			'../app/Resources/public/css/*' %}
    			<link rel="stylesheet" href="{{ asset_url }}" type="text/css" media="screen" />
    		{% endstylesheets %}
    		<script type="text/javascript" src="{{ asset('bundles/sitemain/js/jquery.js') }}"></script>
    		<script  type="text/javascript" src="{{ asset('bundles/sitemain/js/displaymenu.js.twig') }}"></script>
    	</head>
    	<body>
    		<div id="connexion">
    			{% include "SiteUtilisateurBundle::connexion.html.twig" %}
    		</div>
    		{% render "SiteMainBundle:Main:menu" %}
    		<div id="corps">	
    			{% block body %}
     
    			{% endblock %}	
    		</div> 
     
    		<div id="footer"> 
    			<p>Footer de la page !</p> 
    		</div>
    	</body>
    </html>
    Comment se fait-il que Symfony2 ne parvient à le trouver ?

    Merci !

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include "SiteUtilisateurBundle::connexion.html.twig" %}
    Symfony va donc chercher le fichier dans
    "Site/UtilisateurBundle/Resources/views/connexion.html.twig" donc attention de ne pas mettre ton fichier du genre : "Site/UtilisateurBundle/Resources/views/NomDeDossier/connexion.html.twig"

    Pour pouvoir t'aider il faudrait que tu donnes le chemin vers ton template twig.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    Mon "menu.html.twig" est dans un sous dossier "Main" mais pas mon fichier "connexion.html.twig", voici l'url exacte:

    C:\wamp\www\site\src\Site\UtilisateurBundle\Resources\views

    J'ai aussi bien vérifier la syntaxe, le fichier est bien nommé "connexion.html.twig"... C'est désespérant !

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Ton chemin est correct, ensuite c'est difficile de t'aider sur ce genre d'erreur.
    Tente un cache:clear (si pas déjà fait).
    Que disent les logs avant l'erreur?
    Y a t'il d'autres vues dans ton dossier et sous dossiers ,C:\wamp\www\site\src\Site\UtilisateurBundle\Resources\views ?
    Si oui est ce que tu peux y accéder ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Oui la première chose que j'ai testé a été de vider mon cache.

    Voici le log d'erreur:
    Twig_Error_Loader: Unable to find template "SiteUtilisateurBundle::connexion.html.twig" in "SiteMainBundle:Main:menu.html.twig" at line 8. (uncaught exception) at C:\wamp\www\site\vendor\symfony\src\Symfony\Bundle\TwigBundle\Loader\FilesystemLoader.php line 80

    J'avais essayé de créer un sous-dossier "Test" et de faire un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include 'SiteUtilisateurBundle:Test::connexion.html.twig' %}
    Mais ça me sortait la même erreur, sinon j'avais un sous-dossier "Default" (généré à la création du UtilisateurBundle) mais je l'ai supprimé (après avoir tester avec).

    Si jamais je peux te donner d'autres informations n'hésite pas je ne sais plus où chercher !

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    Ton Bundle UtilisateurBundle est t'il bien enregistré dans le AppKernel ?

    Est-ce que ça se produit uniquement lorsque tu inclus une template d'un autre Bundle?

    dans ton code de test il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include 'SiteUtilisateurBundle:Test:connexion.html.twig' %}
    avec un seul double point


    En espérant que ça t'aide

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    J'avais essayé de créer un sous-dossier "Test" et de faire un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include 'SiteUtilisateurBundle:Test::connexion.html.twig' %}
    la c'est sûr que ça plante(les "::" au lieu de ":" entre Test et connexion). Si tu crée un sous dossier Test dans
    "C:\wamp\www\site\src\Site\UtilisateurBundle\Resources\views" tu dois utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include "SiteUtilisateurBundle:Test:connexion.html.twig" %}
    Pour trouver ton fichier twig fonctionne comme suit:

    NomDuBundle:NomDuSousDossier:NomDuFichier

    où Nom du Bundle est dans ton cas SiteUtilisateur, si tu n'en mets pas il va chercher dans "C:\wamp\www\site\app\Resources\views"

    NomDuSousDossier correspond au sous dossier du dossier "views", si tu n'en mets pas il va chercher pour "SiteUtilisateurBundle::connexion.html.twig" le fichier "C:\wamp\www\site\src\Site\UtilisateurBundle\Resources\views\connexion.html.twig"

    Voilà, vérifie bien que tu as compris le fonctionnement et regarde si tout est ok.
    Pour moi Twig ne trouve pas le fichier là où il cherche, donc je pense que tu n'as pas du le placer là où il faut.
    "C:\wamp\www\site\src\Site\UtilisateurBundle\Resources\views\connexion.html.twig"
    Mais bon si tu as vérifié et qu'il est au bon endroit alors là je sais plus.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Salut

    Pour trouver ton fichier twig fonctionne comme suit:
    NomDuBundle:NomDuSousDossier:NomDuFichier
    Les includes des Twig cherchent dans le répertoire Resources/views par défaut, et si tu as des sous dossiers dans ton répoertoire view (c'est quand même conseillé), l'inclusion se fait comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include "NomduBundle::repertoire/fichier.html.twig" %}

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Salut Guybrush,
    je n'ai pas essayé ta méthode mais je suis sûr qu'elle marche. Le fait de mettre
    nous amène dans le sous dossier views donc en ajoutant:
    "répertoire/fichier.html.twig" il est logique de se retrouver sur le bon fichier.

    Par contre ce n'est pas la méthode préconisé par la doc de Symfony.

    http://symfony.com/doc/current/book/templating.html

    Paragraphe "Template Naming and Location"
    Symfony2 uses a bundle:controller:template string syntax for templates. This allows for several different types of templates, each which lives in a specific location:
    De même pour les includes, paragraphe "Tags and Helpers" => "Including other Templates"

    Ensuite même si ton répertoire ne correspond pas à un controller il est logique d'utiliser la même notation, non?

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Quand tes templates n'ont pas besoin de controllers, comment fais-tu du coup ?

    Moi je parle surtout des inclusions de Twig, pas de Symfony2. Si tu veux appeler un controller, utilise la fonction render de Twig.

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Quand tes templates n'ont pas besoin de controllers, comment fais-tu du coup ?
    disons que tes dossiers sont:

    --Resources
    ----views
    ------repertoire
    --------fichier.html.twig
    ------MonController
    --------form.html.twig

    tu peux juste inclure "fichier.html.twig" même si tu n'as pas besoin de controller donc juste pour du rendu html par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include 'Bundle:repertoire:fichier.html.twig' %}
    de même pour "form.html.twig" si tu as besoin juste du rendu html (donc sans controller) tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include 'Bundle:MonController:form.html.twig' %}
    et si tu veux l'utiliser avec un controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% render 'Bundle:MonController:edit' %}
    avec dans MonControllerController.php la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    editAction()
    {
        //..........
     
       return $this->render('Bundle:MonController:form.html.twig', array(....));
    }
    Donc dans les 2 cas tu gardes la même manière d'écrire qui est "Bundle:TonDossier:fichier" . C'est plus clair et ça suit la même logique

  12. #12
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Et c'est quoi la différence entre mettre des "/" et mettre des ":" ?

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Et c'est quoi la différence entre mettre des "/" et mettre des ":" ?
    Dans l'absolu rien. Dans la pratique ça te permet de garder de la cohérence, car avec les ":" ça marche avec ou sans contoller alors que le "/" ça marche juste sans controller!
    Et c'est d'ailleurs ce que Symfony dit de faire avec include (cf le lien que j'ai donné plus haut) dont l'extrait est ici:

    {# src/Acme/ArticleBundle/Resources/Article/list.html.twig #}
    {% extends 'AcmeArticleBundle::layout.html.twig' %}

    {% block body %}
    <h1>Recent Articles<h1>

    {% for article in articles %}
    {% include 'AcmeArticleBundle:Article:articleDetails.html.twig' with {'article': article} %}
    {% endfor %}
    {% endblock %}


    Je te signale qu'au départ c'est toi qui a repris ma façon de faire...

    Citation Envoyé par Guybrush113 Voir le message
    Salut

    Pour trouver ton fichier twig fonctionne comme suit:
    NomDuBundle:NomDuSousDossier:NomDuFichier
    Les includes des Twig cherchent dans le répertoire Resources/views par défaut, et si tu as des sous dossiers dans ton répoertoire view (c'est quand même conseillé), l'inclusion se fait comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include "NomduBundle::repertoire/fichier.html.twig" %}

  14. #14
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Non je t'ai cité pour te répondre en fait

    De mon côté les include de fonctionnent pas avec des ":" quand il y a plus d'un répertoire dans le chemin. Par exemple ceci ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% include "Bundle:repertoire1:repertoire2:fichier.html.twig" with {} %}
    Mais bon je fais peut-être quelque chose de travers !

    En tout cas si ca revient au même, ce n'est pas la peine d'en discuter d'avantage, chacun ses habitudes

  15. #15
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 104
    Points : 88
    Points
    88
    Par défaut
    Si tu mets un 4ème niveau alors oui tu es obligé d'utiliser un "/" pour le repertoire2.

    ce n'est pas la peine d'en discuter d'avantage, chacun ses habitudes
    c'est sûr

    et puis on a un peu dévié le post, j'espère qu'on a pas fait fuir student_php

    @student_php : t'en es où d'ailleurs ? T'as résolu ton problème ?

    Allez bonne soirée à tous!

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Bonsoir,

    Oui j'ai résolu le problème ! Désolé je ne suis pas passé ici depuis un moment.

    Bonne soirée à tous et merci de votre participation !

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par student_php Voir le message
    Bonsoir,

    Oui j'ai résolu le problème ! Désolé je ne suis pas passé ici depuis un moment.

    Bonne soirée à tous et merci de votre participation !
    Heu... si tu pouvais dire comment se serait super car j'ai exactement le même problème... merci d'avance
    charles

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. inclure un pdf dans mon fichier d'installation
    Par rvdth dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/04/2008, 14h35
  2. Réponses: 9
    Dernier message: 20/01/2008, 15h16
  3. [FLASH 8] Inclure une police dans mon projet
    Par nounetmasque dans le forum Flash
    Réponses: 1
    Dernier message: 29/01/2007, 09h41
  4. Réponses: 9
    Dernier message: 12/05/2006, 09h06
  5. Réponses: 7
    Dernier message: 25/01/2006, 21h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo