Как избежать ошибок при сохранении данных - Cakephp - PullRequest
0 голосов
/ 04 мая 2011

Я использую Cakephp и пытаюсь использовать метод, чтобы убедиться, что наша система бронирования не позволяет двум пользователям бронировать одно и то же назначение. Ex. Пользователь 1 открывает встречу, а Пользователь 2 открывает ее одновременно. Пользователь 1 записывается на прием. Пользователь 2 пытается забронировать его, но система проверяет и видит, что он больше не доступен.

Я предполагаю, что это будет происходить при проверке или в beforeSave (), но не могу понять, как это сделать.

Прямо сейчас я сделал функцию в модели для вызова с контроллера. В контроллере у меня есть:

if ($this->Timeslot->checkIfNotAvailable()) {
$this->Session->setFlash('This timeslot is no longer available');
$this->redirect(array('controller' => 'users', 'action' => 'partner_homepage')); 
}

и в модели у меня есть эта функция:

function checkIfNotAvailable($data) {
    $this->recursive = -1;
    $timeslot = $this->find('all', array(
        'conditions' => array(
            'Timeslot.id' => $this->data['Timeslot']['id'])
        )
    );
    if ($timeslot['student_id'] == 0) {
        //They can reserve it, do not spring a flag
        return false;
    } else {
        //Throw a flag!
        return true;
    }
}

Я думаю, что я перепутал использование пользовательской проверки, когда она не нужна. И это не работает, очевидно. Есть предложения?

Спасибо!

1 Ответ

1 голос
/ 04 мая 2011

Если то, что у вас работает, вы можете придерживаться этого, вы также можете попробовать создать функцию обратного вызова beforeValidate () в вашей модели.

class YourModel extends AppModel {
   function beforeValidate(){
      if( !$this->checkIfNotAvailable( $this->data ) ) {
         unset($this->data['YourModel']['time_slot']);
      }
      return true; //this is required, otherwise validation will always fail
   }
}

Таким образом, вы удаляете интервал time_slot до того, как он перейдет к проверке, и в этот момент будет сброшена ошибка проверки, возвращая пользователя на страницу редактирования и заставляя его выбрать другой временной интервал, в идеале обновленная страница ввода данных будет больше нет доступного временного интервала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...