如何在 laravel 8 中为 API 返回验证规则和消息作为 JSON

Posted

技术标签:

【中文标题】如何在 laravel 8 中为 API 返回验证规则和消息作为 JSON【英文标题】:how return validation rules and messages as JSON for API in laravel 8 【发布时间】:2021-06-21 11:45:45 【问题描述】:

我正在构建一个 API,我想通过表单请求验证输入字段。

我不知道如何在控制器的 store 方法中以 json 格式返回消息和规则

我希望在字段重复或为空时进行验证。

当返回 $message$rules json 和 return response()->json($message) 时会出错并说:TypeErrors : Arguments 2 passed , must be of the type array , object given

我检查了这个链接,但它没有帮助https://laracasts.com/discuss/channels/laravel/how-to-send-validation-errors-as-json-to-view

我的 StoreCategoryRequest :


    public function rules()
    

        $rules =  [
            'parent_id' => ['sometimes', 'required' , 'numeric'],
            'description'=>['required','max:500'],
            'status'=>['required'],
        ];

        if($this->method() == 'POST')
            $rules['title'] = ['required','max:20', Rule::unique('categories')];
          else
            $rules['title'] = ['required','max:20' ,Rule::unique('categories')->ignore($this->category['id'])];
          

           return $rules;
    




    public function messages()
    
        $message=[
            'title.unique'=>'عنوان نباید تکراری باشد',
            'title.required'=>'لطفا عنوان را وارد کنید',
            'title.max'=>'تعداد حروف عنوان نباید بیشتر از ۲۰ باشد',

            'description.required'=>'لطفا توضیحات را وارد کنید',
            'description.max'=>'تعداد حروف توضیحات نباید بیشتر از ۵۰۰ باشد',

            'status.required'=>'لطفا وضعیت مورد نظر خود را انتخاب کنید' ,


        ];

        return array_merge(parent::messages(), $message);

    



这是我在 CategoryController 中的存储方法:

public function store(StoreCategoryRequest $request)
    

        $validatedData = $request->all();
        $category = Category::create($validatedData);


        return response()->json([
        "success" => true,
        "message" => "successful",
        "data" => $category
        ]);

    

谢谢你:***

【问题讨论】:

【参考方案1】:

不必将验证消息传递给 JSON 响应。当验证失败时,Laravel 会自动返回带有错误的响应,并且不会继续执行控制器中的代码。

有预定义的验证错误消息也可以本地化。您可以在 resources/lang/en/validation.php 中找到它们 - 考虑将您的自定义消息也放在那里。

要以 JSON 格式检索验证错误,请在请求的标头中添加键 Accept,其值为 application/json

【讨论】:

以上是关于如何在 laravel 8 中为 API 返回验证规则和消息作为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中为api后端返回JSON数据之前定义数据类型

Laravel 8 API 调用未正确返回验证错误

laravel 8.x 测试 api 返回错误的状态码

如何使用 Laravel API 身份验证返回未授权

验证失败后如何在 Laravel 8(行)中返回输入

如何在 JWT API - Laravel 5.8 上验证用户群?