我正在尝试构建自己的用户身份验证系统(仅仅因为那里的用户身份验证系统太复杂而且很大)。
我很难掌握Symfony表格处理。 我正在查看sfDoctrineGuardPlugin,但对于我的生活,无法弄清楚,当输入的密码在保存到数据库之前转换为SHA1哈希时。
我在哪里可以阅读表格处理和原则可能在两者之间做的自动化内容?我一直在看“Symfony的温和介绍”,但它并没有真正帮助。
我发现,它发生在updateObject()方法的某个地方。
if ($request->isMethod('post'))
{
$this->form->bind($request->getParameter($this->form->getName()));
if ($this->form->isValid())
{
var_dump($this->form->getObject()->password);
$this->form->updateObject();
var_dump($this->form->getObject()->password);
}
}
// Prints:
// null
// string '989d88b585ce29839687f2938303e828e191ecef' (length=40)
但是我很难找到该方法的实现,以及它究竟调用/做什么。
任何人都能解开一些光明吗?我只是想了解Symfony在后台做了些什么。我认为有太多的魔法,有时缺乏文档。
答案 0 :(得分:1)
public function setPassword($password)
{
if (!$password && 0 == strlen($password))
{
return;
}
if (!$salt = $this->getSalt())
{
$salt = md5(rand(100000, 999999).$this->getUsername());
$this->setSalt($salt);
}
$modified = $this->getModified();
if ((!$algorithm = $this->getAlgorithm()) || (isset($modified['algorithm']) && $modified['algorithm'] == $this->getTable()->getDefaultValueOf('algorithm')))
{
$algorithm = sfConfig::get('app_sf_guard_plugin_algorithm_callable', 'sha1');
}
$algorithmAsStr = is_array($algorithm) ? $algorithm[0].'::'.$algorithm[1] : $algorithm;
if (!is_callable($algorithm))
{
throw new sfException(sprintf('The algorithm callable "%s" is not callable.', $algorithmAsStr));
}
$this->setAlgorithm($algorithmAsStr);
parent::_set('password', call_user_func_array($algorithm, array($salt.$password)));
}