Мои HotelAddress Модель:Условная проверка
<?php
class HotelAddress extends AppModel {
var $name = 'HotelAddress';
var $belongsTo = array(
'Hotel' => array(
'className' => 'Hotel'
)
);
var $validate = array(
'address' => array(
'rule' => 'notEmpty',
)
);
Мои HotelModel
<?php
class Hotel extends AppModel {
var $name = 'Hotel';
var $hasAndBelongsToMany = array(
'HotelCategory' => array(
'className' => 'HotelCategory'
)
);
var $belongsTo = array(
'Page' => array(
'className' => 'Page'
)
);
var $hasMany = array(
'HotelAddress' => array(
'className' => 'HotelAddress',
'dependent' => TRUE
),
'HotelPhone' => array(
'className' => 'HotelPhone',
'dependent' => TRUE
)
);
Мой Вид:
<div id="main">
<h2>Add Hotel</h2>
<?php echo $this->Session->flash();?>
<div>
<?php
echo $this->Form->create('Hotel');
echo $this->Form->input('Hotel.name');
echo $this->Form->input('HotelCategory', array('options' => $hotel_categories, 'multiple' => 'checkbox'));
echo $this->Form->input('HotelAddress.0.address');
echo $this->Form->input('HotelAddress.1.address');
echo $this->Form->input('HotelAddress.2.address');
echo $this->Form->input('HotelPhone.0.phone');
echo $this->Form->input('Page.meta_keywords');
echo $this->Form->input('Page.meta_description');
echo $this->Form->end('Save Hotel');
?>
</div>
<!-- main ends -->
</div>
Моя проблема заключается в том, что мне не нужно, чтобы проверить другие HotelAddress
эс , Если пользователь заполняет хотя бы один из адресов, он должен быть проверен. Однако, если он не заполняет какой-либо файл, должна отображаться ошибка.
Я считаю, что я должен добавить код по методу beforeSave
, но у меня нет идеи о том, что должно быть там для этого.
Update:
теперь у меня есть это в модели HotelAddress, который работает, не проверки наличия других адресов, если он доступен. Тем не менее, он по-прежнему сохраняется.
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;
}
Это почти то, что я сделал. Хотя я сделал это цикл, поскольку адреса будут генерироваться javascript, поэтому я не знаю, сколько их будет. –