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 22/11/2010, 10h48   #1
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Par défaut recupérer dans l' action un paramètre de l' url

Bonjour,

Nouveau défi.

Protéger un formulaire par un token stocké en base.

Une invitation est envoyé par e-mail contenant le lien du formulaire incluant un token chaque fois différent.

Aprés avoir modifié le routing.yml, j' envoi donc des urls de type:

frontend_dev.php/evaluation/index/284a46a51a56859871278a651df4721b

Ensuite j' essai de récupérer le token pour vérifier son existence en base, en me servant de la tool bar et de l' api.

J' essai de faire comme ceci :

Code :
1
2
3
4
5
6
 
public function executeIndex(sfWebRequest $request)
  {
 
     $this->token = $sf_request->sfParameterHolder();
     $this->invitation =   Doctrine_Core::getTable('Invitation')->getToken($this->token);
Mais j' obtiens un joli:
Notice: Undefined variable: sf_request
Fatal error: Call to a member function sfParameterHolder()
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 17h56   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
On va supposer que ta route est sous la forme
Code :
1
2
3
4
5
6
7
8
9
10
 
# apps/<application>/config/routing.yml
 
action_token:
  url: /evaluation/index/:token
  param:
    module: MonModuleName
    action: index
 
...
Le code de l'action sera alors
Code :
1
2
3
4
5
6
7
 
// apps/<application>/modules/MonModuleName/actions/actions.class.php
 
public function executeIndex(sfWebRequest $request)
{
   $this->forward404until($this->invitation = $request->getParameter('token', )null);
}
Le paramètre récupéré au lancement de l'action est justement le résultat du request envoyé avec tous les paramètres. Le fait de le faire dans un forward404 permet de vérifier que le paramètre est renseigné, si non, il renvoie sur une page d'erreur 404. Il faudra encore faire le même traitement sur le token et sa durée de validation.

On peut aussi, peut-être, envisager de ce servir d'une DoctrineRoute, qui s'occupera de la vérification de l'existence du token dans la table (mais pas de la pertinence de la date)(quoique, a étudier...) dans ce cas, on serait ainsi sur de l'existence du l'enregistrement d'invitation, sans avoir à mettre une ligne de code dans l'action (ce qui n'empêche que la vérification de la date se fera dans le modèle, donc, il reste bien du code à créer).
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 18h12   #3
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Oui mais j' ai besoin de savoir si le token existe dans la base

Au passage ton code me génère ceci..

500 | Internal Server Error | sfException
Call to undefined method evaluationActions::forward404until.


Pour la route j' avais trouve ceci qui me semblait intéressant

Code :
1
2
3
4
5
6
7
 
evaluation:
  url:  /evaluation
  param: { module: evaluation, action: index }
  class:        sfDoctrineRouteCollection
  options:      { model: Invitation, column: token }
  requirements: { token: \w+ }
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 18h35   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Citation:
Oui mais j' ai besoin de savoir si le token existe dans la base
Je n'ai jamais dis autre chose... au contraire.

Citation:
Au passage ton code me génère ceci..
--> forward404Unless()
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 18h51   #5
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
C 'est mieux.. .

Mais quelque soit le token passé dans l' url mon formulaire s' affiche..

Ce qui m' étonne qu' a moitié vu que je ne fais aucune requete dans la table invitation pour vérifier.

d' ou mon

Code :
1
2
 
$this->invitation = Doctrine_Core::getTable('Invitation')->getToken($this->token);
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 10h01   #6
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
En fait pourquoi faire compliquer si on passe le paramètre token comme ceci,

.......evaluation/index/?token=284a46a51a56859871278a651df4721b

On peut le récupérer comme ceci..

Code :
1
2
 
$this->token = $request->getParameter('token');
Par contre, chez moi ceci n' a aucun effet

Code :
1
2
 
$this->forward404Unless($this->token = $request->getParameter('token'),null);
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 15h29   #7
Membre à l'essai
 
Inscription : avril 2010
Messages : 26
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 26
Points : 21
Points : 21
essaie plutôt:

Code :
$this->forward404Unless($this->token = $request->getParameter('token'));
spikie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 15h39   #8
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Cela ne change rien.. meme si je passe aucun token , je ne suis pas redirigé vers une 404.

Ma requete sql semble être effectuée mais pas stocké dans le bon objet.
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 15h47   #9
Membre à l'essai
 
Inscription : avril 2010
Messages : 26
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 26
Points : 21
Points : 21
Tu utilise quelle route?

Sinon avec la route qui tu as donnée plutot, j'aurai plutot fait comme ça

Code routing.yml :
1
2
3
4
5
6
7
evaluation:
  url:  /evaluation/:token
  param: { module: evaluation, action: index }
  class:        sfDoctrineRoute
  options:      { model: Invitation, type: object}
  requirements: { token: \w+ }

Puis dans ton code tu peux faire ainsi après :
Code action.class.php :
1
2
3
4
5
6
 
...
  public function index(sfWebRequest $request) {
    $this->invitation = $this->getRoute()->getObject(); // Tu aura l'objet invitation
  }
...

Normalement pas besoin de forward404unless car il va checker tout seul si le token existe!

cf: la doc http://www.symfony-project.org/jobee...se_de_la_route

ps: sur la documentation de symfony, le jobeet montre comment mettre en place un système de token assez simple mais qui marche très bien!
spikie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 15h56   #10
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Oui mais je me suis d' ailleuurs inspiré de cela.

Dans mon cas les token sont gérés dans une autre table puis envoyé par mail aux personnes concerné.

Si le token est valide, le formulaire s' affiche en récupérant au passage qui est concerné ( l' évalué et celui qui évalue..).



Mais quand j' essai

Code :
1
2
 
 $this->invitation = $this->getRoute()->getObject();

j' obtiens un jolie

Call to undefined method sfRoute::getObject()
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 16h07   #11
Membre à l'essai
 
Inscription : avril 2010
Messages : 26
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 26
Points : 21
Points : 21
Tu utilise quelle version de symfony?

Normalement le code que j'ai mis marche, du moins pour ma part j'utilise beaucoup les routing avancés
spikie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 16h10   #12
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
1.4.8...
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 18h39   #13
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
En fait c' était bete comme choux !!

Code :
1
2
 
this->token = $request->getParameter('token');
avec un ?token=<chaine> dans l' url. .
mantex 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 03h37.


 
 
 
 
Partenaires

Hébergement Web