我的客户要求如下:
<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需要验证器,所以我回到了同样的问题......虽然也许有办法手动完成这个?
我理想的解决方案是找到关联数组语法,如果确实存在的话?
答案 0 :(得分:1)
我不确定正确的方法 但我的想法是这样的
public function rules($inputs)
{
$rules = [];
foreach ($inputs as $key => $val) {
if ( strpos($key, "intro") === 0 ){
$rules[$key] = 'required|max:100';
}
}
return $rules;
}
答案 1 :(得分:1)
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;
}
答案 2 :(得分:0)
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>