如何在另一个表单中嵌入的Symfony表单上设置默认值?

时间:2014-01-09 18:03:51

标签: php forms symfony

如何设置嵌入在另一个表单中的Symfony表单的默认表单值,这些表单都与实体相关联?

如果我尝试在我的PropertyLocation实体中将street属性设置为以下示例中的默认值,则在表单呈现时不会显示此默认值。我知道我可以使用每个表单字段的数据选项,但我宁愿不这样做,因为它会覆盖实体中设置的内容。如何使表单显示存储在实体中的默认值。

class PropertyType
{

     /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('propertyLocation', new PropertyLocationType());
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
             array('data_class' => 'UR\AppBundle\Entity\Property'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'property';
    }
}

属性位置类型如下:

class PropertyLocationType extends AbstractType 
{

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('street', 'text');
    }

   /**
    * @param OptionsResolverInterface $resolver
    */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
        'data_class' => 'UR\AppBundle\Entity\PropertyLocation'
        ));
    }

   /**
    * @return string
    */
    public function getName()
    {
        return 'propertyLocation';
    }
 }

2 个答案:

答案 0 :(得分:0)

可以在控制器的newAction中设置默认值:

假设你有一个 PropertyController.php 作为你的Property实体的控制器

您的newAction将如下所示:

public function newAction()
{
    $defaultPropertyLocation = new  PropertyLocation();
    $defaultPropertyLocation->setStreet('default value ');
    $property = new Property();
    $property->setPropertyLocation($defaultPropertyLocation);
    // now you could pass your property entity to get rendred
    $form   = $this->createCreateForm($property);

    return $this->render('YourBundle:Property:new.html.twig', array(
        'entity' => $property,
        'form'   => $form->createView(),
    ));
}

修改第二个选项: 使用data字段

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

AFAIK没有第三种选择。

答案 1 :(得分:-1)

如果您需要在您的集合嵌入表单中设置默认数据,只需使用prototype_data 字段选项并在__construct 方法上设置数据。查看documentation

否则,如果您希望将默认数据设置为单独嵌入的表单,请仅在 __construct 上设置数据。