Существует множество сообщений об этом в SO, но все они устарели.
Использование CakePHP 3.7 в 2019 году и следование учебному пособию по реализации электронной почты для «сброса пароля»: http://web.archive.org/web/20171001155555/http://www.naidim.org/cakephp-3-tutorial-9-reset-password
Приложение имеет таблицу users
, которая имеет 2 поля с именами passkey
и timeout
.В приведенном выше примере кода они использовали следующее, чтобы «сбросить» эти 2 поля, когда пользователь сбрасывает свой пароль:
$this->request->data['passkey'] = null;
$this->request->data['timeout'] = null;
Кажется, что это устарело, и вы не можете установить данные запроса в контроллерекак это больше.
Мой план состоял в том, чтобы попытаться использовать array_merge()
для объединения данных запроса и всего, что мы хотим изменить следующим образом:
$save_data = array_merge($this->request->getData(), ['passkey' => null, 'timeout' => null]);
// Note $user is the result of a find query done earlier.
$this->Users->patchEntity($user, $save_data);
Выполнение этого, похоже, не имеет никакого эффектана данных, сохраненных в БД - он обновит поле пароля (которое приходит из формы в связанном посте).Но он не изменит поля passkey
или timeout
в БД.
Если я debug($save_data)
, то он действительно дает мне массив:
[
'password' => 'foo',
'confirm_password' => 'foo',
'passkey' => null,
'timeout' = null
];
Этонеправильный способ сделать это?Я полагаю, что причина, по которой это было изменено, связана с тем, что объекты запроса были неизменяемыми, хотя программно было проще устанавливать данные через $this->request
, как и ранее.