2

私は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);

  }
4

3 に答える 3

2

executeCreateアクションファイルの関数をオーバーライドします。投稿データをフォームにバインドするときは、現在のユーザーのIDをフォームにマージします。

2回目の更新

私はいくつかの実験をしました、そしてこれはうまくいきます:

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);
  }
}
于 2011-01-20T06:22:32.260 に答える
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'))) );
}
于 2011-01-20T04:04:23.863 に答える
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);
  }
}
于 2011-06-08T04:39:48.177 に答える