标签: symfony-forms

如何在symfony 2中更改表单字段值

我有一个如下表格:

class ItemType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            // ...
            ->add('tags','text',array(
                'required' => false,
                'attr' => array('name' => 'tags'),
                'mapped' => false))
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'MyBundle\ItemBundle\Entity\Item',
            'cascade_validation' => true,
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)

我的编辑动作

public function editAction(Request $request, $id) {
    $em = $this->getDoctrine()->getManager();
    $entity = $em->getRepository('MyBundleItemBundle:Item')->find($id);
    $form = $this->createForm(new ItemType(), $entity);
    //$form->get('tags')->setValue('test text');
    // ^- this is what i would like to do -^
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在我编辑项目时,如何在渲染之前更改控制器内的表单字段值?

symfony-forms symfony-2.3

20
推荐指数
1
解决办法
6万
查看次数

如何使用Symfony表单和数据转换器实现测试隔离?

注意:这是Symfony <2.6但我认为无论版本如何,相同的整体问题都适用

首先,请考虑此表单类型,该表单类型旨在将一个或多个实体表示为隐藏字段(为简洁起见,省略了名称空间)

class HiddenEntityType extends AbstractType
{
    /**
     * @var EntityManager
     */
    protected $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if ($options['multiple']) {
            $builder->addViewTransformer(
                new EntitiesToPrimaryKeysTransformer(
                    $this->em->getRepository($options['class']),
                    $options['get_pk_callback'],
                    $options['identifier']
                )
            );
        } else {
            $builder->addViewTransformer(
                new EntityToPrimaryKeyTransformer(
                    $this->em->getRepository($options['class']),
                    $options['get_pk_callback']
                )
            );
        }
    }

    /**
     * See class docblock for description of options
     *
     * {@inheritdoc}
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'get_pk_callback' => function($entity) {
                return $entity->getId(); …
Run Code Online (Sandbox Code Playgroud)

php unit-testing symfony-forms symfony

20
推荐指数
1
解决办法
474
查看次数

嵌入表单集合错误:无法确定属性的访问类型

根据本教程,我正在尝试嵌入Tag表单集合.和实体有多对多的关系.ServiceTagService

表单正确呈现.但是当我提交表格时,我得到了

无法确定属性"tagList"的访问类型

错误.我不明白为什么通过调用方法Tag没有将新对象添加到Service类中addTag().

服务类型

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title', TextType::class, array(
            'label' => 'Title'
        ))
    ;

    $builder->add('tagList', CollectionType::class, array(
        'entry_type' => TagType::class,
        'allow_add' => true,
        'allow_delete' => true,
        'by_reference' => false
    )));
}
Run Code Online (Sandbox Code Playgroud)

服务类

{
....
 /**
 * @ORM\ManyToMany(targetEntity="Tag", mappedBy="serviceList",cascade={"persist"})
 */ 
private $tagList;

/**
 * @return ArrayCollection
 */
public function getTagList()
{
    return $this->tagList;
}

/**
 * @param Tag $tag
 * @return …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony doctrine-orm

19
推荐指数
1
解决办法
3460
查看次数

Symfony2实体字段类型替代"property"或"__toString()"?

使用Symfony2 实体字段类型应指定property选项:

$builder->add('customers', 'entity', array(
    'multiple' => true,
    'class'    => 'AcmeHelloBundle:Customer',
    'property' => 'first',
));
Run Code Online (Sandbox Code Playgroud)

但有时这还不够:想想两个同名的客户,所以显示电子邮件(唯一)是强制性的.

另一种可能性是__toString()在模型中实现:

class Customer
{
    public $first, $last, $email;

    public function __toString()
    {
        return sprintf('%s %s (%s)', $this->first, $this->last, $this->email);
    }
}
Run Code Online (Sandbox Code Playgroud)

后者的缺点是你被迫在所有形式中以相同的方式显示实体.

有没有其他方法可以使这更灵活?我的意思是像回调函数:

$builder->add('customers', 'entity', array(
    'multiple' => true,
    'class'    => 'AcmeHelloBundle:Customer',
    'property' => function($data) {
         return sprintf('%s %s (%s)', $data->first, $data->last, $data->email);
     },
));
Run Code Online (Sandbox Code Playgroud)

forms symfony-forms symfony

18
推荐指数
1
解决办法
1万
查看次数

Symfony2更新"子表单"中的项目

我的问题的简短版本:

如何在Symfony2中编辑子表单的实体?

= - = - = - = - = - = - =长而详细的版本= - = - = - = - = - = - = - =

我有一个实体订单

<?php

class Order
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Customer")
     * @ORM\JoinColumn(name="customer_id", referencedColumnName="id", nullable=false)
     **/
    private $customer;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date", type="date")
     */
    private $date;

    /**
     * @ORM\ManyToOne(targetEntity="\AppBundle\Entity\OrderStatus")
     * @ORM\JoinColumn(name="order_status_id", referencedColumnName="id", nullable=false)
     **/
    private $orderStatus; …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony doctrine-orm

18
推荐指数
1
解决办法
1421
查看次数

Symfony 2创建一个包含2个属性的实体表单字段

我正在使用symfony2并有一个表单来保存一个用户与某些规则的关系.这些规则由公司的管理员用户设置.在这种形式中,在我选择要更新的用户之后,我必须选择该用户具有权限的规则.

问题是我可能有多个具有相同名称的规则(它是另一个实体),但值不同.所以,当我构建selectbox时,我必须显示名称和值,如:

  1. 物品数量 - 10
  2. 物品数量 - 20
  3. 该项目的价值 - 200
  4. 该项目的价值 - 500

但现在我只能使用下面的代码显示" - $ value":

$form = $this->createFormBuilder()->add('myinput', 'entity', array(
                    'class' => 'myBundle:Rule',
                    'property' => 'childEntity.name',
                    'label' => 'Filas Permitidas',
                    'expanded' => false,
                    'multiple' => true,
                    'choices' => $this->getDoctrine()
                            ->getRepository('MyBundle:Rule')
                            ->findAll(),
                    'required' => true,
                ))->getForm();
Run Code Online (Sandbox Code Playgroud)

所以,作为我想要的财产$myEntity->getChildEntity()->getName()$myEntity->getValue().

有办法做到这一点吗?

php symfony-forms symfony

17
推荐指数
1
解决办法
1万
查看次数

Symfony twig如何将类添加到表单行

我正在使用Twig在Symfony 2.3中构建一个项目.我想在表格行块中添加一个类.我使用的表单主题文件包含:

{% block form_row %}
    <div class="form-row">
        {{ form_label(form) }}
        {{ form_widget(form) }}
        {{ form_errors(form) }}
    </div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

现在我的一些表单行要添加一个额外的类form-row-split.我无法弄清楚如何正确地做到这一点.我几乎工作的方式是:

{% block form_row %}
    {% set attr = attr|merge({'class': 'form-row' ~ (attr.class is defined ? ' ' ~ attr.class : '') ~ (errors|length > 0 ? ' error' : '')} ) %}
    <div {{ block('widget_container_attributes') }}>
        {{ form_label(form) }}
        {{ form_widget(form) }}
        {{ form_errors(form) }}
    </div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

(注意,我已经将error类逻辑留在那里,因为它需要保留).然后在表单构建器中:

$builder
        ->add('first_name', 'text', array( …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony twig

17
推荐指数
3
解决办法
3万
查看次数

在Twig中自定义小部件的ID属性

在渲染窗口小部件时,是否可以在Twig中自定义HTML'id'属性 {{ form_widget(form.NAME_OF_THE_FIELD) }}

传球{'attr': {'id': 'SOMETHING'}}不起作用......

感谢帮助!

symfony-forms symfony

16
推荐指数
2
解决办法
2万
查看次数

获取未在FormType中声明的字段的值

我有一个声明的表单nameType.php,视图呈现所有字段,但我想手动添加另一个字段.

形成:

<form action="{{ path('create') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <input type="text" value="2">
   </form>
Run Code Online (Sandbox Code Playgroud)

并获取控制器中的值:

$form->bindRequest($request);
Run Code Online (Sandbox Code Playgroud)

如何收集控制器中输入的值?

symfony-forms symfony

16
推荐指数
2
解决办法
2万
查看次数

Symfony2:如何在自定义复合表单类型上使用约束?

这是一个我一直在讨厌的问题.请知道我还不是Symfony2专家,所以我可能在某个地方犯了一个菜鸟错误.

Field1:标准Symfony2 text字段类型

Field2:compoundtext字段+ checkbox字段的自定义字段类型字段)

预习

我的目标:autoValue实地工作中加入限制autoValue's text input child

约束不起作用的原因可能是因为NotBlank期望字符串值并且此表单字段的内部数据是数组array('input'=>'value', 'checkbox' => true).此数组值将转换回具有自定义的字符串DataTransformer.但我怀疑在根据已知约束验证字段后会发生这种情况.

正如您在注释代码中看到的那样,我已经能够在文本输入上获得约束,但是只有当硬编码到autoValue的表单类型中时,我才能根据主要字段的约束进行验证.

控制器和字段的我(简化)示例代码:

.

控制器代码

设置快速表单以进行测试.

<?php
//...
// $entityInstance holds an entity that has it's own constraints 
// that have been added via annotations

$formBuilder = $this->createFormBuilder( $entityInstance, array(
    'attr' => array(
        // added to disable html5 validation
        'novalidate' => 'novalidate'
    )
));

$formBuilder->add('regular_text', 'text', array(
    'constraints' => array(
        new \Symfony\Component\Validator\Constraints\NotBlank() …
Run Code Online (Sandbox Code Playgroud)

php constraints symfony-forms symfony symfony-2.4

16
推荐指数
1
解决办法
2万
查看次数