我正在构建一个多步骤表单输入(“向导”),其中用户通过多个表单输入视图输入实体的部分。在每一步,我只想验证输入数据(而不是整个实体)。
我的问题是如何将error()与字段名称数组一起使用。
该模型有12个具有验证规则的字段。我想在一个控制器操作中验证其中的3个。
所以,在这个控制器动作中,我得到三个输入
$thedata = $this->request->data;
这导致:
['number' => '102','color' => 'blue','size' => 'large']
然后我创建一个字段名称数组:
$thearray = array_keys($thedata);
这导致:
[
(int) 0 => 'number',
(int) 1 => 'color',
(int) 2 => 'size']
现在我想检查这三个字段是否有错误。
$errors = $this->Items->newEntity($this->request->data)->errors($thearray);
这导致检查定义了验证的所有12个字段,而不仅仅是数组中的三个字段,并且验证失败(它获取实体中的所有错误)。
如果我只定义一个字段来检查它是否有效:
$errors = $this->Items->newEntity($this->request->data)->errors('number');
这只能正确验证字段'number'并产生所需的结果。
但是,传递一个字段数组而不是一个带有单个字段名的字符串会验证需要验证的所有字段。
另外,我尝试将数组硬编码为errors()的参数:
$errors = $this->Items->newEntity($this->request->data)->errors(['number','color']);
这也会检查表定义中的所有12个字段,而不仅仅是这两个字段。
所以问题是,如果你只想检查两个或三个特定字段,你如何准备数组并将其传递给errors()方法?
提前感谢任何建议! d
谢谢
答案 0 :(得分:0)
根据the docs errors
可以采用$field
参数,但不是数组。如果要验证多个字段而不验证所有字段,可以循环$thearray
。
$item = $this->Items->newEntity($this->request->data);
foreach ($thearray as $error) {
$errors[] = $item->errors($error);
}