CakePHP 3 правильный способ изменить данные запроса в контроллере - PullRequest
0 голосов
/ 22 февраля 2019

Существует множество сообщений об этом в 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, как и ранее.

1 Ответ

0 голосов
/ 23 февраля 2019

Я не уверен на 100%, что я понял ваши потребности, но обеспечение сброса пароля и тайм-аута в функции сброса может быть выполнено путем рефакторинга связанного кода с приведенным ниже.Это может быть одним из способов ...

// КАК ЕСТЬ

// Clear passkey and timeout
$this->request->data['passkey'] = null;
$this->request->data['timeout'] = null;
$user = $this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
…

// ЭТОТ

$user = $this->Users->patchEntity($user, $this->request->getData());

// Clear passkey and timeout
$user->passkey = null;
$user->timeout = null;

if ($this->Users->save($user)) {
…
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...