2016-05-15 42 views
1

我試試這個代碼設置自定義驗證消息,但沒有效果 -流明不能設置自定義的驗證規則

class TestController extends Controller 
{ 
    public function submit(Request $request) 
    { 
     $this->validate($request, 
      [ 
       'items' => 'required' 
      ], 
      [ 
       'items.required' => 'test test' 
      ] 
     ); 
    } 
} 

但在錯誤我得到這個響應 -

{ 
    "error": "The given data failed to pass validation." 
} 

什麼錯用這個代碼?

UPD:

早些時候,我編輯App\Exceptions\Handler把錯誤(API響應)在特定的格式 -

{ 
    "error": "123" 
} 

此代碼的原因,未顯示驗證錯誤 -

public function render($request, Exception $e) 
{ 
    return response([ 
     'error' => $e->getMessage() 
    ], 500); 
} 

我更新了Handler::render關於此目的的方法

public function render($request, Exception $e) { 
    $response = parent::render($request, $e); 

    if (isset($response->exception) and !empty($response->exception)) { 
     return response(['error' => $response->exception->getMessage()], 500); 
    } else { 
     return parent::render($request, $e); 
    } 
} 

但我想我需要改進這段代碼。

+0

可你只要把異常處理文件放回其原始狀態而您的修改?只是爲了確保:您的主要問題是它沒有顯示您的自定義錯誤消息,對不對? – codedge

+0

是的,我需要顯示我的\例外作爲{「錯誤」:}字段的迴應。但是在這裏也可以驗證錯誤。 – sharp

+0

請參閱https://stackoverflow.com/questions/37038229/laravel-5-2-validation-with-api/37725464#37725464 – tanerkuc

回答

-1

看來你混合驗證rulesmessagesvalidate方法需要3個參數:request,rules,messages

請試試這個:

public function submit(Request $request) 
{ 
    $rules = [ 
     'items' => 'required', 
     'otheritems' => 'required', 
    ]; 

    $messages = [ 
     'items.required' => 'Error: Please enter something.', 
     'otheritems.required' => 'Otheritems are also required', 
    ]; 

    $this->validate($request, $rules, $messages); 
} 

最新流明的版本總是給人回JSON,看到documentation

$this->validate助手將總是返回JSON有關錯誤消息的響應當驗證失敗時。如果您不構建僅發送JSON響應的無狀態API,則應使用完整的Laravel框架。

關於error更新: 由光通給出的結果看起來像這樣。

{"items":["Items are required"],"otheritems":["Otheritems are also required"]} 

驗證失敗的每件商品都會在您的回覆中獲得一個條目。所以你的包,需要是一個JSON數組。

自定義異常render方法:

public function render($request, Exception $e) 
{ 
    $response = parent::render($request, $e); 

    if ($response->getStatusCode() == 422) { 
     $renderResult = parent::render($request, $e); 
     $returnResult['error'] = json_decode($renderResult->content(), true); 
     $returnResult = json_encode($returnResult); 

     return new Response($returnResult, $response->getStatusCode()); 
    } else { 
     return parent::render($request, $e); 
    } 

} 
+0

我試試這段代碼,但沒有任何效果。在作爲第三參數的第一個例子中,我傳遞消息數組,不在那裏混合。 – sharp

+0

你可以顯示你的$ request->內容是什麼嗎? – codedge

+0

我編輯問題,添加解釋,也許你可以幫助改進結果代碼。非常感謝! – sharp