我尝试使用此代码设置自定义验证消息,但没有效果 -
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 :(得分:-1)
您似乎混合了验证select()
和rules
。
messages
方法有3个参数:validate
,request
,rules
。
请试试这个:
messages
最新的流明版本总是返回JSON,请参阅documentation:
当验证失败时,
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响应。如果您没有构建仅发送JSON响应的无状态API,则应使用完整的Laravel框架。
有关$this->validate
的更新
Lumen的给定结果看起来像那样。
error
验证失败的每个项目都会在您的回复中输入一个条目。所以你的{"items":["Items are required"],"otheritems":["Otheritems are also required"]}
包需要是一个JSON数组。
自定义异常error
方法:
render