#php #model-view-controller #cakephp-2.0
#php #модель-представление-контроллер #cakephp-2.0
Вопрос:
Я пытаюсь создать страницу регистрации учетной записи, на CakePHP 2.0
которой пользователю необходимо активировать свою новую учетную запись, нажав на ссылку в электронном письме, которое он получил после вставки username
, email
и password
.
Мой вопрос заключается в том, как я могу установить код активации внутри записи пользователя.
Я подумал создать поле таблицы с именем activation_code
, а затем сохранить hashed
версию username
, чтобы быть уверенным, что пользователь может активировать себя, нажав на ссылку электронной почты с ключом активации.
Вся процедура выполнена, но я не знаю, как я могу установить activation_code
внутри $data['User']
объекта, и мне неясно, является ли это хорошим использованием MVC framework или я должен сделать это по-другому.
Во время действия регистрации пользователя я сделал это, но я получаю сообщение об ошибке при попытке динамического создания activation_code:
// from the UserController class
public function register () {
if (!empty($this->data)) {
if ($this->data['User']['password'] == $this->data['User']['confirm_password']) {
// here is where I get the error
$this->data['User']['activation_key'] = AuthComponent::password($this->data['User']['email']);
$this->User->create();
if ($this->User->save($this->data)) {
// private method
$this->registrationEmail ($this->data['User']['email'], $this->data['User']['username']);
$this->redirect(array('controller'=>'users', 'action'=>'registration', 'success'));
}
}
}
}
Очевидно, что это activation_key
пустое поле внутри моей базы данных.
Итак, как я могу создать файл динамически из контроллера?
Ответ №1:
$this->data['User']['activation_key']
должно быть:
$this->request->data['User']['activation_key']
(Вы должны изменить все ссылки на $this->data на новый cakephp2.0 $this-> request->data)
Ответ №2:
Я решил проблему с помощью метода Model::set()
, поэтому:
public function register () {
if (!empty($this->data)) {
if ($this->data['User']['password'] == $this->data['User']['confirm_password']) {
$this->User->create();
// I've used set method
$this->User->set('activation_key', AuthComponent::password($this->data['User']['email']));
if ($this->User->save($this->data)) {
$this->registrationEmail ($this->data['User']['email'], $this->data['User']['username']);
$this->redirect(array('controller'=>'users', 'action'=>'registration', 'success'));
}
}
}
}