【问题标题】:Validaing Multiple, Specific Form Fields with errors()使用错误()验证多个特定的表单字段
【发布时间】:2017-10-20 16:40:05
【问题描述】:

我正在构建一个多步骤表单输入(“向导”),其中用户在多个表单输入视图上输入实体的一部分。在每一步,我只想验证输入数据(而不是整个实体)。

我的问题是如何将 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');

这仅正确验证字段“数字”并产生所需的结果。

但是,传递字段数组而不是具有单个字段名称的字符串会验证所有需要验证的字段。

另外,我尝试将数组硬编码为 errors() 的参数:

$errors =  $this->Items->newEntity($this->request->data)->errors(['number','color']);

这还会检查表定义中的所有 12 个字段,而不仅仅是这两个。

所以问题是,如果您只想检查两个或三个特定字段,如何准备数组并将其传递给 errors() 方法?

提前感谢您的任何建议! D

感谢

【问题讨论】:

    标签: cakephp-3.0


    【解决方案1】:

    根据the docs errors 可以接受$field 参数,但不能接受数组。如果您想验证多个字段而不验证所有字段,则可以循环 $thearray

    $item = $this->Items->newEntity($this->request->data);
    
    foreach ($thearray as $error) {
        $errors[] = $item->errors($error);
    }
    

    【讨论】:

    • 谢谢比尔。我也想过,但是在 API 文档here 中发现它应该也可以采用数组。这会很好....但是 foreach 可能可以解决它。也许是一个错误?
    • @dividedbyzero 哦,这很有趣。是的,看起来您的原始代码应该可以工作。
    • 也许我会把它贴在 github 上。同时,我认为循环应该这样做。再次感谢,周末愉快!
    猜你喜欢
    • 2014-04-24
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多