标签: symfony-forms

Symfony2 Collection Form不填充连接列

我有2个实体,Product和Product_Types.

这是他们之间的关系:

manyToOne:
    product:
      targetEntity: Product
      joinColumn:
        name: product_id
        referencedColumnName: id
Run Code Online (Sandbox Code Playgroud)

当我添加新产品时,我希望能够使用相同的表单向此产品添加类型.

            ->add('productColor', 'collection', array("type" => new ProductColorType(), "allow_add" => true, 'prototype' => true))
Run Code Online (Sandbox Code Playgroud)

这就是我嵌入表单的方式.

'data_class'是为ProductType和ProductTypesType设置的,当我添加一个带有类型的新产品时,一切都很好,除了一件事,symfony/doctrine没有设置'product_id'列,所以之间没有任何关系我的产品及其类型.

symfony-forms symfony

5
推荐指数
2
解决办法
871
查看次数

Symfony2:标签内的自定义HTML

有没有办法用Symfony 2表单在标签内添加HTML?

我想要:

<label for="myfield"><span class="photo">My label</span></label>
Run Code Online (Sandbox Code Playgroud)

我怎么写呢?这些想法都没有像预期的那样正常运作:

<span class="photo">{{ form_label(form.myfield) }}</span>
Run Code Online (Sandbox Code Playgroud)

要么

{{ form_label(form.myfield, '<span class="photo">'~myfield~'</span>') }}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,A

symfony-forms symfony

5
推荐指数
1
解决办法
9375
查看次数

使用制表符编辑表单中的Symfony2大实体

我正在使用Sf2的表单构建器构建表单.

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('firstName')
            ->add('lastName')...
Run Code Online (Sandbox Code Playgroud)

实体有很多字段,我想把它们放在jQuery UI标签中.但在twig模板中,我想使用单个命令

<form action="#" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <input type="submit" value="Save"/>
</form>
Run Code Online (Sandbox Code Playgroud)

什么是最佳解决方案?

编辑**

为了更加坦诚:我有4个字段:firstName,lastName,birthDate,deathDate.我希望前两个字段位于第一个选项卡上,最后两个字段位于第二个选项卡上.我想继续像前面提到的那样渲染表单.

我有一个解决方案来创建我自己的字段,而不是连接到底层对象,它将呈现所需的html标签(h3,div等).

forms tabs symfony-forms symfony

5
推荐指数
1
解决办法
4836
查看次数

在Symfony2中删除/取消设置表单字段

我正在努力扩展FosUserBundle注册表.我需要删除/取消设置用户名字段(因为我使用电子邮件作为用户名).

有没有办法从我扩展的表单中删除字段?

symfony-forms symfony fosuserbundle

5
推荐指数
1
解决办法
8358
查看次数

Symfony2使用相同的属性路径嵌入表单 - 错误冒泡问题

我已将用户的帐户区域拆分为不同的表单,然后在注册表单中,我将这些位一起拉出来,如下所示:

class RegistrationFormType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('email', 'email', array(
            'label' => '* Email address:'
        ))
        ->add('account_personal', 'my_personalinfo_form', array(
            'property_path' => 'account'
        ))
        ->add('account_contact', 'my_contactinfo_form', array(
            'property_path' => 'account'
        ))
    ;
}
Run Code Online (Sandbox Code Playgroud)

问题是错误消息account_personal正在冒泡到表单的顶部.例如,如果在个人信息表单中将名字留空,请输入"请输入您的名字"."个人"和"联系"表单在自己的页面上以自己的形式正常工作.

错误消息account_contact很好,并显示在正确的字段旁边.

但是,如果我在->add上面交换两个位(account_contact首先是这样),那么问题就会反转; account_personal现在工作的错误消息在相应的字段旁边显示正常,但现在错误account_contact被冒泡到顶部!

任何建议非常感谢!

-----编辑-----

个人信息表:

