FOSUserBundle не работает Проверка
Я использую symfony 3.3 и php 7.0 с версией FOSUserBundle 2.1.1, и я просто осознаю, что в User Entity, если вы просто добавите в параметры установщика подсказку типа, например, такую ... проверка не будет выполнена.
<?php
namespace AppBundle\Entity;
use ...;
/**
* @ORM\Entity
* @ORM\Table(name="`user`")
*/
class User extends BaseUser
{
/**
* @Assert\NotBlank()
* @var string
* @ORM\Column(type="string", nullable=false)
*/
private $firstName;
/**
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* @param string $firstName
*/
public function setFirstName(string $firstName) <- IF YOU ADD THIS STRING AS THE PARAMETER THE VALIDATION FAILS
{
$this->firstName = $firstName;
}
}
Итак, наконец, строка должна выглядеть следующим образом:
public function setFirstName($firstName)
Если кто-нибудь знает, как добавить шрифт без проблем с проверкой, будет приятно услышать новости.
3 ответа
Вот как Symfony Validator работает по умолчанию: сначала он устанавливает значение (null
например), тогда проверка выполняется, а не другим способом. Потому что ваш метод не принимает null
значения, только строки:
public function setFirstName(string $firstName)
Скорее всего, вы столкнулись с ошибкой Exception: Argument 1 passed to setFirstName() must be of the type string, null given
,
Чтобы преодолеть это, вы должны установить пустые данные для соответствующего поля в ''
или отсоедините ваши сущности от компонента формы. Или вы можете заставить метод принимать нулевые значения:
// php 7
public function setFirstName(string $firstName = null)
{
$this->firstName = (string) $firstName;
}
// >= php7.1
public function setFirstName(?string $firstName)
Я призываю вас прекратить смешивать сущности с формами и валидаторами. Ваш основной домен должен быть свободен от проблем такого низкого уровня (см. SRP от SOLID). Также по виду ваших сеттеров я могу сказать, что вы движетесь к антипаттерну под названием Anemic Domain Model.
Ваш метод setFirstName() в классе User должен быть совместим с FOSUserBundle/Model/UserInterface->setFirstName($username)
Интерфейс не имеет подсказки, поэтому вы не можете добавить подсказку в свой метод...
Очевидно, что FOSUserBundle не позволяет вводить подсказки в данный момент, если вы хотите использовать функцию проверки.