cakephp使元素数组无效

时间:2010-10-08 09:30:19

标签: cakephp

我正在使用cakephp。我有一个带有元素数组的表单。 例如: -

<textarea name="data[User][0][description]>
<textarea name="data[User][1][description]>

从控制器,我需要使数组字段无效(手动),如果它是空的并且需要向相应的字段显示错误。 如果字段是元素数组,那么使字段无效的正确语法是什么? 我知道,以下内容适用于单个元素。如何为元素数组?

$this->User->invalidate("description");

4 个答案:

答案 0 :(得分:4)

很遗憾,您无法使用该功能使字段无效。

但是invalidate()的作用是什么?

function invalidate($field, $value = true) {
        if (!is_array($this->validationErrors)) {
            $this->validationErrors = array();
        }
        $this->validationErrors[$field] = $value;
    }

它只是设置了模型的validationErrors。

因此,您可以在Controller中执行以下操作(但我也呼吁您在模型中移动该验证):

$this->User->validationErrors[1]['description'] = 'Your error message';

以下代码将使列表中的第二个描述无效。

HTH

答案 1 :(得分:4)

您可以输入视图:

<?php 
    echo $this->Form->error("User.1.description");
?>

答案 2 :(得分:0)

谢谢Nik,

你的回答对我有帮助,但中途,因为我的问题是其他子场的复合场。

account_number {
    bank_code, 
    bank_office,
    check_digit,
    account
}

在这种情况下,如果我们需要在一个子字段中输入验证错误,这就是解决方案:

$this->Model->validationErrors['account_number']['bank_code'][0] = 'Your message error';

我希望这有助于某人。

问候。

答案 3 :(得分:0)

我有类似的问题,因为它是针对管理员面板我在第一级字段显示错误消息,即仅针对此部分。

如果您在控制器上进行验证,只需创建一个包含字段名称和错误消息的错误数组,在控制器中设置它并在视图中显示in_array($ field,$ withErrorArray)时显示消息。