Я ломаю голову над самыми простыми вещами.
У меня есть сгенерированная Symfony форма с некоторыми настройками. У меня форма сохраняется просто отлично, за исключением того, что поле «пароль» записывает пароль (как и ожидалось) в обычном формате.
Как я могу перехватить это значение перед записью в базу данных и sha1() перед записью?
Код по существу:
$this->dialog = $request->getParameter('dialog');
$this->form = new UserForm();
if ($this->getRequest()->getMethod() == "POST") {
$this->form->bind($request->getParameter('user'));
// intercept here, I suspect
$user = $this->form->save();
}
РЕДАКТИРОВАТЬ: проблема решена.
в /lib/model/User.php
класс User расширяет BaseUser {
public function save(PropelPDO $con = null) { if ($this->getPassword() != '') { $this->setPassword(sha1($this->getPassword())); } return parent::save($con); }
}
Это довольно очевидно, но не для нуба вроде меня. надеюсь, это поможет кому-то другому. Если есть лучший способ сделать это без расширения функции save(), дайте мне знать?
Ресурс: http://www.symfony-project.org/jobeet/1_4/Propel/en/10 (см.: Защита формы задания с помощью токена)
РЕДАКТИРОВАТЬ № 2: лучший способ сделать это (согласно предложению Града ниже)
В пользовательской модели
public function setPassword($rawPassword)
{
$salt = "fgv932g2e9dshdfkdjgf927gf8hlz082";
$password = sha1($salt . $rawPassword);
parent::setPassword($password);
}