1

J'ai une application où l'utilisateur arrive à une page à partir d'un lien contenant une valeur d'ID (par exemple:/students/view/42). Dans mon code, j'utilise Zend_Filter_Input, comme ceci:Quel est le moyen le plus sûr de gérer les entrées invalides dans une application Zend?

$input = new Zend_Filter_Input(array(), array(
    'id' => new Zend_Validate_Db_RecordExists(array (
     'table' => 'Students', 
     'field' => 'id' 
    ) 
), $this->_request->getParams()); 
if (!$input->isValid()) { 
    // ??? 
} 

Je ne pense pas qu'il y ait quoi que ce soit bouleversant passe jusqu'à ce point. Cependant, ce que je ne comprends pas est ce qu'il faut faire si la valeur de l'identifiant est invalide.

Dans son livre Zend Framework: un guide du débutant, Vikram Vaswani demande à l'utilisateur de lancer une exception (Zend_Controller_Action_Exception ('Page Not Found', 404)). Est-ce la meilleure façon de gérer cela, et si non, quelles autres options sont disponibles?

Répondre

2

Vous devez rediriger l'utilisateur vers votre page avec la description de l'erreur 404 (vous devez utiliser ErrorController pour le rendu des messages d'exception) ou vers la page spécifique avec le message qu'un tel étudiant n'existe pas. Il suffit de lancer l'exception et de rendre la page d'erreur dans votre ErrorController.

Vous pouvez le faire comme ceci:

$this->getResponse()->setHttpResponseCode(404); 

ou

throw new Zend_Controller_Action_Exception('This page does not exist', 404); 

La classe ErrorController typique est la suivante:

class ErrorController extends Zend_Controller_Action 
{ 
    public function errorAction() 
    { 
     $errors = $this->_getParam('error_handler'); 

     switch ($errors->type) { 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 
       // 404 error -- controller or action not found 
       $this->getResponse() 
        ->setRawHeader('HTTP/1.1 404 Not Found'); 

       // ... get some output to display... 
       break; 
      default: 
       // application error; display error page, but don't 
       // change status code 
       break; 
     } 
    } 
} 
+0

cool. Maintenant, pour la question suivante: comment je fais ça? J'ai essayé le code suivant, mais cela n'a pas fonctionné: $ this -> _ response-> clearBody(); $ this -> _ response-> clearHeaders(); $ this -> _ response-> setHttpResponseCode (404); – blainarmstrong

+0

Groovy! Cela a fonctionné parfaitement. Je vous remercie! – blainarmstrong

Questions connexes