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 :

Formulaire dans components


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 74
    Par défaut Formulaire dans components
    Bonjour,

    J’essaie de faire un formulaire de connexion pour les membres, le formulaire fonctionne et maintenant j'aimerai le placer dans un components.

    Le problème est qu'a la fin de chaque action je redirige vers la page d'acceuil donc aucun message d'erreur n'est affiché.

    users/actions/action.class
    Code php : 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
    class userActions extends sfActions
    {	
    	public function executeDoLogin(sfWebRequest $request)
    	{
    		$this->forward404Unless($request->isMethod('post'));
    		$this->form = new LoginForm();
    		$this->form->bind($request->getParameter('login')); // remplissage du formulaire
     
    		if ($this->form->isValid())
    		{
    			$parametre = $request->getParameter('login');
    			$membre = Doctrine::getTable('user')->findOneByLogin($parametre['login']);
     
    			// On set la session de l'utilisateur.
    			$this->getUser()->setAuthenticated(true);
     
    			// On stocke les infos utiles dans la session utilisateur
    			$this->getUser()->setAttribute("id", $membre->getId());
    			$this->redirect('homepage');
    		}
    		else {
    			$this->redirect('homepage');
    		}
    	}
     
    	public function executeDeco(sfWebRequest $request)
    	{
    		// Supprime l'état identifié de l'user
    		$this->getUser()->setAuthenticated(false);
     
    		// Supprime tous les accès de l'user
    		$this->getUser()->clearCredentials();
     
    		// Supprime les valeurs de la sessions que l'on a stocké
    		$this->getUser()->getAttributeHolder()->remove('id');
     
    		$this->redirect('homepage');
    	}
    }

    users/actions/components.class.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class userComponents extends sfComponents
    {
    	public function executeLogin(sfWebRequest $request)
    	{
    	  $this->form = new LoginForm();
    	}
    }


    users/template/_login.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    	if ($sf_user->isAuthenticated() == true)
    	{
    ?>
        <form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
            <?php echo $form; ?>
            <input type='submit' value="Connection" />
        </form>
    <?php } else { 
    	echo '<a href="'.url_for('disconnect').'">Deco</a>';
    } ?>

    routing,yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    checkLogin:
      url: /check_login.html
      param: { module: user, action: doLogin }
     
    disconnect:
      url: /disconnect.html
      param: { module: user, action: deco }
    Le but est que l'utilisateur reste sur la page ou il à essayé de ce loguer avec les messages d'erreur.

    Merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Par défaut
    Bonjour,

    Est ce qu'en enlevant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "
    else {
    	$this->redirect('homepage');
    }"
    ne résoudrait il pas ton problème?

    Si le formulaire n'est pas valide, il n'y pas de redirection, il voit donc les erreurs.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 74
    Par défaut
    J'ai essayé mais symfony fait une erreur indiquant qu'il ne trouve pas le template DoLogin.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 76
    Par défaut
    thomas a raison il n'y a pas de raison pour le redirigé si le form est invalide.
    Par contre tu vas surement avoir un message d'erreur disant que le template doLoginSuccess n'existe pas. soit tu le crées soit tu lui attribut loginSuccess comme template.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 74
    Par défaut
    Le problème est que je ne peut pas attribuer de template car il s'agit d'un formulaire imbriqué dans toutes mes pages à l'aide d'un components.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 18
    Par défaut
    Essaye de sauvegarder l'url de la page où était l'utilisateur et forward vers ce lien.

  7. #7
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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
    Par défaut
    Tu peux récupérer l'url précédente dans l'objet sfRequest de symfony.

    L'idée est alors de rediriger vers cette url.

    Il faut que ton componement soit alors capable de conserver les données d'authentifications fausses et de les utiliser lors du ré affichage de la page, pas infaisable mais pas trop simple.

    L'autre solution est de faire l'authentification en AJAX.

    Le plus simple est d'utiliser la première méthode si l'authentification est valide et de passer par une URL a part si l'authentification n'est pas réussie (en changeant de page). Il reste possible de conserver l'url précédente (en session) et de faire une redirection une fois l'authentification réussie. C'est plus simple.

    Pense à jeter un œil au plugin sfDoctrineGuardPlugin qui gère les authentification et les user ainsi que leurs droit d'une manière plus que propre.

Discussions similaires

  1. Formulaire dans une fenêtre modale
    Par Amnesiak dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 14h25
  2. Réponses: 2
    Dernier message: 11/12/2004, 21h20
  3. Formulaire dans un mail
    Par Immobilis dans le forum ASP
    Réponses: 6
    Dernier message: 23/11/2004, 10h12
  4. Réponses: 3
    Dernier message: 27/10/2004, 14h43
  5. Recuperation de formulaire dans une fonction
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 23/06/2004, 15h04

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