我有一个包含许多字段和验证组的表单,这些字段也包含一些视图数据转换器.
我需要部分抑制验证表单(基于提交的数据的组):
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) 我正在使用Symfony2的Bootstrap表单主题(bootstrap_3_ horizontal _layout.html.twig):
我在表单上添加了两个按钮:
$builder
// some code here ...
->add('save', 'submit', ['label' => 'save'])
->add('cancel', 'submit', ['label' => 'cancel']);
Run Code Online (Sandbox Code Playgroud)
如何实现?
在尝试构建表单时,我收到此错误:
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中成功地做到这一点; 做了什么破坏或我错过了什么?
我正在寻找一种扩展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(仅供记录).