Я добавляю функции в приложение на основе 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, чего я не хочу видеть:
Failed to update object: Application\Sonata\PageBundle\Entity\Page 500 Internal Server Error - ModelManagerException 3 linked Exceptions: NotNullConstraintViolationException » PDOException » PDOException »
...
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null
Есть ли способ сделать пропуски в полях синонимов, которые будут хорошо помечены для пользователя, вместо того, чтобы бросать и исключать и возвращать статус 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;






Для начала, я думаю, вы можете добавить 'required' => true в поля вашего SynonymAdmin, чтобы запустить проверку html5.
кроме того, вы можете добавить правила проверки к своей сущности, и Sonata должна это уловить.
class Page
{
/**
* @Assert\Valid
*/
protected $synonyms;
}
class Synonym
{
/**
* @Assert\NotBlank
*/
private $name;
}
Можете ли вы поделиться соответствующими частями ваших сущностей? возможно, попробуйте очистить кеш и повторите попытку.
убедитесь, что вы добавили «@Assert \ Valid» к свойству синонимов в вашем классе страницы вместо «@Assert \ NotBlank», как в моем примере.
Спасибо за Ваш ответ. Я пробовал это, но при сохранении все еще получаю исключение ModelManagerException. Я не уверен, где перехватить это исключение, иначе я бы это сделал.