Php Symfony-基于基础数据动态添加表单验证
我有一个实体类Php Symfony-基于基础数据动态添加表单验证,php,symfony,symfony2-forms,Php,Symfony,Symfony2 Forms,我有一个实体类quote,它有一个字段amount,该字段应该小于控制器的newAction中设置的动态值 我正在formtype类中添加amount字段,其中的buildForm方法如下 public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('truckType') ->add('costPerTruck')
quote
,它有一个字段amount
,该字段应该小于控制器的newAction中设置的动态值
我正在formtype类中添加amount字段,其中的buildForm方法如下
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('truckType')
->add('costPerTruck')
->add('amount');
$builder->addEventSubscriber(new AddQuoteDetailFieldSubscriber());
}
class AddQuoteDetailFieldSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(FormEvents::PRE_SET_DATA => 'preSetData');
}
public function preSetData(FormEvent $event)
{
$product = $event->getData();
$form = $event->getForm();
if (null !== $product && null !== $product->getLimit()) {
if($product->getLimit() > 0){
$form->add('amount',null, array(
'data' => $product->getLimit(),
'constraints' => array(
new LessThanOrEqual(array('value' => $product->getLimit())),
)));
}
}
}
}
我的订户类别如下
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('truckType')
->add('costPerTruck')
->add('amount');
$builder->addEventSubscriber(new AddQuoteDetailFieldSubscriber());
}
class AddQuoteDetailFieldSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(FormEvents::PRE_SET_DATA => 'preSetData');
}
public function preSetData(FormEvent $event)
{
$product = $event->getData();
$form = $event->getForm();
if (null !== $product && null !== $product->getLimit()) {
if($product->getLimit() > 0){
$form->add('amount',null, array(
'data' => $product->getLimit(),
'constraints' => array(
new LessThanOrEqual(array('value' => $product->getLimit())),
)));
}
}
}
}
问题是限额被正确设置并显示在“金额”字段中,但约束似乎没有做任何事情,而是允许大于限额的值通过
如果我在buildForm方法中添加一个限制,如
$builder
->add('truckType')
->add('costPerTruck')
->add('amount',null,array('constraints' => array(
new LessThanOrEqual(array('value' => 10)),
)));
然后,该字段将被约束
有人知道我做错了什么吗?或者其他实现这一目标的方法
谢谢 可能是因为该字段已创建。我建议你看一下第章,它可能对你来说是正确的。是的,我也认为调用
$form->remove('amount')在$form->add
之前的code>应该可以做到这一点。(请注意,在这种情况下,自定义视图和模型转换器将丢失。为了重新分配它们,您必须为“金额”字段创建自定义FormType。)