2010-09-24 18 views
2

Disons que j'ai un modèle de contrôleur avec une fonction avant comme si ...Comment arrêter l'exécution d'une requête dans Kohana?

public function before() 
    { 
    parent::before(); 
    if ($this->request === Request::instance()) 
    { 
     // its a main request, throw an exception or redirect 
     Request::instance()->redirect('/'); 
    } 
    else 
    { 
     // ok 
    } 
    } 

Mais disons que je ne veux pas rediriger, je veux arrêter le flux de demande, et ne rien faire.

Une exception le fait-elle? Y at-il un moyen simple, comme Request::die();?

EDIT :: En fait, je ne veux pas arrêter le flux de requêtes, j'empêche simplement ce contrôleur de faire quoi que ce soit. Il est probable que ce contrôleur a été appelé à partir d'un autre contrôleur, et je veux transmettre le contrôle au contrôleur appelant.

Merci!

+0

Qu'est-ce qui ne va pas avec 'die()'? – Tesserex

+0

"Ne rien faire" comme complètement arrêter et ne rien afficher? Comme dit Tesserex, 'die' – Fanis

+0

Rien à redire. Donc, à l'intérieur de l'instruction if, vous n'avez qu'à mettre die(); ? Que se passe-t-il s'il y a d'autres appels de sous-contrôleur après l'appel de ce sous-contrôleur? Cela arrêtera-t-il seulement l'action de ce contrôleur, ou tout le script? Je veux seulement arrêter ce contrôleur, mais renvoyer le contrôle au contrôleur appelant s'il y en a un. – brennanag

Répondre

1

1.Utiliser exceptions (pas encore testé):

try 
(
    Request->instance()->execute(); 
} 
catch (MyRequest_Exception $e) 
{ 
    // do what you want 
} 

echo Request->instance()->send_headers->response(); 

// somewhere in before() 
if ($error) 
{ 
    throw new MyRequest_Exception($errortext); 
} 
  1. Modifier le nom d'action:

    $ this-> request-> action ('oubli'); // redirige vers une action "oubli" qui ne fait rien

+0

En ce moment, je n'appelle qu'une fausse action, mais je veux utiliser des exceptions, donc je choisis ceci. Si je trouve que cela ne fonctionne pas, je reviendrai et mettrai à jour cela. – brennanag

0

Vous pouvez définir une variable de classe before() disent:

$this->execute = false; 

Puis dans votre action:

public function action_example() 
{ 
    if (!$this->execute) return; 
    // etc 
}