如何为表单中的字段设置最小值?

How to set min value for field in form?

我有带整数字段的表格 - 价格。

$builder->add('list',
            CollectionType::class,
            [
                'required' => false,
                'allow_add' => true,
                'error_bubbling' => true,
            ])
            ->add('price',
            IntegerType::class,
            [
                'required' => false,
                'error_bubbling' => true,
            ]);

如何设置,例如,为了验证我需要价格为 0 或更高的最小值?

我试过这个,但没用:

'constraints' => [
new GreaterThanOrEqual(50)
 ],

感谢大家的帮助。

控制器动作

 public function getProductAction(Request $request)
    {
        $variables = $request->get('list');

        $price = $request->get('price');

        $form = $this->createForm(ProductForm::class, null, ['csrf_protection' => false, 'allow_extra_fields' => true]);

        $form->submit(['variables' => $variables, 'prices' => $price]);

        if(!$form->isValid()) {

            $errors = '';

            foreach ($form->getErrors() as $error) {
                $errors = $error->getMessage();
            }

            return new JsonResponse([
                'errors' => $errors
            ],Response::HTTP_BAD_REQUEST);
        } else {

            $product = $this->getDoctrine()
                ->getRepository(Product::class)
                ->findByListAndPrice($list, $price);

            if (!$product) {
                return new JsonResponse([
                    'errors' => 'Product not found.'
                ],Response::HTTP_BAD_REQUEST);
            }

            return new JsonResponse($product);
        }
    }

表单不验证,不显示错误,$form->isValid() === true

根据 https://github.com/symfony/symfony/issues/3533,您可以使用 minmax 作为 IntegerType,即使文档可能没有提到这一点。

$builder->add('list',
    CollectionType::class,
    [
        'required' => false,
        'allow_add' => true,
        'error_bubbling' => true,
    ])
    ->add('price',
    IntegerType::class,
    [
        'required' => false,
        'error_bubbling' => true,
        /*'min' => 50*/
        'attr' => [
          'min' => 50
        ]
    ]);

编辑:根据文档,'min' 属性 必须在 'attr' 标签内。这将在 HTML.

的输入中添加最小值

您可以使用 RangeType 而不是 IntegerType。

use Symfony\Component\Form\Extension\Core\Type\RangeType;
// ...

$builder->add('list',
    CollectionType::class,
    [
        'required' => false,
        'allow_add' => true,
        'error_bubbling' => true,
    ])
    ->add('price',
    RangeType::class,
    [
        'required' => false,
        'error_bubbling' => true,
        'min' => 0,
        'max' => 50
    ]);