'How to set min value for field in form?

I have form with integer field - price.

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

How to set, for example, for validation i need min value for price 0 or greater?

I tried this one, but it's not work:

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

Thanks for all help.

controller Action

 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 not validate, and don't show errors, $form->isValid() === true



Solution 1:[1]

According to https://github.com/symfony/symfony/issues/3533 you can use min and max for the IntegerType even though the documentation might not mention this.

$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
        ]
    ]);

EDIT: According to the documentation the 'min' property has to be inside 'attr' tag. This will add the min inside the input in the HTML.

Solution 2:[2]

You can use RangeType instead of 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
    ]);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 SpicyTacos23
Solution 2 Mitesh Vasava