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 :

probléme de routage de mes actions


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut probléme de routage de mes actions
    bonjour, j'ai des petit soucis au niveaux des routages de mes actions
    par defaut elles sont de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monModule/monAction/action?id_produit=3
    ce qui me provoque cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Action "monModule/action" does not exist.
    si je remplace l'url comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monModule/monAction?id_produit=3
    j'ai l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Action "monModule/show" does not exist.
    si je remplace l'url comme ceci ça fonctionne bien
    Qui à une idée ? de plus sous cette forme je ne sais pas comment récupérer l'id
    par exemple un getParameter()

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Peux-tu mettre le contenu de apps/<monAppli>/config/route.yml

    le nom réellement utilisé pour le module et pour l'action.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    mon module se nomme produit
    et mon action deleteNomenclature et showInfos
    toutes mes actions ont le même probléme

    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
    produit:
      class: sfDoctrineRouteCollection
      options:
        model:                produit
        module:               produit
        prefix_path:          /produit
        column:               idProduit
        with_wildcard_routes: true
     
     
    sf_guard_signin:
      url:   /login
      param: { module: sfGuardAuth, action: signin }
     
    sf_guard_signout:
      url:   /logout
      param: { module: sfGuardAuth, action: signout }
     
    sf_guard_password:
      url:   /request_password
      param: { module: sfGuardAuth, action: password }
     
    # You can find more information about this file on the symfony website:
    # http://www.symfony-project.org/reference/1_4/en/10-Routing
     
    # default rules
    homepage:
      url:   /
      param: { module: produit, action: index }
     
    # generic rules
    # please, remove them by adding more specific rules
     
    default_index:
       url:   /:module
       param: { action: index }
     
    default:
       url:   /:module/:action/*

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    C'est parce que tu utilises une sfDoctrineRouteCollection et que la doctrine route collection ne comprend que certaines action. Et les tiennes ne font pas partie de la liste.

    Le plus simple est de mettre tes actions avant la sfDoctrineRouteCollection elles seront analysée avant et passeront en priorité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    produitShowInfo:
      class: sfDoctrineRoute
      url: /produit/:Id/showInfo.html
      options:
        model: <nomDeTaClassModel>
        type: object
      param:
        module: produit
        action: showInfo
    Tu crées le lien par url_for('@produitShowInfo?id=' . $produit->getId() )
    ou mieux par url_for('@produitShowInfo', $produit)

    Tu récupères l'objet produit dans ton action showInfo par un getObject...

    C'est pas beau symfony ?

    Je te laisse faire le deuxième lien.

    Il faut les mettre avant la collection, si du moins tu utilises la collection pour d'autres actions, si non, tu peux la virer.

    PS:
    Tu peux mettre a peut près ce que tu veux pour l'URL, tant que tu as :Id pour y mettre l'Id de ton objet. : /taratata/show/:Id/info.html ou autre

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Points : 101
    Points
    101
    Par défaut
    ok merci je comprend mieux,
    par contre si j'ajoute une nouvelle actions comme tu me montre je suis obligé de modifier les fichiers de cache pour ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url_for('@produitShowInfo?id=' . $produit->getId() )
    ?

    car ma nouvelle action est juste déclaré dans le generator.yml et le actions.class.php.

    De plus si je souhaite modifier la route du edit je peut faire ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    produit_edit:
      class: sfDoctrineRoute
      url: /produit/:Id/edit
      options:
        model: <nomDeTaClassModel>
        type: object
      param:
        module: produit
        action: edit

    pour les noms des routes pour les actions que l'on a ajouté on peut mettre ce que l'on veut ?

    Merci encore pour ton aide

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je n'ai aucune idée de ce que donnerait le fait de rajouter une route "produit_edit:" avant la route de class : sfDoctrineRouteCollection.

    Il faut essayer. Et ca ne me semble pas documenté, donc avec des risques que ce qui marche là ne marche plus lors d'une version corrective intermédiaire...

    Par contre, tu peux modifier les méthodes utilisées pour récupérer la collection pour la list ou l'objet pour le reste (essentiellement le edit, vois le show s'il est utilisé).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    produit:
      class: sfDoctrineRouteCollection
      options:
        model:                produit
        module:               produit
        prefix_path:          /produit
        column:               idProduit
        with_wildcard_routes: true
      model_methods:
        list:   <getMaListe>
        object: <getMonObjet>
    <getMaListe> (qui peut être omis si la méthode par défaut donne satisfaction) doit retourner une doctrine_collection des objets à afficher dans la liste

    <getMonObjet> doit retourner un objet du model qui correspond à l'objet recherché et est utilisé pour les edit et show (si show est utilisé).


    J'utilise ces méthodes pour vérifier, dans le cas d'un blog par exemple, si l'utilisateur à bien les droits pour modifier l'article et que la liste des articles ne concerne que les articles de l'utilisateur. Un foward404 permet de résoudre les tentatives de piratage avant même que l'action ne soit appelée.

    C'est pas beau symfony ?

Discussions similaires

  1. Problèmes de privilèges pour mes rôles
    Par missbug dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 06/07/2006, 10h31
  2. problème d' UPDATE de mes tables MySQL
    Par gaet_045 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/06/2006, 21h11
  3. problème d'apostrophe dans mes requetes
    Par kirian dans le forum Bases de données
    Réponses: 3
    Dernier message: 03/05/2006, 12h06
  4. [Upload] Problème de lien entre mes fichiers
    Par temperature dans le forum Langage
    Réponses: 18
    Dernier message: 25/04/2006, 12h15
  5. Problème message d'erreur et action sur clic
    Par rangernoir dans le forum Access
    Réponses: 5
    Dernier message: 26/09/2005, 12h10

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