$this->request->data
нельзя получить доступ из модели. Эти данные доступны только из контроллера. Когда вы пытаетесь сохранить данные в модель из контроллера (например, $this->User->save($this->request->data))
), вы устанавливаете атрибут data
модели User
. Другими словами, это происходит:
$this->User->data = $this->request->data;
Таким образом, в методах обратного вызова вашей модели вы можете получить доступ к данным, сохраняемым с помощью $this->data
, и манипулировать ими, как вы нашли в своем beforeValidate()
: -
public function beforeValidate($options = array()) {
// Unset 'birthday' from data being saved
unset($this->data[$this->alias]['birthday']);
return parent::beforeValidate($options);
}
Не забудьте при использовании этого обратного вызова вызвать родительский метод и убедиться, что он возвращает логическое значение. Если он не вернет true
, ваши данные не будут сохранены!
Если вы манипулируете $this->data
в своей модели, это не повлияет на $this->request->data
, но вы всегда можете получить доступ к атрибуту data
модели из контроллера, чтобы увидеть изменения. Например, в вашем контроллере после сохранения изменений:
// Output the User data
debug($this->User->data);
Если вы действительно хотите изменить $this->request->data
, вам нужно сделать это из контроллера (предположительно перед сохранением), а не из модели:
unset($this->request->data[$this->alias]['birthday']);
В качестве побочного примечания будьте осторожны при удалении ваших данных в обратном вызове модели, поскольку он будет делать это каждый раз, когда вы пытаетесь сохранить данные (если вы не отключите обратный вызов). Таким образом, удаление birthday
приведет к тому, что он никогда не будет сохранен в вашей базе данных.
person
drmonkeyninja
schedule
20.06.2015