Я сохраняю данные, отправленные из формы.Изменение данных CakePHP во время проверки и beforeSave не сохраняется с изменениями
В контроллере я делаю:
$this->User->create();
$this->User->save($this->request->data)
> request-> данные $ this- выглядит следующим образом:
'User' => array(
'password' => '*****',
'username' => 'ddddd',
'role' => '256/aa01bdf80d42beb48dd3225acddf447fdd7a39f3',
'parent_id' => '0/b6ba9bd57f6c70cf738891d4c6fac22abed4161d'
)
Существуют правила проверки, что работает на 'роль' и " parent_id ", чтобы гарантировать, что идентификаторы role/parent являются теми, к которым пользователь может получить доступ.
Валидация изменяет значения полей, если данные действительны.
У меня также есть поведение дерева, которое задает некоторые поля дерева в файле beforeSave() в поведении.
Правило проверки записывает изменение в $this->data->[$model][$field]
, как показано ниже.
public function checkListHash($check, $field) {
$explodedCheck = explode('/', $check[$field]);
if ($this->secureId($explodedCheck[0], $explodedCheck[1])) {
$this->data['User'][$field] = $explodedCheck[0];
return true;
}
return false;
}
beforeFilter() в поведении изменяется массив данных с заявлениями, как это:
$Model->data[$Model->alias][$ancestors] = $ancestorList;
Когда проверка и beforeFilter() обработка завершена, у меня есть красивый и правильный массив данные по $this->User->data
который выглядит следующим образом:
'User' => array(
'password' => '*****',
'active' => '0',
'role' => '256',
'parent_id' => '0',
'node' => '0',
'username' => 'ddddd',
'modified' => '2013-09-15 09:55:02',
'created' => '2013-09-15 09:55:02',
'ancestor_list' => ',0,'
)
Однако $this->request->data
неизменна. И это то, что спасает.
Ясно, что я не понимаю отношения этих различных способов доступа к данным. Я пробовал различные способы для решения данных в трех контекстах:
- Контроллер
- Модель
- Поведение
И я попытался $this->User->create($this->request->data);
до контроллера экономии() заявление.
В контроллере, что я вижу, как доступные массивы данных:
- ПРИОР К SAVE
- $ this-> request-> данные = $ this-> данные = собственных данных из форма
$ this-> User-> данные = некоторые по умолчанию, безлюдной массив
ДО Чеховой, когда я использую $ this-> user-> создать ($ this-> request-> данные)
все три массивы содержат необработанные данные формы
после сохранения в любом случае
- $ этом-> request-> данные = $ этом-> данные = точно так, как перед
- $ этом-> Пользователь -> данные = правильно массированные данные
Может ли кто-нибудь меня разобраться?
Дон Drake
данные не передаются по ссылке (к модели), поэтому они будут внутри модели, скорее всего, будут отличаться от контроллера после модификации. Это основной ООП. Какова ваша проблема сейчас? Обратите внимание, что вам просто нужно сделать '$ this-> request-> data = $ this-> Model-> data', чтобы снова получить последние данные в контроллере (обычно это необязательно). – mark
Чтобы прояснить одну маленькую точку, данные $ this-request не изменяются, и сохранение не выполняется, хотя нет ошибок проверки или других ошибок, которые я вижу. – user2378787
Вы проверили '$ this-> Model-> validationErrors'? Он содержит ошибки. – mark