Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 条件验证_Validation_Cakephp - Fatal编程技术网

Validation 条件验证

Validation 条件验证,validation,cakephp,Validation,Cakephp,我的HotelAddress模型: <?php class HotelAddress extends AppModel { var $name = 'HotelAddress'; var $belongsTo = array( 'Hotel' => array( 'className' => 'Hotel' ) ); var $validate = array( 'add

我的HotelAddress模型:

<?php

class HotelAddress extends AppModel {
    var $name = 'HotelAddress';
    var $belongsTo = array(
        'Hotel' => array(
            'className' => 'Hotel'
        )
    );

    var $validate = array(
        'address' => array(
            'rule' => 'notEmpty',
        )
    );

为什么不从模型中控制验证,自己编写代码呢?您可以在beforeSave方法或在调用save方法之前调用的方法中执行验证,即:

if($this->validateForm($this->data))
{
    $this->Hotel->saveAll($this->data);
}

我不会在保存之前签入
,因为你会失去很多蛋糕内置的表单等验证魔法


您可以在模型中创建一个方法,该方法将返回
布尔值
,以指示检查成功。在那里,您可以通过
$this->data
访问模型的数据,您可以检查是否存在至少一个地址。

在调用
save
之前,我只需在控制器中使用该地址:

if (empty($this->data['HotelAddress'][1]['address'])) {
    unset($this->data['HotelAddress'][1]['address']);
}
if (empty($this->data['HotelAddress'][2]['address'])) {
    unset($this->data['HotelAddress'][2]['address']);
}

对这是我的另一个选择。实际上在beforeSave中很难做到这一点,因为每个
地址每次都要验证一个。很难跟踪要取消设置的
地址
,并检查其他
地址
es+1足够近了。这几乎就是我所做的。虽然我做了一个循环,因为地址将由javascript生成,所以我不知道会有多少。
var $existing_address = FALSE;
var $validate = array(
    'address' => array(
        'rule' => 'checkOnce',
    )
);

function checkOnce($check) {
    if (isset($this->data['HotelAddress']['address'])) {
        if (! empty($this->data['HotelAddress']['address'])) {
            return $this->existing_address = TRUE;
        } else {
            unset($this->data['HotelAddress']['address']);
            return $this->existing_address;
        }
    }
    return $this->existing_address;
}
if($this->validateForm($this->data))
{
    $this->Hotel->saveAll($this->data);
}
if (empty($this->data['HotelAddress'][1]['address'])) {
    unset($this->data['HotelAddress'][1]['address']);
}
if (empty($this->data['HotelAddress'][2]['address'])) {
    unset($this->data['HotelAddress'][2]['address']);
}