Symfony admin generator:保存前添加用户ID

时间:2011-01-19 23:48:29

标签: symfony1 sfdoctrineguard

我正在创建自己的博客引擎来学习Symfony,我有一个问题:

在博客文章的生成管理页面中,我有一个作者的下拉列表,用于指示author_id。

我想隐藏该下拉列表,并在创建帖子时将author_id设置为当前登录用户的ID(但不是在编辑时)

我该如何实现?

修改 我试过那些:

$request->setParameter(sprintf("%s[%s]", $this->form->getName(), "author_id"), $this->getUser()->getAttribute("user_id"));
$request->setParameter("content[author_id]", $this->getUser()->getAttribute("user_id"));
$request->setParameter("author_id", $this->getUser()->getAttribute("user_id"));
$request->setParameter("author_id", 2);
$request->setParameter("content[author_id]", 2);
$request->setParameter("author_id", "2");
$request->setParameter("content[author_id]", "2");

在processForm()和executeCreate()

已解决!

最终代码是:

  public function executeCreate(sfWebRequest $request)
  {
    $form = $this->configuration->getForm();
    $params = $request->getParameter($form->getName());
    $params["author_id"] = $this->getUser()->getGuardUser()->getId();;
    $request->setParameter($form->getName(), $params);

    parent::executeCreate($request);

  }

3 个答案:

答案 0 :(得分:2)

覆盖操作文件中的executeCreate功能。将帖子数据绑定到表单时,将当前用户的ID合并到其中。

第二次更新

我做了一些实验,这很有效:

class fooActions extends autoFooActions
{
  public function executeCreate(sfWebRequest $request)
  {
    $form = $this->configuration->getForm();
    $params = $request->getParameter($form->getName());
    $params["author_id"] = 123;
    $request->setParameter($form->getName(), $params);

    parent::executeCreate($request);
  }
}

答案 1 :(得分:0)

使用sfWidgetFormInputHidden更改窗体中的窗口小部件,并使用sfUser属性设置值(在用户登录时定义)

覆盖executeCreate()并设置author_id小部件(感谢maerlyn:D)

public function executeCreate(sfWebRequest $request){
  parent::executeCreate($request);
    $this->form->setWidget('author_id', new sfWidgetFormInputHidden(array(),array('value'=>$this->getUser()->getAttribute('author_id'))) );
}

答案 2 :(得分:0)

在Objects中,解决方案是:(new和$ this)

class fooActions extends autoFooActions
{
  public function executeCreate(sfWebRequest $request)
  {
    $this->form = new XxxxxForm();
    $params = $request->getParameter($this->form->getName());
    $params["author_id"] = 123;
    $request->setParameter($this->form->getName(), $params);

    parent::executeCreate($request);
  }
}