class PersonalInfoType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title', 'text')
        ->add('first_name', 'text', array(
            'required' => true,
            'label' => …
Run Code Online (Sandbox Code Playgroud)

nested-forms symfony-forms symfony symfony-2.1

5
推荐指数
1
解决办法
4828
查看次数

如果兄弟(复选框)字段包含'false',则跳过验证

我有一个包含复选框和"值字段"的表单.值字段可以是任何内容,文本框,复合字段,集合 - 任何东西.

表单可能如下所示,例如:

field_1_label    enabled    [x]
                 value      [________]

field_2_label    enabled    [x]
                 value      sub_field_1    [________]
                            sub_field_2    [________]

field_3_label    enabled    [x]
                 value      [________]
Run Code Online (Sandbox Code Playgroud)

当"启用"字段包含时true,一切正常.当"enabled"字段包含时false,我想禁用值字段及其子字段的验证.

因此,当取消选中"启用"时,我将有效地忽略该字段.我仍然会在表单中显示它,但我不会存储数据,我当然不希望它经过验证.

有没有人建议我怎么做?具体来说,我在验证系统忽略值字段任何潜在的子字段时遇到问题.

symfony-forms symfony

5
推荐指数
1
解决办法
5291
查看次数

在自定义字段类型上使用表单事件侦听器无法添加其他字段

我创建了一个自定义字段类型,默认情况下为1字段.选择该字段值后,事件侦听器已订阅该字段并被触发.如果该字段的值与我声明的任意值匹配,则假设将另一个字段添加到表单中.

问题是事件被触发,我可以在事件监听器中添加字段之前和之后调试,但是在返回表单时不会呈现新字段.

这是我试图做的简化版本.是的,我确实已将自定义字段类型正确注册为服务.

主表格类型

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('first_name','text')
       ->add('custom_field','my_custom_fields');
}
Run Code Online (Sandbox Code Playgroud)

然后是自定义类型:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('field_1','entity',array(/*My entity settings*/));

    $formModifier = function(FormInterface $form, $campaign) use($options) {
        $form->add('field_2', 'entity',array(/*my entity options*/))
        ->add('Save','submit',array('attr'=>array('class'=>'btn btn-primary')));
    };

    $builder->addEventListener(
        FormEvents::PRE_SET_DATA,
        function(FormEvent $event) use ($formModifier, $options) {
            // this would be your entity
            $entity = $event->getData();
            //var_dump($entity); exit; // This gets Hit
            if(!$entity || !($entity instanceof My\Entity\Class) ){return;}
                $formModifier($event->getForm(), $entity);
            }
        }
    );

    $builder->get('field_1')->addEventListener(
        FormEvents::POST_SUBMIT,
        function(FormEvent $event) use ($formModifier, $options) …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony symfony-2.3

5
推荐指数
1
解决办法
1174
查看次数

如何在没有Twig的情况下呈现独立的Symfony表单?

我有Symfony\Component\Form\FormView对象.如何在没有Twig和框架的情况下渲染它?

具体来说,我想在Concrete5自定义块类型中使用Symfony Form.

concrete5 symfony-forms concrete5-5.7

5
推荐指数
0
解决办法
616
查看次数

使用FOSRestBundle中的Symofny Forms处理POST请求

我不清楚如何使用带有FOSRestBundle的Symfony表单组件来创建用于创建资源的POST端点.

这是我在POST控制器操作中得到的:

//GuestController.php
public function cpostAction(Request $request)
{
    $data = json_decode($request->getContent(), true);

    $entity = new Guest();
    $form = $this->createForm(GuestType::class, $entity);

    $form->submit($data);

    if ($form->isValid()) {
        $dm = $this->getDoctrine()->getManager();
        $dm->persist($entity);
        $dm->flush();

        return new Response('', Response::HTTP_CREATED);
    }

    return $form;
}
Run Code Online (Sandbox Code Playgroud)

我所做的是:

  1. application/json向端点发送POST请求(/guests);
  2. 创建绑定到实体(Guest)的表单实例;
  3. 由于我正在发送JSON,我需要json_decode将请求提交给表单($form->submit($data)).

我有的问题:

  1. json_decode()Request内容提交到表单之前,我是否真的需要手动处理内容?使用FosRestBundle可以以某种方式自动化此过程吗?
  2. 是否可以将application/x-www-form-urlencoded数据发送到控制器操作并通过以下方式处理:

-

$form->handleRequest($request)
if ($form->isValid()) {
    ...
}
...
Run Code Online (Sandbox Code Playgroud)

我无法完成上述工作,表单实例从未提交过.

  1. 使用表单组件ParamConverter直接与验证器一起使用是否有任何优势- 这是一个想法:

-

/**
 * @ParamConverter("guest", converter="fos_rest.request_body")
*/
public function …
Run Code Online (Sandbox Code Playgroud)

rest symfony-forms symfony fosrestbundle

5
推荐指数
1
解决办法
1862
查看次数

如何在symfony表单的表单类型上使用组序列?

这个想法是首先验证是否所有必填字段都不为空。如果提供了所有必需的数据,则验证输入的值是否正确。组序列的通常情况。无论如何,即使所有字段均为空白,当我申请new GroupSequence(["Basic", "Strict"])validation_groups选项时,该表格仍然有效。如果将validation_groups值设置为["Basic", "Strict"]表单,则可以正确验证但具有所有约束,这不是我想要的。我究竟做错了什么?

这是我的代码:

class MyType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
                ->add("name", null, [
                    "constraints" => new NotBlank(["groups" => ["Basic"]])
                ])
                ->add("phone", MyPhoneType::class, [
                    "constraints" => [
                        new NotBlank(["groups" => ["Basic"]]),
                        new PhoneNumber(["groups" => ["Strict"])
                    ]
                ])
                ->add("email", EmailType::class, [
                    "constraints" => [
                        new NotBlank(["groups" => ["Basic"]]),
                        new Email(["groups" => ["Strict"]]),
                    ],
                ])
            ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            "validation_groups" => new GroupSequence(["Basic", …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony symfony-validator symfony-2.8

5
推荐指数
1
解决办法
659
查看次数