Проверка Symfony2 с использованием аннотации Assert не работает - PullRequest
1 голос
/ 25 октября 2011

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

У меня проблемы с проверкой формы. Я могу заставить утверждение 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. Кто-нибудь может увидеть, что я сделал неправильно?

Спасибо, - Ян

Ответы [ 2 ]

9 голосов
/ 30 октября 2011

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

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

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

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

0 голосов
/ 25 октября 2011

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

$this->isPost( $request )

Для этого:

$request->isPost()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...