Проверка Symfony2 с использованием аннотации Assert не работает

Обновление: так как у меня нет ответов, я переписал весь пост, используя гораздо более простой пример. Надеюсь, это поможет выявить проблему.

У меня проблемы с проверкой формы. Я могу заставить утверждение NotBlank () работать, но Type () не работает для меня. Во-первых, вот код:

/* ...\Entity\LineItem.php */ <?php namespace Rialto\ExperimentBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class LineItem { /** * @var integer * @Assert\NotBlank() * @Assert\Type(type="integer") */ private $quantity = 0; public function getQuantity() { return $this->quantity; } public function setQuantity($quantity) { $this->quantity = $quantity; } } /* ...\Controller\DefaultController.php */ <?php namespace Rialto\ExperimentBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; use Rialto\ExperimentBundle\Entity\LineItem; class DefaultController extends Controller { public function indexAction() { return $this->testValidation(); } private function testValidation() { $item = new LineItem(); $form = $this->createFormBuilder($item) ->add('quantity', 'integer') ->getForm(); $request = $this->getRequest(); if ( $request->getMethod() == 'POST') { $form->bindRequest($request); if ( $form->isValid() ) { return new Response('Form is valid.'); } } return $this->render('RialtoCoreBundle:Form:basicForm.html.twig', array( 'form' => $form->createView(), )); } } 

Когда я оставляю пустой вход, я получаю сообщение об ошибке, как и ожидалось. Но когда я ввожу «adsf» во вход, я вижу вывод «Форма действительна». Я пробовал то же самое, используя проверку YAML и PHP. Может ли кто-нибудь увидеть, что я сделал неправильно?

Спасибо, – Ян

Related of "Проверка Symfony2 с использованием аннотации Assert не работает"

Причина, по которой это не работает, как и ожидалось, объясняется ошибкой в ​​реализации заглушки Symfony в NumberFormatter. Реализация stub будет использоваться, если у вас нет встроенного расширения PHP.

В принципе, числоформат числа пытается проанализировать значение и возвращает false, когда обнаруживает, что он начинается с нечислового символа . Он должен установить код ошибки, который затем инициирует исключение в трансформаторе, но, поскольку он этого не делает, используется логическое значение false и получает typecast для целого числа (что само по себе является ошибкой). Таким образом, ваш «adsf» вход заканчивается как целое число 0 и передает утверждение типа.

Я нашел отчет об ошибке, и я отправил запросы на загрузку против него для двух ошибок.

Вы можете использовать эти исправления, чтобы исправить проблему, или вы могли бы обойти ее сейчас, добавив утверждение Min с лимитом, установленным в 1.

Может быть, вы должны изменить это:

 $this->isPost( $request ) 

Для этого:

 $request->isPost() 

Это просто предположение … Но я надеюсь, что это поможет!