【发布时间】:2023-01-09 08:00:53
【问题描述】:
接下来是我的 FormRequest:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreFruitRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|string|min:3',
'carbohydrates' => 'required|numeric|gte:0',
'protein' => 'required|numeric|gte:0',
'fat' => 'required|numeric|gte:0',
'calories' => 'required|integer|numeric|gte:0',
'sugar' => 'required|numeric|gte:0',
];
}
/**
* Error Messages
*
* @return array
*/
public function messages() :array
{
return [
'carbohydrates.gte' => 'Nutrients cannot be negative',
'protein.gte' => 'Nutrients cannot be negative',
'fat.gte' => 'Nutrients cannot be negative',
'calories.gte' => 'Nutrients cannot be negative',
'sugar.gte' => 'Nutrients cannot be negative',
];
}
}
验证规则工作正常,但是当我使用错误的值(负数)发出请求时,验证不会将这些消息返回给控制器。因此,我的 API 将主刀片页面作为错误返回。
我的代码中有什么不正确的地方?或者,我需要在任何地方进行一些调整吗?
控制器(作为@NickSdot 的答案):
/**
* Store a newly created resource in storage.
*
* @param StoreFruitRequest $request
* @return JsonResponse
*/
public function store(StoreFruitRequest $request)
{
return response()->json(Fruit::create($request->all()) ?? "Cannot create fruit $request->name");
}
【问题讨论】:
-
控制器看起来如何?
-
gte:field 验证的字段必须大于或等于给定的字段。但是你传递的是 0,这不是一个字段。我认为你应该使用
min:0规则,它接受一个值 laravel.com/docs/9.x/validation#rule-min -
我试着改变gte:0到分钟:0结果是一样的——消息没有被使用。
标签: laravel validation request message