Validation 条件验证
我的HotelAddress模型: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
<?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']);
}