まず、あなたのアプローチSentry2UserRepository
は悪くないと思います。大丈夫ですIMO
。
質問 1: エラーをコントローラーに戻して、何を表示すればよいかを知る通常/適切な方法は何ですか?
まあ、IMO、アプリケーションに応じて、例外を処理する方法を決定する必要があります。あなたは言及so that it will know what to display
しましたが、この場合、例外が発生した後に次のアクションを実行するために例外から必要な情報と方法によって異なります。エラーメッセージが必要な場合は、を返すことができるreturn $e->getMessage()
ので、実際に何が起こったのかを正確に知ることができます. これを行うには多くの方法があります。たとえば、単一の を使用しcatch
ます。
try{
// ...
}
catch( Exception $e )
{
if ($e instanceof UserNotFoundException) {
// it's an instance of UserNotFoundException, return accordingly
}
elseif ($e instanceof SomethinElseException) {
// it's an instance of SomethinElseException, return accordingly
}
}
また、さまざまなカスタム例外クラスを使用でき、複数のcatch
ブロックを使用できます。
class AnException extends Exception
{
public function customErrorMessage()
{
return `AnException occurred!`
}
}
class AnotherException extends Exception
{
public function customErrorMessage()
{
return `AnotherException occurred!`
}
}
catch
次に、複数のブロックを使用してキャッチします。
try
{
// ...
}
catch(AnException $e)
{
return $e->customErrorMessage();
}
catch(AnotherException $e)
{
return $e->customErrorMessage();
}
catch(Exception $e)
{
return $e->getMessage();
}
質問 2: 例外/エラー用の標準の json API 形式はありますか?
質問 3: Web UI が内部 JsonApi を使用することは適切な方法ですか? それとも、WebUi コントローラーで Api と同じリポジトリをクエリすることで、現時点で正しい方法で処理を行っていますか?
実際、私はそのようなことについて知りませんapi
。あなたは正しくやっています、IMO。それは、あなたがこれを持っているからです
class Sentry2UserRepository implements UserInterface {
public function findById($id) {
try {
return Sentry::findUserById($id);
}
catch (\Cartalyst\Sentry\Users\UserNotFoundException $e) {
// Do something here
return false;
}
}
}
したがって、コントローラーに次のようなコードを書くことができます
if(findById(5)) {
// found and dump it to the view
}
else {
// show "Not Found !", false will be back only for UserNotFoundException
}
しかし、あなたがこれをあなたのUserNotFoundException
キャッチに持っていたら
return $e; // or anything else (maybe an array containing status and message)
次に、この単純なコードを書くことはできません
if(findById(5)) {
// found and dump it to the view
}
配列のオブジェクト oe に対してis ステートメントが true になるため、$e
このような somrthing を使用して、もう一度確認する必要があります。
$result = findById(5);
if($result && $result->code && $result->code === 0) {
// something according to code
}
または多分、このようなもの
if($result && $result->code) {
// error happened, now determine the code
switch($result->code){
case 0:
// show message
break;
case 1:
// show message
break;
}
}
それで、IMO、なぜ、アプリケーションでどのエラーが発生したのか、データを取得したか取得しなかったかを示すだけでなく、ユーザーに表示する必要があります。シンプルじゃない?キスするだけ。これはあくまで私の意見です、それだけです。