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


7

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

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

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

エラー

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

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


Joomlaのどのバージョンですか?
セーレンベックジェンセン

バージョンV3.3-コードはJoomlaのコンテンツプラグインからコピーされました
GDP

回答:


5

「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()関数を確認できます。そこに役立つ情報があります。


私はこれが好きですが、これはプラグインイベントであるため、「私の」フォームではないため、「フォーム」情報をどこから参照したかを制御できません。
GDP

3

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

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

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

あなたはエラーをスローする方法について正しいですが、これが実際に
@GDP

Joomlaはコンテンツプラグインで使用した方法を使用しているので、それが私の出発点でした。コンテンツプラグインからの例外の影響について知りたい。(今日は新しいPCなので、1〜2日は試せません)。
GDP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.