Условная проверка - PullRequest
       3

Условная проверка

1 голос
/ 09 февраля 2011

My HotelAddress Model:

<?php

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

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

My 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
        )
    );

My View:

<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, но у меня нет идеи, что делатьthis.

Обновление:

Теперь у меня есть это в модели 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;
}

Ответы [ 3 ]

1 голос
/ 09 февраля 2011

Я бы не стал проверять beforeSave, потому что вы потеряете много встроенного в Cake магии проверки с формами и тому подобным.

Вы можете создать пользовательскую проверку метод в вашей модели, который вернет boolean, чтобы указать успешность проверки.Там вы получите доступ к данным для модели через $this->data и сможете проверить наличие хотя бы одного адреса.

1 голос
/ 10 февраля 2011

Я бы просто пошел с этим в контроллере перед вызовом 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']);
}
1 голос
/ 09 февраля 2011

Почему бы не взять контроль над моделью за пределы модели и не написать ее самостоятельно?Вы можете выполнить проверку в методе beforeSave или в методе, который вызывается перед вызовом метода save, а именно:

if($this->validateForm($this->data))
{
    $this->Hotel->saveAll($this->data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...