Laravel - 自定义请求中的关联数组验证
Posted
技术标签:
【中文标题】Laravel - 自定义请求中的关联数组验证【英文标题】:Laravel - associative Array validation in a custom request 【发布时间】:2017-06-01 09:10:30 【问题描述】:我有一个客户要求如下:
<textarea name="intro[en]"></textarea>
<textarea name="intro[fr]"></textarea>
<textarea name="intro[de]"></textarea>
我正在使用自定义请求对其进行验证:
class UpdateProfileRequest extends Request
public function authorize()
return true;
public function rules()
return [
'intro.*' => 'required|max:100'
];
验证器不工作。我认为这是因为 .* 仅适用于编号数组,而不适用于关联数组?
我不知道该怎么做。
有没有办法通过这样的自定义请求来做到这一点?如果是,语法是什么?
否则,我该怎么办。我已经在控制器方法中编写了一些自定义代码,如下所示:
$hasIntro = false;
$hasBio = false;
foreach($request->get('intro') as $language => $localIntro)
if(!empty($request->get('intro')[$language]))
$hasIntro = true;
if(!$hasIntro or !$hasBio)
return redirect()->back()->withErrors('You must enter at least 1 Bio and 1 Intro');
我认为这可能是解决此问题的一种手动方式。虽然我相信 withErrors 需要一个验证器,所以我又回到了同样的问题......虽然也许有办法手动做到这一点?
我理想的解决方案是找到关联数组语法,如果确实存在的话?
【问题讨论】:
在规则中使用 foreach 循环 【参考方案1】:我不确定正确的方法 但我的想法是这样的
public function rules($inputs)
$rules = [];
foreach ($inputs as $key => $val)
if ( strpos($key, "intro") === 0 )
$rules[$key] = 'required|max:100';
return $rules;
【讨论】:
【参考方案2】:class UpdateProfileRequest extends Request
/**
* 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 [
'intro.*' => 'required|max:100'
];
/**
* @param Validator $validator
*
* @return mixed
*/
protected function formatErrors(Validator $validator)
return $validator->errors()->all();
您有以下相同的名称,因此请确保它不同或删除一个,更改名称。
<textarea name="intro[fr]"></textarea>
<textarea name="intro[fr]"></textarea>
【讨论】:
这和我发的差不多?【参考方案3】:public function rules()
$rules = [];
$intro = $this->request->get('intro');
if (!empty($intro))
foreach ($intro as $index => $doc)
$rules[sprintf('intro.%d', $index)] = 'required|max:100';
return $rules;
【讨论】:
以上是关于Laravel - 自定义请求中的关联数组验证的主要内容,如果未能解决你的问题,请参考以下文章
如何使用从 laravel 中的数组中获取的各种术语进行 mysql 关联查询
我可以通过 Laravel 5.1 中的自定义请求对象验证后恢复输入字段值吗?