【问题标题】:How to set up default value in symfony2 select box with data from database如何在 symfony2 选择框中使用数据库中的数据设置默认值
【发布时间】:2013-11-01 11:49:46
【问题描述】:

我有这个代码

->add('user', 'entity', array(
                            'class' => 'Acme\Entity\User',
                            'query_builder' => function(EntityRepository $er) use ($options)
     {                        return $er->createQueryBuilder('u')
                               ->orderBy('u.name', 'ASC');
                            },
            'data' => $option['id']
            ))

它不工作

public function buildForm(FormBuilderInterface $builder, array $options)


    {
            $builder
              ->add('description')

              ->add('user', 'entity', array(
                'class' => 'Acme\Entity\User',
                'query_builder' => function(EntityRepository $er) use ($options) {
                    return $er->createQueryBuilder('u');

                },
              'preferred_choices' => array('2')
              ))
        ;
    }

【问题讨论】:

  • 也许会对你有所帮助:stackoverflow.com/questions/8073236/…
  • 好吧,我已经尝试过了,但它没有告诉我何时从数据库中获取数据。对于数组,它可以工作,但不能与查询生成器一起工作

标签: php forms symfony doctrine-orm repository


【解决方案1】:

您可以使用以下方法之一:

  1. 在对象中设置默认值

    $cl->setUser($this->getDoctrine()->getEntityManager()->getReference('Acme:User',2));
    
  2. 在表单构建器中使用首选选项:

    'preferred_choices' => array('2')
    
  3. 或者设置'property_path' => false并使用'data' => YourDefaultEnity

【讨论】:

  • 1.我不能有默认值,因为我正在创建用户任务并从用户页面传递用户 ID。因此,根据我的任务页面中的用户页面,我将在选择框中设置该用户。 2.重新标记prefered_choice,它说The option "preferred_choice" does not exist.
  • 对不起我的错字。更新。请提供更多信息(控制器、表单生成器、视图)以帮助您
  • 我现在在选择 Warning: spl_object_hash() expects parameter 1 to be object, string given in /home/randhir/public_html/Kites/Symfony/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php line 88 时遇到此错误。代码没有什么特别之处。它是由教义本身创造的。我将在我的问题中添加表单 calss
  • 如何调用表单创建:$form = $this->createForm(new YourType)$form = $this->createForm(new YourType, new SomeObject)
  • $form = $this->createForm(new MyType(), $entity,array('id' => $id));
【解决方案2】:

表单应自动将 user->id 值映射到选定的实体选择字段。例如,如果您的计算机实体与名为“computer_users”的联接表中的用户实体具有 OnetoOne 关系:

class Computer{

    private $user;

    /**
    * @ORM\OneToOne(targetEntity="ComputerUser", mappedBy="computer")
    */
    private $computerUsers;

    public function getUser(){
       return $computerUsers->getUser();
    }

    private function getComputerUser(){
       return $this->$computerUsers;
    }
}

表单类中的“用户”字段应该从传递给表单的计算机类中的“用户”属性对象中获取用户->id 值。

或者,您可以通过使用 SetData() 将用户实体显式传递到表单中来显式设置值:

    $computerForm = $this->createForm( new ComputerForm(), $computer );
    $user         = $computer->getComputerUser()->getUser();

    $computerForm->get('user')->setData( $user );

    return $this->render( 'AcmeBundle:Computer:edit.html.twig'
                        , array( 'computer' => $computer
                        , 'computerForm'    => $computerForm->createView()
            )
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2015-02-20
    相关资源
    最近更新 更多