내 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
ES를 검증 할 필요가 없다는 것입니다 . 사용자가 주소 중 하나 이상을 채우면 유효성을 검사해야합니다. 그러나 그가 어떤 것을 채우지 않으면 오류가 나타나야합니다.
나는 코드를 beforeSave
메서드에 추가해야한다고 생각하지만,이 작업을 수행하기 위해 무엇이 있어야하는지에 대한 아이디어가 없습니다.
업데이트 :
지금은 가능한 경우 다른 주소의 존재를 검증하지 않음으로써 작동 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;
}
이것은 거의 내가 한 일입니다. 주소가 자바 스크립트에 의해 생성 될 것이므로 루프를 만들었지 만 얼마나 많은 것들이 있는지 알지 못합니다. –