Заставьте форму администратора прослушивать проверку от дочерних администраторов

Я добавляю функции в приложение на основе 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;
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
201
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Спасибо за Ваш ответ. Я пробовал это, но при сохранении все еще получаю исключение ModelManagerException. Я не уверен, где перехватить это исключение, иначе я бы это сделал.

Patrick 03.07.2018 15:12

Можете ли вы поделиться соответствующими частями ваших сущностей? возможно, попробуйте очистить кеш и повторите попытку.

Jeroen 03.07.2018 16:14

убедитесь, что вы добавили «@Assert \ Valid» к свойству синонимов в вашем классе страницы вместо «@Assert \ NotBlank», как в моем примере.

Jeroen 03.07.2018 16:45

Другие вопросы по теме