Я добавляю функции в приложение на основе Symfony 2.8 и Sonata.
Приложение уже имеет сущность Page и класс PageAdmin. Я хочу добавить вложенный набор сущностей синонимов на каждую страницу, поэтому я делаю метод configureFormFields()
моего PageAdmin следующим образом:
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title')
->add('synonym', 'sonata_type_collection', array(
'label' => "Synonyme",
'cascade_validation' => true,
'required' => false,
'error_bubbling' => true,
), array(
'edit' => 'inline',
'inline' => 'table'
))
->add('contentBlock', 'sonata_type_collection', array(
'label' => "Inhalt",
'cascade_validation' => true,
'required' => false
), array(
'edit' => 'inline',
'inline' => 'table'
))
;
}
... который обычно работает довольно хорошо. Единственная проблема состоит в том, что, когда я оставляю одно из обязательных полей в моем объекте Синоним пустым, приложение не выдает мне довольно красное «флэш» сообщение, отчитывающее меня за мое упущение. Вместо этого он выдает исключение и возвращает статус 500, что я не хочу видеть:
Не удалось обновить объект: Application \ Sonata \ PageBundle \ Entity \ Page 500
Внутренняя ошибка сервера - исключение ModelManagerException 3 связано:
NotNullConstraintViolationException »PDOException» PDOException »
...
SQLSTATE [23000]: нарушение ограничения целостности: 1048 «имя» столбца
не может быть нулевым
Есть ли способ сделать так, чтобы пропуски из полей синонимов были помечены для пользователя лучше, чем выбрасывание, исключение и возвращение статуса 500?
=====
Обновление 1: вот содержимое метода configureFormFields () в моем классе SynonymAdmin:
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('name', null, ['label' => 'Name *', 'required' => true, 'error_bubbling' => true,])
->add('title', null, ['label' => 'Titel', 'required' => false, 'error_bubbling' => true,])
->add('visible', null, ['label'=>'Sichtbarkeit', 'required' => false, 'error_bubbling' => true,])
;
}
Обновление 2: вот определение синонимов в моем классе сущностей.
/**
* @var ArrayCollection
*
* @Assert\NotBlank
*
*/
private $synonyms;
... и от Synonym.php:
/**
* @var string
*
* @Assert\NotBlank
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;