2013-01-18 19 views
0

我有我的控制器的操作方法,此代碼:Zend框架2 - 爲響應最好方法錯誤消息

$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()方法,但我不知道它是否適用於此。

在此先感謝。

回答

2

您必須使用適當的HTTP狀態代碼與正文可選包含錯誤描述。
在這種情況下代碼是401 Unauthorized
實際上,401是不合適的,因爲它需要WWW-Authenticate頭。應該使用403禁止。

Additionaly我會建議你瞭解:

  1. JSON格式,原生的JavaScript和支持ZF2 MVC與JSON視圖策略。
  2. RESTful API。如果它不會被使用,它仍然會讓你知道如何正確使用HTTP。您可能想要看這blog post and comments
  3. 看看這個ietf草案:Problem Details for HTTP APIs這份草案目前沒有任何標準,但它可以給你一些想法。

更新:

我覺得我應該補充澄清的答案是不完整的。 除了狀態碼,您通常需要生成具有額外詳細信息的響應主體,可能與上述草案一致。
由於Zf2非常靈活,所以沒有一種方法可以做某些事情。在其中一種可能的方法中,您需要監聽器MvcEvent::EVENT_DISPATCH來檢測未經身份驗證/未經授權的訪問,並觸發事件MvcEvent::EVENT_DISPATCH_ERROR
查看BjyAuthorize模塊。你可以使用它。

而且您需要聽衆MvcEvent::EVENT_DISPATCH_ERROR才能準備好正確的答案。
You can use this as example至少應將ViewModel替換爲正確填充的JsonModel。您還需要註冊json查看策略才能使其工作。

+1

+1您是否建議與ViewJsonStrategy一起使用HTTP狀態代碼而不是自定義JSON消息來傳達錯誤?我希望我們能夠從ZF2創作者那裏得到這個意圖的確認。 – tishma

+0

我建議錯誤的主要指標是HTTP狀態碼。並且可能會出現響應主體,並提供該錯誤的詳細信息。但是,如果我們以問題爲例,HTTP狀態代碼就是他所需要的。 – Xerkus