Можно ли получить код ошибки модели внутри контроллера в CakePHP? - PullRequest
0 голосов
/ 11 марта 2010

У меня есть простая функция отмены подписки в моем неподписанном контроллере.

if ($this->Unsubscribe->save($this->data['Unsubscribes'])) {
   // success
   $this->Session->setFlash('Your email has been unsubscribed!');
   $this->redirect('/unsubscribes/unsubscribe');
} else {
   // error
   $this->Session->setFlash('There was an error!');
   $this->redirect('/unsubscribes/unsubscribe');
}

Вот проблема. Я хочу установить адрес электронной почты в базе данных как уникальный. Поэтому, если кто-то вводит адрес электронной почты несколько раз (или он уже есть в нашем списке отписки), мы не заполняем базу данных дубликатами записей. Однако я хочу, чтобы посетитель знал, что он был добавлен в базу данных (поэтому он знает, что он отписался).

Есть ли способ обнаружить ошибку ввода Duplicate от контроллера, чтобы я мог приравнять это к успеху? Предостережение: я не хочу создавать расширенную app_model. Есть идеи? Это можно сделать? Как лучше всего это сделать?

РЕШЕНИЕ: Вот окончательное решение, которое я реализовал. Я добавил проверку (как предложено в выбранном ответе ниже) и обновил свой контроллер следующим образом:

// error
if(isset($this->Unsubscribe->validationErrors['email'])){
   $error = 'Your email has been unsubscribed!';
} else {
   $error = 'Something went wrong. Please try again.';
}

$this->Session->setFlash($error);
$this->redirect('/unsubscribes/unsubscribe');

Ответы [ 3 ]

2 голосов
/ 11 марта 2010

Как насчет использования правила проверки isUnique? Затем просто используйте ошибку проверки, чтобы сообщить пользователю.

var $validate = array(
    'login' => array(
        'rule' => 'isUnique',
        'message' => 'This username has already been taken.'
    )
);

Украл это прямо из поваренной книги. Раздел 4.1.4.14 является уникальным , если быть точным.

1 голос
/ 11 марта 2010

Я думаю, вы можете сделать это так:

if ($this->Unsubscribe->find('count',array('conditions'=>array('email'=>$this->data['Unsubscribes']['email']))) > 0   )
{
   $this->Session->setFlash('duplicate email!');
   $this->redirect('/unsubscribes/unsubscribe');
}
//then do your stuff 
0 голосов
/ 11 марта 2010

Это зависит. Есть ли какие-либо другие ошибки, которые вы хотите отобразить? Или это единственная ошибка, которая может возникнуть? В случае последнего просто не проверяйте:

$this->Unsubscribe->save($this->data['Unsubscribes']);
// I don't care if that actually saved or not,
// unless something horrible happened the email is in the database
$this->Session->setFlash('Your email has been unsubscribed!');
$this->redirect('/unsubscribes/unsubscribe');

В противном случае вы можете использовать метод invalidFields(), чтобы узнать, что пошло не так.

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