Администратор сонаты: добавьте настраиваемые триггеры/действия для отображения/редактирования действия

Я использую SonataAdminBundle для управления объектами в своем приложении. Администраторы сайта могут добавлять видео, и некоторые из них сначала должны быть одобрены их докладчиками. Уже работает система авторизации - у меня есть рабочий код, который будет генерировать специальную ссылку и уведомлять оратора, который может одобрить или отклонить видео, и автоматически уведомлять администраторов.

Я хотел бы настроить свой раздел admin, поэтому рядом с видео будет кнопка ask for authorization. Я в порядке с ним в действии списка (/admin/acme/videos/list) или в действии редактирования где-то в правом-nav (/admin/acme/videos/x/edit/)

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

Один из вариантов - использовать крюк preUpdate и добавить флажок к действию редактирования, но кнопка будет намного приятнее.

Ответ 1

Чтобы добавить действие для формы редактирования

Добавьте в свой класс администратора:

protected function configureSideMenu(MenuItemInterface $menu, $action, Admin $childAdmin = null)
{
    if (!$childAdmin && !in_array($action, array('edit'))) {
        return;
    }
    $admin = $this->isChild() ? $this->getParent() : $this;
    $id = $admin->getRequest()->get('id');
    $menu->addChild('My action', array('uri' => 'http://google.com?id=' . $id));
}

Он создаст меню левой стороны для таких действий, как /admin/acme/videos/x/edit/. Имея id для текущего элемента, вы можете создать любой настраиваемый URL.

Чтобы добавить действие для списка: В вашем файле администратора добавьте

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->add('_action', 'actions', array(
            'actions' => array(
                'act' => array('template' => 'AcmeBundle:Video:my_temp.html.twig'),
            )
        ))
    ;
}

Он добавит столбец со ссылками, тогда вам нужно создать шаблон для своего столбца, что-то вроде

<a href="{{ admin.generateObjectUrl('delete', object) }}" class="delete_link" title="{% trans from 'SonataAdminBundle' %}action_delete{% endtrans %}">
    <img src="{{ asset('bundles/sonataadmin/famfamfam/delete.png') }}" alt="{% trans from 'SonataAdminBundle' %}action_delete{% endtrans %}" />
</a>

Все примеры взяты из ссылки, которую вы предоставили. Надеюсь, что это поможет.