2016-05-15 97 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