0

一个快速的问题。我将 symfony1.4 与 Doctrine ORM 和 sfGuardDoctrinePlugin 一起使用。我有一个名为“任务”的 symfony 表单。我希望将 userId 字段(如果用户表 FK 到 Id 字段)默认设置为当前登录的用户。我怎样才能做到这一点?

//apps/myapp/modules/task/actions

class taskActions extends sfActions
{
  public function executeNew(sfWebRequest $request)
  {
    $this->form = new taskForm();
  }

  public function executeCreate(sfWebRequest $request)
   {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new taskForm();

    $this->processForm($request, $this->form);

    $this->setTemplate('new');
  }
}
4

1 回答 1

0

在没有看到您如何通过操作或通过设置表单的情况下回答有点棘手$form->configure(),但您可以使用以下方法访问当前用户 ID:

$currentUserId = sfContext::getInstance()->getUser()->getGuardUser()->getId();

- 更新 -

根据您的更新,它似乎taskForm不是基于模型对象,否则您将通过构造函数传递对象,因此它必须是自定义表单。有几种方法可以给这只猫换肤,您可以通过构造函数传递用户对象,也可以通过公共访问器设置值,如下所示:

class taskForm
{
    protected $user;

    public function setUser($user)
    {
        $this->user = $user;
    }

    public function getUser()
    {
        return $this->user;
    }

    public function configure()
    {
        // This should output the current user id which demonstrates that you now
        // have access to user attributes in your form class
        var_dump($this->getUser()->getGuardUser()->getId()); 
    }
}

并设置它:

public function executeNew(sfWebRequest $request)
{
    $this->form = new taskForm();

    $this->form->setUser($this->getUser());
}

您可能能够做到的另一种方法是将用户对象直接传递给构造函数,然后您可以$this->getObject()->getUser()在表单中使用它来引用它,尽管我不推荐这样做,因为它会在用户上下文中强制执行 taskForm。

于 2012-04-19T01:24:00.050 回答