2010-07-29 3 views
2
function Home() 
{ 
    parent::Public_Controller(); 
    $this->load->library('survey_form_processing'); 
    //Load Helpers 
    $this->load->helper('form'); 
    $this->load->library('Paypal_Lib'); 
    $this->lang->load('userlib'); 
    $this->load->model('home_model'); 
    if($foo == true){ 
     redirect('home'); 
    } 
} 

Ceci est ma construction du contrôleur "Home". Si une valeur == true, comment puis-je rediriger vers la fonction d'index? Lorsque j'essaie ceci, j'obtiens une erreur ...Codeigniter: Rediriger à partir de la construction dans le contrôleur

Est-il possible de rediriger vers la fonction d'index?

P.S. Je suis un php/CI noob!

+0

Quelle erreur obtenez-vous? Qu'essayez-vous d'accomplir? (peut-être que vous n'êtes pas sur le bon chemin) Je n'ai jamais essayé ça. –

+0

J'essaye de bloquer les utilisateurs hors des pages si leur abonnement s'épuise. Si $ expiration_date> $ todays_date, redirigez-vous vers l'index. –

+0

Et je viens d'obtenir une erreur de navigateur - dire qu'il y a trop de redirections. –

Répondre

1

Sur la base des informations fournies, je dirais que vous êtes coincé dans une boucle de redirection infinie:

  • L'utilisateur accède à la page d'accueil
  • Dans le constructeur, il vérifie l'abonnement et si cela échoue, il redirige vers Accueil
  • ==> boucle!

Vous pouvez avoir des solutions:

  • détectons que la méthode appelée est index et dans ce cas, ne pas redirigés (vous pouvez utiliser la fonction router->fetch_method()
  • Effectuez la redirection vers un autre contrôleur
  • Ne pas effectuer la redirection dans le constructeur mais dans chaque fonction Il suffit de placer le contrôle d'abonnement dans une fonction et de l'appeler au début de chaque fonction

Le plus facile serait probablement de changer votre état. De

if($foo == true) 

Pour

if($foo == true && router->fetch_method() != 'index') 

Alors que si CodeIgniter tente d'atteindre l'indice ne sera pas redirigé à nouveau.

(Je n'ai pas de serveur php ici donc je ne peux pas vérifier la valeur exacte). Mais l'idée est là.

+0

Très proche. Maintenant que ça marche, je ne sais pas si c'est la meilleure méthode pour moi, mais tu as répondu à la question! –

+0

Si j'étais vous, je ferais un contrôleur par défaut, accessible à tous, le "Home" et tout le contenu qui nécessite un abonnement devrait être sous un autre contrôleur.Vous ajoutez votre redirection uniquement sur le second, et vous redirigez vers le premier. –

Questions connexes