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 :

Objet non passé à la fonction


Sujet :

Symfony PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut Objet non passé à la fonction
    Bonjour,

    J'ai un template (page) qui affiche une liste de toutes les sortes de véhicule. A chaque sorte affichée, il est possible de la modifier ou de la supprimer. Lorsqu'on clique sur le bouton "Modifier", on est envoyé vers le formulaire de modification de la sorte.

    Mon problème, c'est que mon objet "Sort" n'est pas reconnu dans la fonction du controller qui appelle le template de modification.

    Voici le code de mon template affichant la liste des sortes :

    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
    29
    {% extends 'base.html.twig' %}
     
    {% block title %} Types de véhicules existants {% endblock %}
     
    {% block body %}
     
        {% for sort in sorts %}
     
            <section class="sorts">
                <sort>
                    <div class="content">
                        {{sort.sort}}
                    </div>
                    <div>
                            <a href="{{ path('road_trip_editSort', { 'id' : sort.id }, {'test' : 'ok'} )}}" class="btn-btn-primary">Modifier</a>
                    </div>
                    <div>
                            <a href="{{ path('road_trip_deleteSort', { 'id' : sort.id } )}}" class="btn-btn-primary">Supprimer</a>
                    </div>
                </sort>
            </section>
     
        {% endfor %}
     
        <div>
                <a href="{{ path('road_trip_createSort')}}" class="btn-btn-primary">Ajouter une sorte de véhicule</a>
        </div>
     
    {% endblock %}
    J'envoie l'id de mon objet "Sort"

    Le code de la fonction du controller qui appelle le template de modification :

    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
        /**
         *  @Route("/road_trip/newSort", name="road_trip_createSort")
         *  @Route("/road_trip/{id}/editSort", name="road_trip_editSort")
         *           
         */
     
        public function sortForm(Sort $sort = null, Request $request, ObjectManager $manager){
     
            if (!$sort) {
                $sort = new Sort;
            }
     
            $form = $this->createForm(SortType::class, $sort);
     
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {            
     
                $manager->persist($sort);
                $manager->flush();        
     
                return $this->redirectToRoute('road_trip_sorts');
            }
     
            return $this->render('road_trip/createSort.html.twig', ['formSort' => $form->createView(), 'editMode' => $sort->getId() !== null]);        
        }
    Elle reçoit l'id et devrait comprendre qu'il s'agit d'un objet "Sort", comme lu dans un tutoriel. Cependant, ce n'est pas le cas car "editMode" est à null. Donc, dans le template suivant, c'est l'option "Création" et non "Modification" qui est affichée :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    {% extends "base.html.twig" %}
     
    {% form_theme formSort 'bootstrap_4_layout.html.twig' %}
     
    {% block body %}
     
        {% if editMode %}
     
            <h1>Modification d'une sorte de véhicule</h1>
     
        {% else %}
     
            <h1>Création d'une sorte de véhicule</h1>
     
        {% endif %}
     
        {{ form_start(formSort) }}
        {{ form_errors(formSort) }}
     
        <div>
            {{ form_label(formSort.sort, 'Sorte', {'label_attr': {'class': 'foo'}}) }}
            {{ form_errors(formSort.sort) }}
            {{ form_widget(formSort.sort) }}
        </div>
     
        <button type="submit" class="btn btn-success">
     
            {% if editMode %}
     
                Enregistrer les modifications
     
            {% else %}
     
                Ajouter la sorte
     
            {% endif %}
     
        </button>
     
        {{ form_end(formSort) }}
     
    {% endblock body %}
    Je n'y comprends rien. Quelqu'un a une idée?

    Merci d'avance!

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    Bonjour,

    le lien de road_trip_editSort dans twig contient deux paramétrés qui sont pas adéquat avec les arguments de la fonction sortForm.

    c'est bien de faire des var_dump();exit; de temps en temps pour voir les variables passés.
    c'est bien de commenter des bouts de codes aussi et re tester.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Bonjour,

    Merci pour ta réponse, mais je ne la comprends pas...

    Je passais de fait un paramètre "test" pour tenter de découvrir où était le problème, mais ça ne change rien. Je l'ai d'ailleurs supprimé.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Apparemment, d'après ce que je peux en comprendre, ce serait "paramconverter" qui ne fonctionnerait pas...

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Je pensais que "SensioFrameworkExtraBundle" était installé par défaut, ce qui n'est pas le cas. Je l'ai donc installé et tout fonctionne niclel!

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

Discussions similaires

  1. [AC-2010] Objet ListBox passé en paramètre dans une fonction = Null
    Par informer dans le forum VBA Access
    Réponses: 2
    Dernier message: 14/05/2016, 11h56
  2. Nommage fonction table : Nom d'objet non valide
    Par Gouxosor dans le forum Développement
    Réponses: 2
    Dernier message: 02/05/2015, 09h04
  3. Utiliser un texte passé à une fonction comme id d'un objet
    Par Invité dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/03/2014, 15h02
  4. Réponses: 2
    Dernier message: 17/12/2009, 09h46
  5. Réponses: 2
    Dernier message: 13/11/2009, 13h34

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