0

簡単な質問。DoctrineORMとsfGuardDoctrinePluginでsymfony1.4を使用しています。'task'という名前のsymfonyフォームがあります。userIdフィールド(userテーブルの場合は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());
}

これを行うことができるもう1つの方法は、コンストラクターを介してユーザーオブジェクトを直接渡すことです。その後$this->getObject()->getUser()、フォーム内で使用して参照できますが、ユーザーコンテキスト内でtaskFormを強制するため、これはお勧めしません。

于 2012-04-19T01:24:00.050 に答える