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 :

Tutoriel pour débuter avec Symfony2 [Tutoriel]


Sujet :

Symfony PHP

  1. #41
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 22
    Points
    22
    Par défaut erreur filemtime() [function.filemtime] après avoir renommé le fichier ajouter.html.twig en editer.html.twig
    Bonjour,

    Voilà tout est indiqué dans le titre, en suivant le tuto (paragraphe formulaire) je me retrouve avec cette erreur :
    Warning: filemtime() [function.filemtime]: stat failed for C:\wamp\www\Mobilhome\src\Fred\MobilhomeBundle/Resources/views/Client/ajouter.html.twig in C:\wamp\www\Mobilhome\vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Templating\Loader\FilesystemLoader.php line 68
    500 Internal Server Error - ErrorException
    J'ai cherché sur google, mais je n'ai pas trouvé la solution pour moi. Une personne avait supprimer le fichier index.html.twig et s'était retrouvé avec la même erreur et en recréant ce fichier mais en le laissant vide, cela marchait à Apparemment peut-être un problème de cache ?

    => Désolé, mais je l'avais mal nommé, en tout cas comme l'autre personne en créant un fichier vide, l'erreur disparaît. Si quelqu'un a une solution pour éviter d'avoir des fichiers vides et inutiles.

  2. #42
    Candidat au Club
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    peut-être en supprimant le cache...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php app/console cache:clear

  3. #43
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 22
    Points
    22
    Par défaut C'est bon ça marche
    Merci encore en tapant php app/console cache:clear, je n'ai plus d'erreur

  4. #44
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    en testant ce tutoriel, je me suis rendu compte qu'il y avait quelques coquilles (normal vu la date de publication et l'évolution du framework).

    Dans la partie IV-C. Relier le bundle à Symfony2, les modifications ne sont plus nécessaires (elles sont faites par le générateur)


    Cependant, j'ai un problème dont je ne trouve pas la solution.

    Dans la IV-D. Afficher un premier message, le fichier routing.yml dans Symfony2/src/MyApp/FilmothequeBundle/Resources/config/ n'existe pas et quand je veux tester le message, j'ai une belle erreur 404 :

    No route found for "GET /myapp/"
    404 Not Found - NotFoundHttpException
    J'ai bien entendu suivi le tutoriel mais j'ai un doute sur le fameux fichier "routing.yml". Quelqu'un a-t-il une solution ?

    Merci

  5. #45
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    J'ai moi aussi rencontré un problème quant j'ai souhaité afficher un message de test, que j'ai résolu en suivant la documentation officielle (disponible : ici )

    Voici ma démarche (après avoir installé la dernière version, RC6 à ce jour):

    -> génération du bundle avec la commande suivante :
    php app/console generate:bundle
    les valeurs saisies dans l'assistant :
    namespace : MyApp/Filmothequebundle
    name : MyAppFilmothequebundle
    répertoire : src
    format : yml
    (pour les autres valeurs je suis celles proposées par l'assistant entre [ ])

    J'obtiens :
    #app/AppKernel.php
    new MyApp\FilmothequeBundle\MyAppFilmothequeBundle(),

    #app/config/routing.yml
    MyAppFilmothequeBundle:
    resource: "@MyAppFilmothequeBundle/Resources/config/routing.yml"
    prefix: /

    #src/MyApp/Filmothebundle/Ressources/config/routing.yml
    MyAppFilmothequeBundle_homepage:
    pattern: /hello/{name}
    defaults: { _controller: MyAppFilmothequeBundle : D efault:index }
    Nous voyons donc dans ce fichier :
    l'url à saisir : /hello/{name}
    Comment cette url sera traitée par symfony :
    Bundle : MyAppFilmothequeBundle
    Controller : Default
    Action : index
    var : name

    http://symfony.local/app_dev.php/hello/paul => affiche " Hello paul! "

    Cordialement.

  6. #46
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 31
    Points : 26
    Points
    26
    Par défaut Quelques modifications pour les Entity
    La partie VI n'est plus tout à fait à jour car j'avais des erreurs lorsque je voulais créer les entités : Categorie, Acteur et Film.

    Les annotations du type @Assert.... comme @Assert\NotBlank() me posaient des problèmes lors la ligne de commande : php app/console doctrine:generate:entities MyAppFilmothequeBundle

    Pour corrigé cet ancienne façon de faire remplacer les annotations @Assert.. en :
    @validation:MaxLength(30)
    @validation:NotBlank


    Du coup la ligne :
    use Symfony\Component\Validator\Constraints as Assert;
    n'a plus lieu d'être.

    Par contre je suis bloqué à la section IX avec un problème de template... du type :
    Warning: filemtime() [function.filemtime]: stat failed for C:\wamp\www\Mobilhome\src\Fred\MobilhomeBundle/Resources/views/Client/ajouter.html.twig in C:\wamp\www\Mobilhome\vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Templating\Loader\FilesystemLoader.php line 68
    500 Internal Server Error - ErrorException
    Le Clear Cache ne change rien.

  7. #47
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Pour corrigé cet ancienne façon de faire remplacer les annotations @Assert.. en :
    @validation:MaxLength(30)
    @validation:NotBlank
    @Assert n'est pas une ancienne façon de faire.
    Comme indiqué ici, cette méthode d'annotation semble être toujours valide officiellement.

    Les formules "@validation" semblent pour le moment valides, mais ne figurent pas (plus?) dans la documentation officielle...mais si quelqu'un en trouve je suis preneur

  8. #48
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Après avoir bravé quelques difficultés différencient la version utilisée dans ce sujet et la version finale, me voilà bloqué à l'étape X-A - Création d'un premier formulaire

    J'ai complété les fichiers ActeurForm.php, ActeurController.php puis ajouter.html.twig. Mais lorsque j'accède à la page http://localhost/Symfony2/web/app_dev.php/myapp/acteur/ajouter, j'obtiens l'erreur suivante :

    Fatal error: Class MyApp\FilmothequeBundle\Form\ActeurForm contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Symfony\Component\Form\FormTypeInterface::getName) in http://localhost/Symfony2/src/MyApp/FilmothequeBundle/Form/ActeurForm.php on line 9

    Quelqu'un a-t-il une solution ?

  9. #49
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai réussi à afficher le formulaire de l'étape X-A en m'aidant de la doc http://symfony.com/doc/2.0/book/forms.html

    Cependant, ça fait faire pas mal de changement. Ce n'est certainement pas une obligation mais je n'utilise plus ActeurForm.php, le formulaire est directement dans ActeurController.php

    <?php

    namespace MyApp\FilmothequeBundle\Controller;

    //use Symfony\Component\DependencyInjection\ContainerAware;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\RedirectResponse;
    use MyApp\FilmothequeBundle\Entity\Acteur;
    //use MyApp\FilmothequeBundle\Form\ActeurForm;
    use Symfony\Component\HttpFoundation\Request;

    class ActeurController extends Controller
    {
    public function listerAction()
    {
    $em = $this->container->get('doctrine.orm.entity_manager');
    $categories = $em->getRepository('MyAppFilmothequeBundle:Acteur')->findAll();

    return $this->container->get('templating')->renderResponse('MyAppFilmothequeBundle:Acteur:lister.html.twig',array('categories' => $categories));
    }

    public function ajouterAction()
    {

    $acteur = new Acteur();

    $form = $this->createFormBuilder($acteur)
    ->add('nom', 'text')
    ->add('prenom', 'text')
    ->add('dateNaissance', 'date')
    ->add('sexe', 'choice', array('choices' => array('F'=>'Féminin','M'=>'Masculin')))
    ->getForm();

    return $this->render('MyAppFilmothequeBundle:Acteur:ajouter.html.twig', array(
    'form' => $form->createView(),
    'message' => ''
    ));
    }

    public function modifierAction($id)
    {
    return $this->container->get('templating')->renderResponse(
    'MyAppFilmothequeBundle:Acteur:modifier.html.twig');
    }

    public function supprimerAction($id)
    {
    return $this->container->get('templating')->renderResponse(
    'MyAppFilmothequeBundle:Acteur:supprimer.html.twig');
    }
    }
    Ensuite, pour valider complètement l'étape X-A et rendre le formulaire utile, les modifications ne sont pas tout à fait juste. La fonction ajouterAction doit être :

    public function ajouterAction(Request $request)
    {
    $message='';
    $acteur = new Acteur();

    $form = $this->createFormBuilder($acteur)
    ->add('nom', 'text')
    ->add('prenom', 'text')
    ->add('dateNaissance', 'date')
    ->add('sexe', 'choice', array('choices' => array('F'=>'Féminin','M'=>'Masculin')))
    ->getForm();

    if ($request->getMethod() == 'POST')
    {
    $form->bindRequest($request);

    if ($form->isValid())
    {
    $em = $this->container->get('doctrine.orm.entity_manager');
    $em->persist($acteur);
    $em->flush();
    $message='Acteur ajouté avec succès !';
    }
    }

    return $this->container->get('templating')->renderResponse(
    'MyAppFilmothequeBundle:Acteur:ajouter.html.twig',
    array(
    'form' => $form->createView(),
    'message' => $message,
    ));
    }

  10. #50
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Points : 44
    Points
    44
    Par défaut
    est ce que maintenant on utilise la version 2 de symfony pour nos futures projets ? ou bien on reste avec la version 1.4??

    Merci.

  11. #51
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Pour le Fatal error: Class MyApp\FilmothequeBundle\Form\ActeurForm contains 1 abstract method..., il fallait seulement rajouter le code suivant dans le fichier ActeurForm.php.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function getName()
    {
        return 'acteur';
    }

  12. #52
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Si vous avez un message d'erreur "could not find driver" en exécutant en ligne de commande php app/console doctrine:database:create, il se pourrait que php ne cherche pas au bon endroit le php.ini.

    Il lui faut indiquer l'endroit où se trouve le php.ini .

    Dans mon cas (easyphp), il fallait exécuter :
    php -c "C:\Program Files (x86)\EasyPhp\apache\php.ini" app/console doctrine:database:create.

    ou soit un autre moyen :

    exécuter php--ini en ligne de commande.
    Il va indiquer le répertoire où il recherche php.ini (Pour moi, c'est C:\windows).
    Copier le bon php.ini dans ce répertoire. Sur Windows 7, ne pas oublier de le copier avec le droit administrateur.

  13. #53
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut Un nouveau venu du Zend Framework
    J'ai déjà utilisé le Zend Framework et je commence à m'intéresser à symfony2.

    Symfony 2 à l'air très bien fait et je pense utiliser ce framework pour ma prochaine application mais j'ai tout de même quelques petites choses qui me surprennent.

    En fait, je trouve qu'il faut taper beaucoup de code pour pas grand chose.

    Exemples :
    - Définition des routes
    - Définition de la vue dans chaque action "$this->container->get('templating')->renderResponse".

    Comment ça se fait qu'il n'y ai pas de définition par défaut pour ces deux choses ?

    Exemples :
    - La route par défaut se trouve sous la forme "bundle/controller/action/param1/value1/param2/value2/..."
    - La vue par défaut est "bundle/controller/action.html.twig"

    Même si ce ne sont que deux petites choses, c'est toujours ça à gérer en plus et les erreurs de frappes arrivent facilement.

    Y-a-t-il un avantage à faire comme symfony le propose ?

  14. #54
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 585
    Points
    188 585
    Par défaut
    Citation Envoyé par Jonathan.b Voir le message
    - Définition des routes
    - Définition de la vue dans chaque action "$this->container->get('templating')->renderResponse".
    Je n'ai jamais utilisé cette syntaxe, je ne savais même pas que c'était possible, alors que j'ai défini déjà quelques routes !

    Regarde du côté de SensioFrameworkExtraBundle http://symfony.com/doc/current/bundl...dle/index.html, tu verras qu'il suffit de mettre un peu d'annotations autour de ton contrôleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        /**
         * @Route("/")
         * @Template
         */
        public function indexAction()
        {
            return array('var' => 42);
        }
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  15. #55
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par jlievens Voir le message
    La partie VI n'est plus tout à fait à jour car j'avais des erreurs lorsque je voulais créer les entités : Categorie, Acteur et Film.

    Les annotations du type @Assert.... comme @Assert\NotBlank() me posaient des problèmes lors la ligne de commande : php app/console doctrine:generate:entities MyAppFilmothequeBundle

    Pour corrigé cet ancienne façon de faire remplacer les annotations @Assert.. en :
    @validation:MaxLength(30)
    @validation:NotBlank


    Du coup la ligne :
    use Symfony\Component\Validator\Constraints as Assert;
    n'a plus lieu d'être.
    En fait il suffit juste de remplacer ler "\" par ":" pour les assert et tout fonctionne, c'est une des coquilles du tuto qui est également présente dans la doc.

  16. #56
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    Une remarque : pour chaque extrait de code ou fichier à créer, ça serait bien d'avoir le chemin complet du fichier et pas seulement le nom du fichier ou le nom du dossier parent. C'est parfois un peu confus pour savoir ou les placer pour un débutant.

    Et merci pour ce tuto (et j'espère tes futurs tuto sur des fonctionnalités plus avancées )

  17. #57
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2005
    Messages : 78
    Points : 39
    Points
    39
    Par défaut
    Je viens de tester votre tuto ne connaissant pas Symfony mais j'ai une erreur à l'exécution pour la création de catégories ainsi que dans l'affichage des categories en fait il n'y a pas de méthode nom.

    Method "nom" for object "MyApp\FilmothequeBundle\Entity\Categorie" does not exist in "MyAppFilmothequeBundleefault:index.html.twig" at line 5

    j'ai bien relu je ne voit pas la déclaration de cette méthode dans l'entité ou ai je raté quelque chose ?

  18. #58
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Bonjour patk29,

    Est-ce cela ne viendrait pas d'une erreur de frappe ? Je vois dans ton message que le chemin du fichier twig est incorrect :

    MyAppFilmothequeBundleefault:index.html.twig

    au lieu de :

    MyAppFilmothequeBundleDefault:index.html.twig

    A++

  19. #59
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    Citation Envoyé par bilbot Voir le message
    En fait il suffit juste de remplacer ler "\" par ":" pour les assert et tout fonctionne, c'est une des coquilles du tuto qui est également présente dans la doc.
    Nan finalement je racontais une bétise. Mes validateur fonctionnent pas et en repassant au "\" c'est ok.

    Sinon petite suggestion pour "simplifier" le code, faire hériter ActeurController de Symfony\Bundle\FrameworkBundle\Controller\Controller ca permet de raccourcir toutes les syntaxes liées à doctrine... et notamment de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $em = $this->getDoctrine()->getEntityManager()
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $em = $this->container->get('doctrine')->getEntityManager()
    idem pour les template/formulaire....

  20. #60
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Citation Envoyé par bilbot Voir le message
    Sinon petite suggestion pour "simplifier" le code, faire hériter ActeurController de Symfony\Bundle\FrameworkBundle\Controller\Controller ca permet de raccourcir toutes les syntaxes liées à doctrine... et notamment de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $em = $this->getDoctrine()->getEntityManager()
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $em = $this->container->get('doctrine')->getEntityManager()
    idem pour les template/formulaire....

    Cette méthode n'est pas conseillée car elle enlève toute la flexibilité de l'injection de dépendance...
    A++

Discussions similaires

  1. Cours et tutoriels pour débuter avec SAP
    Par birdy85 dans le forum SAP
    Réponses: 22
    Dernier message: 14/09/2016, 21h37
  2. Quel livre ou tutoriel pour débuter avec DOT.NET
    Par trent94 dans le forum Débuter
    Réponses: 16
    Dernier message: 09/02/2012, 16h46
  3. Tutoriel pour débuter rapidement avec les Windows.Forms ?
    Par Leelith dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/12/2008, 14h25
  4. [Portlet] Tutoriel pour débuter avec les portlets
    Par AbdeL02 dans le forum Portails
    Réponses: 7
    Dernier message: 20/08/2008, 00h24

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