Symfony3 EasyAdmin Пользовательский столбец неавтоматического идентификатора

Я настроил таблицу базы данных, в которой значения идентификатора будут создаваться моим приложением, а НЕ базой данных.

/**
 * @ORM\Column(type="bigint", precision=14, options={"unsigned":true})
 * @ORM\Id()
 * @ORM\GeneratedValue("NONE")
 */
private $id;

Это прекрасно работает в Symfony, но я пытаюсь редактировать таблицу с помощью EasyAdmin, а EasyAdmin просто опускает столбец "id".

Я узнал, что я могу манипулировать конфигурацией редактирования / новых представлений из документации EasyAdmin.

Теперь у меня есть следующая конфигурация (упомянутая id для Product):

easy_admin:
    entities:
        - AppBundle\Entity\Category
        - AppBundle\Entity\Product

Вопрос:

1- Как мне настроить конфигурацию YAML так id поле тоже появится? Я узнал, что это частично работает:

easy_admin:
    entities:
        Product:
            class: AppBundle\Entity\Product
            form:
                fields:
                    - 'id'

Но это показывает только "id", есть ли способ сказать, что я хочу "id" в дополнение ко всем другим полям, чтобы мне не приходилось перечислять их вручную?

2. Моя исходная конфигурация использует список объектов с дефисом (-) в файле YAML. Я нуб YAML, когда я делаю Product: ключ Я больше не могу использовать тире, есть ли способ продолжать использовать список тире и просто сделать исключение для "Продукта"? Например, приведенный ниже код НЕ работает, он говорит, что это недопустимый YAML.

easy_admin:
    entities:
        - AppBundle\Entity\Category
        Product:
            class: AppBundle\Entity\Product
            form:
                fields:
                    - 'id'

Ну, а пока я решил проблему следующим образом и вообще отказался от тире:

easy_admin:
    entities:
        Category:
            class: AppBundle\Entity\Category
        Store:
            class: AppBundle\Entity\Store
        Product:
            class: AppBundle\Entity\Product
            edit:
                fields:
                    - { property: 'stores', label: 'Stores', type_options: { by_reference: false } }
            form:
                fields:
                    - 'id'
                    - 'name'
                    - 'category'
                    - 'stores'

1 ответ

Q1: вы можете использовать настройку на основе контроллеров сущностей. Смотрите документ здесь: https://symfony.com/doc/master/bundles/EasyAdminBundle/book/complex-dynamic-backends.html

app/config/config.yml
User:
    class: AppBundle\Entity\User
    controller: UserBundle\Controller\Admin\UserController

И тогда в вашем UserController вы можете иметь что-то вроде этого. Обратите внимание, что вы должны использовать точное имя сущности в сигнатуре метода: создайтеUser EntityFormBuilder в вашем случае

protected function createUserEntityFormBuilder($entity, $view)
{
    $form = parent::createEntityFormBuilder($entity, $view);

    $form->add('Anyfield', TextType::class, [
        'label' => 'id' // feel free to add other options
    ]); // add fieldlike you would do in FormType
    $form->remove('anyField');

    return $form;
}

Q2: я не могу ответить на этот вопрос наверняка. Я не использую "пунктирную" запись. Может быть, посмотрите на документ здесь: https://symfony.com/doc/current/components/yaml/yaml_format.html

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