对多个字段应用相同的验证规则

时间:2011-12-20 11:23:00

标签: php cakephp cakephp-2.0

如何为2.0中的50个字段应用相同的验证规则

我对重复不同领域的规则不感兴趣

public $validate = array(
    'company' => array(
        'notempty' => array(
            'rule' => array('notempty'),
            'message' => 'Cannot be Empty',

        ),
    ),
    // rule for other 50 fields....
);

3 个答案:

答案 0 :(得分:2)

可能的解决方案:

$validate_items = array('company', 'other', 'one_more');

$validate_rule = array(
    'notempty' => array(
        'rule' => array('notempty'),
        'message' => 'Cannot be Empty')
    );

$validate = array();

foreach ($validate_items as $validate_item) {
    $validate[$validate_item] = $validate_rule;
}

echo "<pre>".print_r($validate, true)."</pre>";

不明白为什么要确定相同的验证50次。您只能声明一个规则并将其用于所有字段。

可能是我误解了你的问题?

答案 1 :(得分:1)

您可以在控制器中执行保存之前动态构建$ validate规则:

public function add(){

if (!empty($this->request->data) {

    $validate = array();

    foreach($fields as $field) {
        $validate[$field] = array(
            'required'=>array(
                'rule'='notEmpty',
                'message'=>'Cannot be empty'
            )
        );
    }

    $this->ModelName->validate = $validate;

    if (!$this->ModelName->save($this->request->data)) {
       // didn't save
    }
    else {
       // did save
    }

}

}

其中$ fields是一个数组,其中包含要将验证应用于的字段列表。

理想情况下,您将构建验证数组的代码转移到模型,但效果是相同的

您可以应用相同的技术,以便为模型提供多个验证规则。

答案 2 :(得分:0)

新例子:

$fields_to_check = array('company', 'field_2', 'field_5'); // declare here all the fields you want to check on "not empty"

$errors = 0;

foreach ($_POST as $key => $value) {
    if (in_array($key, $fields_to_check)) {
        if ($value == "") $errors++;
    }
}

if ($errors > 0) echo "There are ".$errors." errors in the form. Chech if all requered fields are filled in!"; //error! Not all fields are set correctly
else //do some action