Laravel验证双嵌套

时间:2015-12-10 16:21:53

标签: php laravel laravel-validation

我遇到双嵌套验证问题

我的表单相当大,包含一些嵌套数据。其中两个领域:

{!! 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',

但如果我离开这个,那么下一个开发人员可能会想看看代码。

1 个答案:

答案 0 :(得分:3)

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

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

然后您可以在最初尝试时访问它们:

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

只需考虑构造它,就像在PHP中的关联数组中访问它一样。如果您在表单中传递具有此名称的参数:

address[country][printable_name]

然后使用普通的PHP,你可以像这样访问它:

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

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