Symfony 4 - целочисленная проверка - PullRequest
0 голосов
/ 27 августа 2018

У меня проблема с проверкой в ​​Symfony 4.

У меня есть такой код:

Это мой класс сущностей:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
 * @ORM\Entity(repositoryClass="App\Repository\AdminsRepository")
 * @UniqueEntity("email")
 * @UniqueEntity("login")
 */
class Admins
{
    .....
    /**
     * @ORM\Column(type="boolean")
     * @Assert\Type(
     *     type="integer",
     *     message="The value {{ value }} is not a valid {{ type }}."
     * )
     */
    private $type;

    public function getId(): ?int
    {
        return $this->id;
    }
    ...
    public function getType(): ?bool
    {
        return $this->type;
    }

    public function setType(bool $type): self
    {
        $this->type = $type;

        return $this;
    }
}

Это мой класс контроллера:

...

class AdminController extends AbstractController {
.......
    /**
     * @Route("/admin/add", name="admin_add")
     */
    public function add(Request $request) {
        $admins_object = new Admins();
        $form = $this->createFormBuilder($admins_object)
                ->add('first_name', TextType::class, ['label' => 'Imię'])
                ->add('last_name', TextType::class, ['label' => 'Nazwisko'])
                ->add('login', TextType::class, ['label' => 'Login'])
                ->add('email', EmailType::class, ['label' => 'E-mail'])
                ->add('password', TextType::class, ['label' => 'Hasło'])
                ->add('type', IntegerType::class, ['label' => 'Typ'])
                ->add('save', SubmitType::class, ['label' => 'Zapisz'])
                ->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($admins_object);
            $entityManager->flush();

            $this->addFlash(
                    'notice', 'Dane zostały poprawnie zapisane!'
            );
            return $this->redirect($request->getUri());
        }


        return $this->render('admin/add.html.twig', [
                    'form' => $form->createView()
        ]);
    }

.......

}

и мой взгляд:

{{ form(form, {'attr': {'novalidate': 'novalidate'}}) }}

Когда я помещаю какое-то целое число в поле типа (например, «1») - валидатор показывает мне сообщение типа «Поле типа не является допустимым целым числом ...».

Вы можете мне помочь? Почему целочисленная проверка не работает?

1 Ответ

0 голосов
/ 27 августа 2018

Это ожидаемое поведение, потому что TypeValidator, выполняемый Type, выполняет is_ type для значения.

Таким образом, типы int и integer будут выполнены с is_int и вернут false, как вы можете видеть в документации.

См .: https://secure.php.net/manual/en/function.is-int.php

Рабочий обходной путь будет использовать IntegerType вместо TextType.

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