标签: symfony2-forms

允许在选择字段类型中添加新值

我使用表单组件并在表单上选择字段类型,该表单将呈现给选择字段.在客户端我使用select2插件,它使用tags: true允许在其中添加新值的设置初始化选择.但是,如果我添加一个新值,那么服务器上的验证将失败并出现错误

该值无效.

因为新值不在选择列表中.

有没有办法允许添加新值来选择字段类型?

symfony jquery-select2 symfony2-forms

11
推荐指数
2
解决办法
6920
查看次数

如何在Symfony2中"动态"禁用一个变换器验证错误

我有一个包含许多字段和验证组的表单,这些字段也包含一些视图数据转换器.

我需要部分抑制验证表单(基于提交的数据的组):

use AppBundle\Entity\Client;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

// ...
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'validation_groups' => function (FormInterface $form) {
            $data = $form->getData();

            if (Client::TYPE_PERSON == $data->getType()) {
                return array('person');
            }

            return array('company');
        },
    ));
}
Run Code Online (Sandbox Code Playgroud)

当您这样做时,表单仍将运行基本完整性检查(禁用验证)和来自变换器的验证错误,它们将被抛出(创建变换器).

使用POST_SUBMIT事件,并防止ValidationListener被称为(抑制表单验证):

use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
        $event->stopPropagation();
    }, 900); // Always set a higher priority than …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony2-forms symfony-validator

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

连续两个按钮(Symfony2的Bootstrap表单主题)

我正在使用Symfony2的Bootstrap表单主题(bootstrap_3_ horizo​​ntal _layout.html.twig):

我在表单上添加了两个按钮:

$builder
    // some code here ... 
    ->add('save', 'submit', ['label' => 'save'])
    ->add('cancel', 'submit', ['label' => 'cancel']);
Run Code Online (Sandbox Code Playgroud)

它们以这种方式呈现: 在此输入图像描述

我需要它们位于同一行: 在此输入图像描述

如何实现?

symfony twig twitter-bootstrap symfony2-forms

4
推荐指数
1
解决办法
4948
查看次数

使用Symfony3组件时,Silex FormServiceProvider无法加载"form"类型

在尝试构建表单时,我收到此错误:

FormRegistry.php第87行中的InvalidArgumentException:无法加载类型"form"

我已经注册了FormServiceProvider,TranslationServicerProvider和ValidatorServiceProvider.

这是我的代码的相关部分:

        $this->_form = $this->_app['form.factory']->createBuilder('form', $this->_map())
        ->add('firstName', 'text', [
            'constraints' => [new Assert\NotBlank()]
        ])
        ->add('lastName', 'text', [
            'constraints' => [new Assert\NotBlank()]
        ])
        ->add('email', 'text', [
            'constraints' => [new Assert\Email()]
        ])
        ->getForm();
Run Code Online (Sandbox Code Playgroud)

以下是我正在使用的相关组件的版本号:

silex/silex v1.3.4基于Symfony组件的PHP微框架symfony/security-core
v3.0.1 Symfony安全组件 - 核心库symfony/security-csrf v3.0.1 Symfony安全组件 - CSRF库symfony/translation v3.0.1 Symfony Translation Component symfony/twig-bridge v3.0.1 Symfony Twig Bridge symfony/validator v3.0.1 Symfony Validator Component symfony/form v3.0.1

我能够在之前版本的Silex中成功地做到这一点; 做了什么破坏或我错过了什么?

php symfony silex symfony2-forms

3
推荐指数
2
解决办法
1924
查看次数

扩展Doctrine2形式的EntityType

我正在寻找一种扩展Symfony 2 EntityType的方法

Symfony\Bridge\Doctrine\Form\Type\EntityType
Run Code Online (Sandbox Code Playgroud)

就像在延伸这一个的新类型中,没有创造FormTypeExtension- 而我无法弄明白.有谁知道这样做的正确方法?

我试过这样简单地扩展它:

class NestedEntityType extends EntityType {

    public function getName() {
        return $this->getBlockPrefix();
    }

    public function getBlockPrefix() {
        return 'nested_entity';
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在奏鸣曲管理课我有:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper->add('types', NestedEntityType::class, [
        'label' => false,
        'multiple' => true,
        'expanded' => true,
        'by_reference' => false
    ]);
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是它会导致致命错误:

可捕获的致命错误:传递给Symfony\Bridge\Doctrine\Form\Type\DoctrineType :: __ construct()的参数1必须实现接口Doctrine\Common\Persistence\ManagerRegistry,没有给定,调用

我需要保留整个功能EntityType,除了一个例外 - 它的呈现方式.这就是为什么我需要扩展这种类型(我在其他领域使用它,所以我不能只为它修改模板!).

我正在使用Symfony 2.8(仅供记录).

php symfony doctrine-orm sonata-admin symfony2-forms

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