Laravel 验证双重嵌套

Laravel validation double nested

我在双重嵌套验证方面遇到问题

我的表单相当大并且包含一些嵌套数据。其中两个字段:

{!! Form::text('address[city]', null, [] !!}
{!! Form::text('address[country[printable_name]]', null, [] )) !!}

例如这个有效:

'address.city' => 'required|max:255',

但是

'address.country.printable_name' => 'required|max:255|country

抛出“address.country.printable 名称字段是必需的。”,即使它具有有效的国家/地区。

如果我尝试使用 $request->all() 打印所有内容,我会得到以下信息:

...,"address":{"city":"Maribor","country[printable_name":"Slovenia"},...

所以printable_name之后少了]

如果我尝试打印

$request->input('address.country.printable_name')

我没有得到任何东西,但是当我尝试这个时它起作用了:

$request->input('address')["country[printable_name"]

我是不是做错了什么,Laravel 不支持这个功能还是一个错误?无论哪种方式,我怎样才能让它发挥作用?

解决方法是这样

'boat.country[printable_name' => 'required|max:255',

但如果我离开这个,下一个查看代码的开发人员可能会想要踢我的屁股。

如果你想在请求参数中嵌套数组项,你应该这样做:

{!! Form::text('address[country][printable_name]', null, []) !!}

然后您就可以像最初尝试的那样访问它们了:

$request->input('address.country.printable_name')

只需考虑将其构造为在 PHP 中的关联数组中访问它即可。如果您在表单中传递具有此名称的参数:

address[country][printable_name]

然后使用普通 PHP 你会像这样访问它:

$_REQUEST['address']['country']['printable_name'];

以上示例说明了等效结构。