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 :

Définition de route [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 21
    Par défaut Définition de route
    Bonjour,

    Nous utilisons pour notre application un module sfGuardForgotPassword du plugin sfDoctrineGuardPlugin qui permet à un utilisateur non-identifié de demander une génération de mot de passe lorsqu'il l'a oublié. J'ai partiellement réussi à faire marcher ce plugin mais lorsque je clique sur "Mot de passe oublié" il ne se passe plus rien, sinon le rechargement de la page de login ce qui ne sert a rien

    Je suppose un p robleme de routing.yml pourtant les routes sont correctement définies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    sf_guard_forgot_password:
      url:    /forgot_password
      param:  { module: sfGuardForgotPassword, action: index }
     
    sf_guard_forgot_password_change:
      url:    /guard/forgot_password/:unique_key
      param:  { module: sfGuardForgotPassword, action: change }
    En plus sfGuardForgotPassword est bien defini dans settings.yml dans le champs "enabled_modules', alors je ne vois pas pourquoi ca marcha ne veut plus marcher.

    Connaitriez-vous l'origine du probleme ?

    Merci pour vos eclaircissements

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 21
    Par défaut
    Resolution partielle : il suffit de desactiver la securisation du sfGuardAuth sur le module sfGuardForgotPassword

    Dans le module du plugin, ou alord dans votre apps/frontend/sfGuardForgotPassword/config (creer les repertoires pour l'occasion) il faut creer un security.yml avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    default:
      is_secure: false
    et le plugin fonctionne.

    J'ai un autre soucis lié à l'implementation de la fonctionnalité "oubli de mot de passe" dans le plugin.

    L'action class de sfGuardForgotPassword hérite de cette classe :
    http://pastebin.fr/9616

    On s'appercoit que le setSubject dans les enois de mails (lignes 42 et 75) sont en anglais et codés en dur, et il les faudrait en francais. La seule solution trouvée est de copier coller le module sfGuardForgotPassword dans mon apps/frontend et là de modifier les phrases en anglais a la main mais maintenant j'ai une erreur type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to undefined method sfRoute::getObject() in C:\wamp\........\apps\frontend\modules\sfGuardForgotPassword\lib\BasesfGuardForgotPasswordActions.class.php on line 59
    J'ai intuitivement l'impression que ca a un rapport avec plugins/sfGuardDoctrine/lib/routing/sfGuardRouting.class.php et surtout ces lignes 35 a 49 du sus-dit fichier

    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
      static public function addRouteForForgotPassword(sfEvent $event)
      {
        $r = $event->getSubject();
     
        $r->prependRoute('sf_guard_forgot_password', new sfRoute('/guard/forgot_password', array('module' => 'sfGuardForgotPassword', 'action' => 'index')));
        $r->prependRoute('sf_guard_forgot_password_change', new sfDoctrineRoute('/guard/forgot_password/:unique_key', array(
          'module' => 'sfGuardForgotPassword',
          'action' => 'change'
        ), array(
          'sf_method' => array('get', 'post')
        ), array(
          'model' => 'sfGuardForgotPassword',
          'type' => 'object'
        )));
      }
    J'ai bien essayé de configurer le routing.yml en renseignant un sfDoctrineRoute objet dans le parametre object mais là j'ai de nouveaux bugs en pagaille et je m'egare completement.

    Je ne sais plus trop quoi faire, je veux mes sujets de mails en francais et pas en anglais, je dois faire quoi, si je cherche une solution consistant a copier le module du plugin dans apps/frontend pour pas modifier directement le plugin alors je dois redéfinir les routes ce qui est difficile.

    Que feriez-vous ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 21
    Par défaut
    réponse définitive (merci à nail_).

    Dans le routing.yml :

    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
     
    sf_guard_password:
      url:   /request_password
      param: { module: sfGuardAuth, action: password }
     
    sf_guard_forgot_password:
      url:    /forgot_password
      param:  { module: sfGuardForgotPassword, action: index }
     
    sf_guard_forgot_password_change:
      url:    /guard/forgot_password/:unique_key
      class:   sfDoctrineRoute
      options:  { model: sfGuardForgotPassword, type: object }
      param:  { module: sfGuardForgotPassword, action: change }
      requirements: { sf_method: [get, post] }
    Du coup le copier-coller du module de sfGuargForgotPassword fonctionne. Je regarderai dans la doc la signification de tout ça, parce que j'u comprends pas grand chose.

    Si néanmoins quelqu'un pouvait traduire tout ca, je serais pas contre

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Par défaut
    Pour chacune des routes tu définis sur quel module elle doit aller et l'action qu'elle doit executer pour le template associer (executeIndex pour IndexSuccess par exemple) à l'aide de param.
    Avec url tu défini la forme qu'aura ton url.

    Pour ta dernière route tu définit une route de type doctrine (voir tuto jobett Jour 5 pour plus de détail).
    Je pense que tu peux d'ailleurs améliorer cette route:
    dans requirements, il faut que tu mettes: unique_key: : \d+ en plus. Cela veut dire que tu ne peux avoir deux valeurs similaires pour "unique_key".
    Cela donnerait donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sf_guard_forgot_password_change:
      url:    /guard/forgot_password/:unique_key
      class:   sfDoctrineRoute
      options:  { model: sfGuardForgotPassword, type: object }
      param:  { module: sfGuardForgotPassword, action: change }
      requirements: 
        sf_method: [get, post]
       unique_key : \d+

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

Discussions similaires

  1. définition d'un profil de route et d'un profil de vitesse
    Par Nathaniel_etudiant dans le forum Simulink
    Réponses: 3
    Dernier message: 08/11/2010, 15h01
  2. [1.x] Définition des routes
    Par FaridM dans le forum Symfony
    Réponses: 6
    Dernier message: 26/07/2010, 23h44
  3. [Sybase] Définition des symboles
    Par SoaB dans le forum Sybase
    Réponses: 5
    Dernier message: 19/03/2003, 23h06
  4. Définition de "Métalangage"
    Par No dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 19/07/2002, 14h05

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