1

我使用的Symfony 1.4和条令1.2和sfDoctrineGuardPlugin。我有一篇文章创建页面。在我的文章表上,我有profile_id字段用于保存哪个用户(作者)写了它。使用sfDoctrineGuardPlugin。要设置id字段,而无需用户选择

我的问题是,当用户写了一篇文章,然后点击保存,即使我能得到来自用户PROFILE_ID,我不能自动设置PROFILE_ID。

在我articleForm类,我可以设置选择框默认值,但用户可以改变它。如果我试图让它只读,profile_id不能保存在分贝。

这里是articleForm类我的配置功能:

// getting user_id $user = sfContext::getInstance()->getUser(); $user_id = $user->getGuardUser()->getId();

// converting for profile table 
$converter = Doctrine_Query::create() 
      ->select('*') 
      ->from('profile') 
      ->where('sf_guard_user_id = ?', $user_id); 

// fetching 
$result = $converter->fetchArray(); 

$this->widgetSchema->setDefault('profile_id', $result[0]['id']); 

为了使它只读的,我用:

$this->offsetUnset("profile_id");

但正如我以前说过的,这样一来,PROFILE_ID无法保存在数据库。如果没有代码的第二部分,当前的id作为默认值,但用户可以更改它。

该如何解决呢?任何想法? 非常感谢...

+2

您应该在表单中使用`sfContext :: getInstance()`,而不是在构造函数中注入用户对象或user_id值。此外,这应该有所帮助:http://stackoverflow.com/questions/4742099/symfony-admin-generator-add-user-id-before-saving/4744077#4744077 – Maerlyn 2011-01-24 10:16:36

+0

是的,这就是我所期待的。非常感谢Maerlyn – 2011-01-26 03:38:28

回答

0

你是在错误的轨道朋友,如果你想保存默认值,不需要在表单中公开它,因此你可以保存。相反,你应该有你的应用程序的逻辑。在保存对象之前,只需设置想要默认的任何值即可。通过使用preInsert方法,您可以平稳地使用Peer类。