redirect in beforefilter

Ce sujet est résolu
Default
,

Bonjour,
je voudrais verifier certains champs quelques soit page sur laquelle l'internaute se trouve, pour celà j'ai pensé faire la vérification dans beforefilter mon problème est la rédirection ne se fait pas, la page moulline et après le navigateur affiche l'erreur suivante : La page n’est pas redirigée correctement.
voici mon code:

public function beforeFilter() {
       $this->loadModel('Notification');
        $this->loadModel('User');
       $user_id=$this->Auth->User('id');
   if($this->Auth->User('id')){
   $userInfo=$this->User->find('first',array('conditions'=>array('id'=>$user_id),'fields'=>array('quartier','ville','langue','competence',
'date_naissance','visuel','role','description','charte_cond','visuel','piece_identite','phone','sexe','statut_professionnel','personne_contact','numero_contact')));
//debug($userInfo);
if($userInfo['User']['role']=='jobbeur'){
if($userInfo['User']['visuel']=='' || $userInfo['User']['description']=='' || $userInfo['User']['sexe']=='' || $userInfo['User']['date_naissance']=='' ||
  $userInfo['User']['phone']==''  ||  $userInfo['User']['statut_professionnel']==''|| $userInfo['User']['langue']==''  || $userInfo['User']['personne_contact']==''
  || $userInfo['User']['numero_contact']=='' || $userInfo['User']['competence']=='' || $userInfo['User']['charte_cond']=='0'){
  re  t urn $this->redirect(array('controller'=>'users','action'=>'form_register'));exit();
           }                                            
    }

    }

  }

Quelqu'un à une piste? Je suis preneur.
Merci

2 Réponse

17162
,

Bonsoir.
Pour commencer, tu devrais enlever le exit();, il est totalement inutile.
Ensuite, je ne trouve pas ton code logique, étant donné que tu veux rediriger un utilisateur connecté sur un formulaire d'inscription (à priori), alors que c'est une page qui n'est censé être utilisé que par un utilisateur non connecté.
Pour terminer, c'est tout à fait normal que le chargement ne se termine jamais, vu que ta fonction beforeFilterest exécutée quelque ce soit la page demandé, il te faut vérifier que la page demandée ne soit pas celle vers laquelle tu fais ta redirection.
Il te faut donc faire quelque chose comme :

public function beforeFilter()
{
    $this->loadModel('Notification');
    $this->loadModel('User');

    if ($this->request->params['controller'] != 'users' && $this->request->params['action'] != 'form_register') {

        $user_id = $this->Auth->user('id');

        if ($user_id) {

            $userInfo = $this->User->find('first', array(
                'conditions' => array('id' => $user_id), 
                'fields' => array(
                    'quartier', 'ville', 'langue', 'competence', 'date_naissance', 'visuel', 'role', 'description', 'charte_cond', 'visuel', 'piece_identite', 'phone', 
                    'sexe',  'statut_professionnel', 'personne_contact', 'numero_contact'
                )
            ));
            $user = $userInfo['User'];
            //debug($userInfo);
            if ($user['role'] == 'jobbeur') {
                if (
                    empty($user['visuel']) || empty($user['description']) || empty($user['sexe']) || empty($user['date_naissance']) || 
                    empty($user['phone']) || empty($user['statut_professionnel']) || empty($user['langue']) || empty($user['personne_contact']) || 
                    empty($user['numero_contact']) || empty($user['competence']) || $user['charte_cond'] == '0'
                    ) {
                        return $this->redirect(array('controller'=>'users','action'=>'form_register'));
                }
            }
        }
    }
    // suite de ton code ...
}
Default
, Il a répondu à ma question !

Merci lartak, au fait ce n'est pas une page d'inscription, je l'ai nommé juste comme ça