如何使用请求验证 Laravel 中的数组?
Posted
技术标签:
【中文标题】如何使用请求验证 Laravel 中的数组?【英文标题】:How to validate array in Laravel with Request? 【发布时间】:2019-12-31 14:46:53 【问题描述】:我把这个JSON
的数据发给Laravel
:
[
"name":"...", "description": "...",
"name":"...", "description": "..."
]
我有一个 StoreRequest 类扩展 FormRequest
:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreRequest extends FormRequest
public function authorize()
return true;
public function rules()
return [
'name' => 'required|string|min:1|max:255',
'description' => 'nullable|string|max:65535'
];
在我的控制器中,我有这段代码,但它不适用于数组:
public function import(StoreRequest $request)
$item = MyModel::create($request);
return Response::HTTP_OK;
我在 Request rules() 中找到了这个处理数组的解决方案:
public function rules()
return [
'name' => 'required|string|min:1|max:255',
'name.*' => 'required|string|min:1|max:255',
'description' => 'nullable|string|max:65535'
'description.*' => 'nullable|string|max:65535'
];
如何更新StoreRequest
和/或import()
代码以避免rules()
中的重复行?
【问题讨论】:
How to write validation rule for JSON laravel?的可能重复 是的,对不起。我忽略了[]
并感到困惑。请查看链接的问题和我的答案。
@Namoshek:我认为这不是重复的......在这个链接的站点中,他们使用我不使用的$validator = Validator::make()
,因为我有一个 StoreRequest 类。或者如果这是同一件事,那么我不明白如何将这两者结合使用。
rules()
方法返回的规则用于创建Validator
,如另一个问题中所述。都是一样的东西,只是抽象而已……
基本上,表单请求类(如您的StoreRequest
)用于从控制器中提取逻辑。您也可以使用普通的Request
对象和控制器中的Validator
执行完全相同的操作。仍然建议使用表单请求以使您的控制器小而简单。
【参考方案1】:
由于您有一组数据,您需要将*
放在首位:
public function rules()
return [
'*.name' => 'required|string|min:1|max:255',
'*.description' => 'nullable|string|max:65535',
];
【讨论】:
这也适用于单个(非数组)对象吗? 不,这需要没有*.
的规则。你不能在没有重复的情况下在一个规则集中做这两个。恕我直言,最好的方法是始终发送一个数组或使用两个不同的 FormRequest,因为它们正在做两件不同的事情(创建一条记录与创建多条记录)。以上是关于如何使用请求验证 Laravel 中的数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何使唯一数组的自定义验证规则依赖于其他字段 laravel