2010-10-08 67 views
2

我正在使用cakephp。我有一个元素数组的表单。 对于离: -cakephp无效元素数组

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

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

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

为什么不在模型中使用验证规则? – 2010-10-08 09:51:51

+0

上面的只是一个例子..我必须在输出错误消息之前检查多个字段。所以想到在控制器中这样做。 – user470077 2010-10-08 10:08:13

+1

型号用于验证控制器。而是在模型中进行 – dogmatic69 2010-10-08 16:20:28

回答

4

不幸的是,您无法使该功能无效。

但什么invalidate()呢?

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

它只是设置模型的validationErrors。

所以,你可以在你的控制器做以下的(但我也呼吁你移动的模型验证):

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

下面的代码将在无效列表中的第二描述。

HTH

4

您可以输入视图:

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

感谢尼克,

你的答案帮助我,但半途而废,因为我的问题是与其他子域的化合物领域。

account_number { 
    bank_code, 
    bank_office, 
    check_digit, 
    account 
} 

在这种情况下,如果我们需要把在验证错误的一个子域,这是解决方案:

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

我希望帮助别人。

问候。

0

我有类似的问题,因为它是用于管理面板我显示对场,即第一级仅该部分的错误消息。

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