Сделайте форму администратора для прослушивания для проверки от дочерних администраторов - PullRequest
0 голосов
/ 03 июля 2018

Я добавляю функции в приложение на основе 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;

1 Ответ

0 голосов
/ 03 июля 2018

Для начала я думаю, что вы можете добавить 'required' => true к полям в вашем SynonymAdmin, чтобы вызвать проверку html5.

кроме того, что вы можете добавить правила проверки к вашей сущности, и Соната должна воспользоваться этим.

class Page
{
    /**
     * @Assert\Valid
     */
     protected $synonyms;
}

class Synonym
{
    /**
     * @Assert\NotBlank
     */
     private $name;
}
...