Как установить минимальное значение для поля в форме? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть форма с целочисленным полем - цена.

$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

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Вы можете использовать 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
    ]);
1 голос
/ 29 мая 2019

Согласно https://github.com/symfony/symfony/issues/3533 вы можете использовать min и max для 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
    ]);
...