1

このスニペットは、作成中にフォームにデフォルト値を設定するのに実際に役立つことがわかりました

 $builder
 ->add('myfield', 'text', array(
     'label' => 'Field',
     'data' => 'Default value'))
 ;

「デフォルト値」を FOSUser バンドルの認証済みの人物に置き換えたい場合はどうすればよいですか? ( is_granted("IS_AUTHENTICATED_REMEMBERED") に true を返す)

小枝ファイルでその名前を取得できます

 {{ app.user.username }} 

私はまた、コントローラーメソッドでそれを行いました

    $username=$this->container->get('security.context')->getToken()->getUser()->getUsername()   

しかし、私はこれを私の形で機能させることができません!

コンテナのことをよく理解しているかどうかはわかりません...nクラスとコントローラーの間で変数を転送する方法もありません...おそらくこれに関する何か??

      ->add('myfield', 'text', array(
     'label' => 'Field',
     'data' => FOS\UserBundle\Model::$this->getUsername()))
4

2 に答える 2

5

コントローラーからフォームに変数を渡すことができます:

あなたのコントローラーで:

$username=$this->container->get('security.context')->getToken()->getUser()->getUsername()
$form = $this->createForm(new MyFormType($username), $entity);

あなたのフォームで:

protected $username;

public function __construct (array $username = null)
{
        $this->username = $username ;
}

public function buildForm(FormBuilder $builder, array $options)
{
   $builder  
     ->add('myfield', 'text', array(
      'label' => 'Field',
      'data' => $this->username))
}
于 2012-11-21T13:23:31.747 に答える
2

フォームにデフォルト値を設定するもう 1 つの方法は、フォームの構築に関する Symfony ドキュメントのこの例のように、フォームの基礎となるデータ オブジェクトに設定することです。

public function newAction()
{
    // create a task and give it some dummy data for this example
    $task = new Task();
    $task->setTask('Write a blog post');
    $task->setDueDate(new \DateTime('tomorrow'));

    $form = $this->createFormBuilder($task)
        ->add('task', 'text')
        ->add('dueDate', 'date')
        ->getForm();

    return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
        'form' => $form->createView(),
    ));
}

この例では、フォームの基礎となるデータ オブジェクトはタスクであり、タスクに設定された値はフォームに表示される既定値です。タスク オブジェクトは永続的ではありません。このアプローチはフォーム クラスでも同様に機能し、フォームの基になるオブジェクトが User であると仮定すると、次のようになります。

$username = $this->container->get('security.context')->getToken()->getUser()->getUsername();

$user = new User();
$user->setUsername($username);
// could set any other default values on user here

$form = $this->createForm(new MyFormClass(), $user);

このアプローチの欠点は、フォームが同じデフォルトを必要とする多くの場所で使用される場合、コードが繰り返されることです。これは、これまでに遭遇した状況ではありません。ユーザー フォームは作成/編集に再利用されますが、編集にはデフォルトは必要ありません。

于 2012-11-21T21:46:01.840 に答える