如何在Symfony 2表单字段中将默认值设置为FOSUserBundle中的身份验证用户名

时间:2012-11-21 00:28:54

标签: forms symfony fosuserbundle

我发现这个片段在创建时会在我的表单中设置默认值

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

如果我想用FOSUser捆绑中的身份验证人员替换“默认值”怎么办? (返回true为is_granted(“IS_AUTHENTICATED_REMEMBERED”))

我可以使用

在树枝文件上检索该名称
 {{ app.user.username }} 

我也用

的控制器方法完成了它
    $username=$this->container->get('security.context')->getToken()->getUser()->getUsername()   

但是我无法设法以我的形式工作!

我不确定我是否理解那个容器的东西......既没有如何在类和控制器之间传递变量......  这可能是什么?

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

2 个答案:

答案 0 :(得分: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))
}

答案 1 :(得分:2)

将默认值设置为表单的另一种方法是将它们设置在表单的基础数据对象上,如本例中有关构建表单的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(),
    ));
}

在此示例中,表单的基础数据对象是Task,并且在任务上设置的值是要在表单中显示的默认值。任务对象不是持久的。这种方法与表单类一样,并且假设表单的底层对象是用户看起来像这样:

$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);

这种方法的缺点是如果在需要相同默认值的许多地方使用该表单,则代码将被重复。这不是我到目前为止遇到的情况 - 我的用户表单被重新用于创建/编辑,但编辑不需要默认值。