我正在创建自己的博客引擎来学习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);
}
答案 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);
}
}