Я настроил свою сущность на обратный вызов жизненного цикла для проверки, имитирующей поля ENUM из mySQL.
Он работает нормально, за исключением того, что при возникновении ошибки он не предоставляет имя свойства и, следовательно, не соответствует формату ошибок, поступающих из Assert.
В приведенном ниже примере первая ошибка исходит от обратного вызова и не содержит информации о свойстве, а остальные генерируются Assert и включают рассматриваемое свойство:
Использованный комплект\адконтроллер
$errors = $this->form_errors->getErrorMessages($form);
\Doctrine\Common\Util\Debug::dump($errors);
array(3) { [0]=> string(14) "Недействительные двери!" ["powerHp"]=> array(1) { [0]=> string(32) "Это значение должно быть 50 или больше." } ["price"]=> array(1) { [0]=> string(34) "Это значение должно быть 1000 или больше." } }
Я могу знать, откуда возникает ошибка, из-за сообщения, но это также отбрасывает функцию, которая генерирует переменную ошибок для вывода пользователю.
Настройка выглядит следующим образом:
ИспользуетсяBundle\Entity\Ad
namespace UsedBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Component\Validator\Mapping\ClassMetadata;
/**
* @ORM\Entity(repositoryClass="UsedBundle\Repository\AdRepository")
* @ORM\HasLifecycleCallbacks
* @ORM\Table(name="ads")
*/
class Ad
{
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(type="smallint",length=4,unique=true,options={"unsigned":true})
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
......
public static $valid_doors = array(
'2' => '2',
'3' => '3',
'4' => '4',
'5' => '5',
);
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if (!in_array($this->getdoors(), self::$valid_doors)) {
$context->buildViolation('Invalid doors!')
->atPath('doors')
->addViolation();
}
}
}