@DmitryRekunが言ったように、良い議論がここにあります。このすべてで考慮すべき重要な点は、どのタイプのエラーがあるかです。
エラーには2つのタイプがあります。
- 回復可能
- 回復不能。
私は次のように要約する傾向があります:
Can I still show the page that was requested, even though this error occurred?
今、私たちは何を扱っているかを知っています。あなたは何をするべきか?
エラーが回復不能な場合は、要求されたページに進むのではなく、エラーページにリダイレクトします。次のように簡単です。
throw new Exception(JText::_('COM_MYCOMP_ERROR_MESSAGE_NOT_FOUND'), 404);
Exception
は、メッセージとコードの2つのパラメーターを取るクラスです。シナリオに適合する場合は、HTTP応答コードを使用することをお勧めします。
エラーが回復可能な場合、リクエストしたページを表示したまま、エンドユーザーにメッセージを表示したいだけです。これは通常、アプリケーションのメッセージを「エンキュー」する必要があることを意味します。
JFactory::getApplication()->enqueueMessage($error, 'error');
enqueueMessage
エラーメッセージとメッセージタイプの2つのパラメーターを取ります。詳細はこちら(下部)。
少なくとも私にとってはかなり頻繁に発生する3番目の状況もあります。Joomlaは、さまざまなエラー(データベースクエリエラーなど)に対して例外をスローします。これは、Joomlaがこのエラーは回復不能であると考えていることを意味します。ただし、とにかく続行したい場合があります。(たとえば、拡張機能の更新時にテーブルを変更している場合、ALTER
クエリを実行するだけで、テーブルが以前に変更されている場合は例外がスローされます。)
その場合、try ... catchセクションで例外をスローする可能性のあるコードをラップする必要があります。
try {
// exception generating code
throw new Exception('Normally you would have other code that calls a class that throws the exception', 500);
} catch (Exception $e) {
$msg = $e->getMessage(); // Returns "Normally you would have other code...
$code = $e->getCode(); // Returns '500';
JFactory::getApplication()->enqueueMessage($msg, 'error'); // commonly to still display that error
}
あなたがしていることは、回復不可能なエラーを「キャッチ」し、システムに強制的に回復させ、要求されたページを表示し続けることに注意してください。
これをすべて追加すると、ケースは回復不能なエラーになるはずです。(後で「falseを返す」ので、これを知っています。そのため、おそらく続行する予定はなく、機能をあきらめます。)
したがって、これを次のように書き換えます。
// Check for errors.
if (count($errors = $this->get('Errors')))
{
throw new Exception(implode("\n", $errors), 500);
return false; // you can remove this too, technically since the exception will take you out of this function.
}