PHP Symfony - 表单处理问题

时间:2010-10-01 08:01:37

标签: php symfony1

我正在尝试构建自己的用户身份验证系统(仅仅因为那里的用户身份验证系统太复杂而且很大)。

我很难掌握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在后台做了些什么。我认为有太多的魔法,有时缺乏文档。

1 个答案:

答案 0 :(得分:1)

http://trac.symfony-project.org/browser/plugins/sfDoctrineGuardPlugin/branches/1.3/lib/model/doctrine/PluginsfGuardUser.class.php#L33

  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)));
  }