Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/11/2010, 11h06   #1
Invité de passage
 
Inscription : août 2009
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 20
Points : 2
Points : 2
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 :
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
mika34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 11h48   #2
Invité de passage
 
Inscription : août 2009
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 20
Points : 2
Points : 2
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 :
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 :
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 :
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 ?
mika34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 12h08   #3
Invité de passage
 
Inscription : août 2009
Messages : 20
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 20
Points : 2
Points : 2
réponse définitive (merci à nail_).

Dans le routing.yml :

Code :
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
mika34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 12h15   #4
Futur Membre du Club
 
Inscription : juin 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 81
Points : 17
Points : 17
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 :
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+
babyboy6492 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h24.


 
 
 
 
Partenaires

Hébergement Web