Laravel Lumen无法设置自定义验证规则

Laravel Lumen无法设置自定义验证规则,laravel,lumen,Laravel,Lumen,我尝试用这段代码设置自定义验证消息,但没有效果- class TestController extends Controller { public function submit(Request $request) { $this->validate($request, [ 'items' => 'required' ], [

我尝试用这段代码设置自定义验证消息,但没有效果-

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);
    } 
}

但我认为我需要改进这段代码。

您似乎将验证规则和消息混为一谈。 validate方法采用3个参数:请求、规则和消息

请试试这个:

公共函数submitRequest$请求 { $rules=[ '项目'=>'必需', 'otheritems'=>'required', ]; $messages=[ 'items.required'=>'错误:请输入一些内容。“, '其他项。必需'=>'其他项也是必需的', ]; $this->验证$request、$rules、$messages; } 最新的Lumen版本始终返回JSON,请参阅:

验证失败时,$this->validate助手将始终返回JSON响应和相关错误消息。如果您没有构建只发送JSON响应的无状态API,那么应该使用完整的Laravel框架

有关错误的更新: Lumen给出的结果是这样的

{items:[项目是必需的],otheritems:[其他项目也是必需的]} 验证失败的每个项目都会在响应中获得一个条目。因此,您的错误包需要是一个JSON数组

自定义异常渲染方法:

公共函数呈现$request,异常$e { $response=parent::render$request,$e; 如果$response->getStatusCode==422{ $renderResult=parent::render$request,$e; $returnResult['error']=json_decode$renderResult->content,true; $returnResult=json_编码$returnResult; 返回新的响应$returnResult,$Response->getStatusCode; }否则{ 返回父级::render$request,$e; } }
您似乎混合了验证规则和消息。 validate方法采用3个参数:请求、规则和消息

请试试这个:

公共函数submitRequest$请求 { $rules=[ '项目'=>'必需', 'otheritems'=>'required', ]; $messages=[ 'items.required'=>'错误:请输入一些内容。“, '其他项。必需'=>'其他项也是必需的', ]; $this->验证$request、$rules、$messages; } 最新的Lumen版本始终返回JSON,请参阅:

验证失败时,$this->validate助手将始终返回JSON响应和相关错误消息。如果您没有构建只发送JSON响应的无状态API,那么应该使用完整的Laravel框架

有关错误的更新: Lumen给出的结果是这样的

{items:[项目是必需的],otheritems:[其他项目也是必需的]} 验证失败的每个项目都会在响应中获得一个条目。因此,您的错误包需要是一个JSON数组

自定义异常渲染方法:

公共函数呈现$request,异常$e { $response=parent::render$request,$e; 如果$response->getStatusCode==422{ $renderResult=parent::render$request,$e; $returnResult['error']=json_decode$renderResult->content,true; $returnResult=json_编码$returnResult; 返回新的响应$returnResult,$Response->getStatusCode; }否则{ 返回父级::render$request,$e; } }
我尝试了这个代码,但没有效果。在第一个示例中,作为第三个参数,我传递消息数组,没有混合。我编辑问题,添加解释,也许您可以帮助改进生成的代码。非常感谢@你是建立一个无状态的API还是一个网站?它不是一个应用程序,请考虑使用LaaVel.否则,我将检查如何在您的响应中返回错误。@sharp我使用自定义异常呈现方法更新了我的帖子。这有用吗?我尝试了这个代码,但没有效果。在第一个示例中,作为第三个参数,我传递消息数组,没有混合。我编辑问题,添加解释,也许您可以帮助改进生成的代码。非常感谢@你是建立一个无状态的API还是一个网站?它不是一个应用程序,请考虑使用LaaVel.否则,我将检查如何在您的响应中返回错误。@sharp我使用自定义异常呈现方法更新了我的帖子。这有帮助吗?你能不做修改就把异常句柄文件恢复到原来的状态吗?只是为了确保:您的主要问题是它没有显示您的自定义错误消息,对吗?是的,我需要将我的\异常显示为{error:}字段作为响应。但是把验证错误也放在那里也很好。看到了吗?你能不做修改就把异常句柄文件放回原来的状态吗?只是为了确保:您的主要问题是它没有显示您的自定义错误消息,对吗?是的,我需要将我的\异常显示为{error:}字段作为响应。但是很好 d将验证错误也放在那里。请参阅