2017-02-21 12 views
0

У меня есть функция, которая присваивает документу номер, если два обязательных поля заполнены Вот код контроллера:.

if(($data['Msr']['app_requester_id'] == 0 && isset($data['Msr']['app_requester_date']) || 
     (empty($data['Msr']['app_requester_date'] && $data['Msr']['app_requester_id'] > 0)))) { 

     $this->Session->setFlash(__('You must sign and date this document before a number can be assigned.')); 
     $this->redirect(array('action'=>'edit', $id)); 
    } 

Это работает отлично, пока присутствует $ this-> redirect. Дело в том, что я не хочу перенаправлять пользователя, потому что тогда они потеряют любые несохраненные изменения, если это условие ошибки встречается. Но если я удалю $ this-> redirect, это не сработает, и число будет присвоено, даже если одно или оба обязательных поля пустые. Есть ли способ заставить это работать без перенаправления?

+0

Также: всегда возвращайте свою переадресацию. Ты забыл это здесь. – mark

+0

@mark Почему добавление 'return' для' redirect', если по умолчанию оно выдает 'exit (0)' в конце! Я ошибаюсь ? –

ответ

0

Попробуйте подтвердить данные перед сохранением и броском Exception, если требуемые поля пустые.

try { 
    if (($data['Msr']['app_requester_id'] == 0 && isset($data['Msr']['app_requester_date']) 
     || (empty($data['Msr']['app_requester_date'] && $data['Msr']['app_requester_id'] > 0))) 
    ) { 
     throw new Exception('Exception message'); 
    } 
} catch (Exception $e) { 
    $this->data = array(
     'success' => false, 
     'message' => $e->getMessage() 
    ); 
} 
+0

Тот же результат, к сожалению. Условия полностью исключены. Странно, потому что я вижу, где это * должно * работать. – Chris

Смежные вопросы