Как добавить ссылку, чтобы показать действие объекта отношения в поле отношения в SonataAdminBundle

Делаю админ панель в SonataAdminBundle. В действии User show у меня есть полевые компании, которые возвращают массив компаний, назначенных пользователю. Это отношение OneToMany. UserCompany имеет user_id и company_id. Я хочу создать ссылку для каждого возвращаемого имени компании, которая указывает на действие его объекта. Это код из функции configureShowFields() в классе UserAdmin:

                ->with('Assigned organizers',['class' => 'col-md-6'])
                    ->add('companies', null, [
                        'label' => 'Organizers',
                    ])
                ->end()

Мне удалось создать ссылку в строковом поле, указывающую на отображение действия объекта, но свойство id берется из текущего представления объекта:

            ->with('Address', ['class' => 'col-md-6'])
                ->add('userProfile.locality', 'url', [
                    'route' => [
                        'name' => 'admin_app_employee_show',
                        'identifier_parameter_name' => 'id'
                    ],
                    'label' => 'Localiy',
                ])

Более того, Sonata Admin создает ссылки на связанные поля, когда связь прямая, например: В компании много сотрудников. Затем в поле «Компания» показать действие в поле «Сотрудники» я вижу массив со ссылками, уже ведущими к редактированию действия объекта «Сотрудник».

Возможно, есть возможность переопределить шаблон для этого поля, но мне это кажется неясным, так как в документации нет более сложных примеров. Вот как я пытался проверить переопределение шаблона поля:

                ->add('userProfile.street', null, array(
                    'label' => 'Street',
                    'template' => 'custom-field.html.twig',
                ))

Расположение шаблона: App/templates/Admin/

Любая помощь приветствуется


person Dave    schedule 18.09.2019    source источник
comment
SonataAdmin создал ссылку на эти поля, когда я добавил сущность UserCompany в sonata_admin.yaml и настроил ее как UserCompanyAdmin, которая является связующим звеном между компанией и пользователем. Но ссылки указывают на представление редактирования UserCompany. Как присвоить значение route_name в шаблоне show_one_to_many.html.twig? Или в configureShowFields?   -  person Dave    schedule 19.09.2019


Ответы (1)


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

            ->with('Assigned events', ['class' => 'col-md-6'])
                ->add('events', null, [
                    'route' => [
                        'name' => 'show'
                    ],
                    'label' => 'Events',
                ])
            ->end()

Вы также можете изменить тип поля отношения, например, «многие_к_одному» вместо null, что может помочь в некоторых случаях.

person Dave    schedule 25.09.2019