Intereting Posts
Обнаруживать, является ли stdin устройством tty (терминал) или трубой в PHP? Простейшая версия ajax (jQuery) для загрузки только одного файла конвертировать дату формата dd / mm / yyyy из формы в метку времени? Отчеты о доставке и чтение квитанций в PHP-почте Codeigniter URI Class, как я могу использовать – дефис вместо _ подчеркивание? zend framework, где выражение в запросе fetch в PDO получает только один результат Лучший способ обработки ошибок на php-странице? swig нет соответствующей функции для перегрузки Переменная PHP Persist для всех запросов делать расширенные классы наследуют статические значения var (PHP)? Лучший способ подавить PHP-ошибки на рабочих серверах Создание миграции из существующей базы данных в Laravel 4 PHP: Как установить текущий рабочий каталог таким же, как каталог, выполняющий скрипт Как получить второе значение в раскрывающемся списке на основе выбранного в первом раскрывающемся списке

cakephp обновить больше уникальных полей

У меня есть сайт, разработанный в cakephp. У меня есть модель под названием «Пользователь»:

class User extends AppModel { public $name = 'User'; public $validate = array( 'username' => array( 'not_empty' => array( 'rule'=> 'notEmpty', 'message'=> 'Username not empty' ) ), 'email' => array( 'email_invalid' => array( 'rule' => 'email', 'message' => 'Invalid mail' ), 'email_unique' => array( 'rule' => 'isUnique', 'message' => 'Mail already exist inside database' ) ) ); public function beforeSave(){ if (isset($this->data['User']['password'])){ $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']); } } } 

В моем подтверждении у меня есть правила email_unique которые проверяют, присутствует ли в базе данных другое электронное сообщение.

Когда я обновляю пользователя, я делаю это внутри своего контроллера:

 $this->User->id = $this->request->data['User']['id']; if ($this->User->save($this->request->data)) { $this->redirect (array ('action'=>'index')); } else{ $this->Session->write('flash_element','error'); $this->Session->setFlash ('Error'); } 

Он всегда терпит неудачу, потому что электронная почта не уникальна, но является той же самой записью!

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

благодаря

Вы можете настроить свои правила проверки только для применения при создании новой записи, а не при обновлении существующей записи. Вы можете сделать это, установив ключ on в правиле проверки для create , чтобы он выглядел следующим образом:

 'email_unique' => array( 'rule' => 'isUnique', 'message' => 'Mail already exist inside database', 'on' => 'create' // Only apply this rule upon creation of a new record ) 

Дополнительную информацию см. В документации по этому вопросу.

Если вы также хотите заблокировать дублирование электронной почты при обновлении, создайте метод beforeSave в своей модели пользователя, ища адрес электронной почты:

 public function beforeSave($options = array()) { // If the email key is set in the data to be saved... if (isset($this->data[$this->alias]['email'])) { // Make sure the email is not already in use by another user if ($this->find('count', array( 'conditions' => array( $this->alias . '.id !=' => $this->data[$this->alias]['id'], $this->alias . '.email' => $this->data[$this->alias]['email'] ) )) > 0) { // The email is found for a user with another id, abort! return false; } } }