web-dev-qa-db-ja.com

プラグイン内からエラーを適切に発生させるにはどうすればよいですか?

特定の条件下で一部のコンテンツが保存されないようにしていますが、ユーザーへのエラーメッセージの処理に問題があります。

実際のテキストはdoesと表示されますが、「Saveが次のエラーで失敗しました:」、その後は何も続きません。テキストが表示されるので冗長なようですが、それを抑制する方法がわからないか、ユーザーに不完全に表示されないように正しい情報を提供します。

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

エラー

カテゴリの保存中のエラーメッセージ...

保存は次のエラーで失敗しました:

7
GDP

「falseを返す」ため、モデルに戻るため、「次のエラーで保存に失敗しました」というメッセージが表示されます。

モデルに戻りたくない場合は、モデル、コントローラー、そして最後にフォームビューを入力する代わりに、ユーザーをフォームに直接リダイレクトすることができます。

ただし、モデルとコントローラーから離れるので、リダイレクト後に自動的にフォームに表示するためにフォームに入力した内容を保存するなど、自分で注意する必要があることがあります。これにより、ユーザーはもう一度フォームに記入してください。

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));
    }
}

Libraries/legacy/controller/form.phpおよびlibraries/legacy/model/admin.phpのsave()関数を確認できます。そこで役立つ情報があります。

5
Hung Tran

おそらく例外をスローするべきです。

JErrorはJoomla 3.0で廃止されました

throw new Exception(JText::_('COM_MYCOMP_ERROR_MESSAGE_NOT_FOUND'), 403);
3