2010-10-01 35 views
0

我正在尝试构建自己的用户认证系统(仅仅因为那里的问题太复杂而且很大)。PHP Symfony - 表单处理问题

虽然我无法掌握Symfony表单处理。 我在看sfDoctrineGuardPlugin,但在我的生活中,无法弄清楚,输入的密码在保存到db之前转换为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

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

男人,怎么是我这辈子要找到它? ;)所以当您调用save()时,Doctrine实际上为每个字段调用setValue?我在哪里可以看到代码中? (只是想在automagic背后)。谢谢您的帮助。 – 2010-10-01 11:36:53

+1

从来没有挖掘到教条的代码,以便能够回答这个问题,但我已经足够深入到这个插件的代码来知道你原来的问题的答案。 – Maerlyn 2010-10-01 12:34:19

+0

谢谢。我想这样就可以用它,而不是问问题;) – 2010-10-01 15:39:51