web-dev-qa-db-fra.com

Comment est-ce que je soulève correctement une erreur depuis un plugin?

J'empêche avec succès la sauvegarde de contenu dans certaines conditions, mais je ne parviens pas à gérer le message d'erreur à l'attention de l'utilisateur.

Le texte actuel est affiché , mais une mention supplémentaire indique que " L'enregistrement a échoué avec l'erreur suivante: ", alors rien ne suit. Cela semble redondant puisque le texte est affiché, mais je ne sais pas comment le maîtriser ni lui fournir les informations correctes pour qu'il ne semble pas incomplet à l'utilisateur.

public function onContentBeforeSave($context=null, $article=null, $isNew=0) {
    if($myTestFails){
        $errormsg = 'My error message while saving categories...';
        JError::raiseWarning(403, $errormsg);
        return false;
    }
}

Erreur

Mon message d'erreur lors de la sauvegarde des catégories ...

L'enregistrement a échoué avec l'erreur suivante:

7
GDP

En raison de "return false", vous êtes renvoyé au modèle. Le message "L'enregistrement a échoué avec l'erreur suivante:" s'affiche.

Si vous ne souhaitez pas revenir au modèle, vous pouvez rediriger l'utilisateur vers votre formulaire directement au lieu de saisir le modèle, puis le contrôleur et enfin votre vue de formulaire.

Mais comme vous vous écartez du modèle et du contrôleur, vous devez vous occuper de quelque chose, par exemple enregistrer ce que l'utilisateur a saisi dans votre formulaire pour l'afficher automatiquement dans le formulaire après la redirection. remplissez le formulaire à nouveau.

public function onContentBeforeSave($context=null, $article=null, $isNew=0) {
    if($myTestFails){
        $errormsg = 'My error message while saving categories...';
        $app = JFactory::getApplication();
        $app->setUserState(your-form-context-here, your-form-data-here);
        $app->enqueueMessage($errormsg);
        $app->redirect(JRoute::_(URL-to-your-form, false));
    }
}

Vous pouvez consulter les fonctions save () dans libraries/legacy/controller/form.php et libraries/legacy/model/admin.php. Il y a des informations utiles là-bas.

5
Hung Tran

Vous devriez probablement jeter une exception.

JError est déconseillé dans Joomla 3.0

throw new Exception(JText::_('COM_MYCOMP_ERROR_MESSAGE_NOT_FOUND'), 403);
3
Søren Beck Jensen