0

コントローラーの Action メソッドに次のコードがあります。

    $session = new Container('user');
    $response = $this->getResponse();
    if (!$session->offsetExists('userId')) {
      return $response->setContent(-1);
    }
    else //Correct response code

私のビューでは、jquery/javascript と ajax を使用してエラーを検出し、うまく機能します。

    function anyfunction(drawId) {
      $.post('controller/action', '&param1=X', function(data) {
        if (data == -1) document.error.innetHTML = 'user no logued';
        else //correct response
      }
    }

コントローラーからメッセージを送信するのが好きなので、メソッドを変更します。ビューが応答がエラーであることを認識できるように、インジケーターを送信する必要があります。$response->setMetaData() メソッドを使用することを考えましたが、これが役立つかどうかはわかりません。

前もって感謝します。

4

1 に答える 1

2

必要に応じてエラーの説明を含む本文と共に、適切な HTTP ステータス コードを使用する必要があります。
この場合コードは401 Unauthorized
ですが 、実際には 401 は WWW-Authenticate ヘッダーを必要とするため適切ではありません。その場合は 403 Forbidden を使用する必要があります。

さらに、次のことを学ぶことをお勧めします。

  1. JSON 形式で、javascript のネイティブであり、json ビュー戦略を使用して ZF2 MVC でサポートされています。
  2. RESTful API。使用しない場合でも、HTTP を適切に使用する方法がわかります。このブログ投稿とコメントを読むことをお勧めします
  3. この ietf ドラフトを見てください: HTTP API の問題の詳細このドラフトは、現時点では標準ではありませんが、いくつかのアイデアを得ることができます。

アップデート:

回答が不完全であるため、説明を追加する必要があるように感じます。ステータス コードに加えて、通常、追加の詳細を含む応答本文を生成する必要があります。これは、上記のドラフトに従っている場合があります。
Zf2 は非常に柔軟であるため、何かを行うための決まった方法はありません。MvcEvent::EVENT_DISPATCH可能なアプローチの 1つでは、認証されていない/許可されていないアクセスを検出し、MvcEvent::EVENT_DISPATCH_ERRORイベントをトリガーするためにリスナーが必要になります。
BjyAuthorize モジュールを見てください。あなたはそれを使用することができます。

MvcEvent::EVENT_DISPATCH_ERRORまた、適切な応答を準備するには、リスナーが必要です。
これを例として使用できます少なくとも ViewModel は、適切に設定された JsonModel に置き換える必要があります。また、それを機能させるには、登録されたjsonビュー戦略が必要です。

于 2013-01-19T06:39:16.953 に答える