Как добавить пользовательскую ссылку или кнопку в панель управления SonataAdminBundle в Symfony2

Я новичок в symfony2 и SonataAdminBundle.

Я добавил 3 объекта в панель управления SonataAdminBundle, и они появляются успешно.

Объекты отображаются со ссылками по умолчанию – «Добавить новый» и «Список».

Я хочу иметь возможность сделать следующее

  1. Я хочу добавить третью ссылку на одно из объектов на панели управления.
  2. Я хочу, чтобы добавить ссылку на кнопки, расположенные над сеткой, на странице списка по умолчанию.
  3. Я хочу иметь возможность добавлять / настраивать ссылки, появляющиеся в форме «Редактировать» или «Создать новую страницу»

Я не смог найти способ сделать что-либо из вышеперечисленного, искал часы, любая помощь будет высоко оценена.

Благодарю.

Чтобы отображать пользовательские элементы в dashbord, Sonata Admin использует блок соната Sonata Block Bundle. Чтобы добавить пользовательскую ссылку или кнопку, вам нужно создать новый блок, используя блокнот сонаты. Основной шаблон (dashboard.html.twig) из Admin Bundle выполняет итерацию блоков, которые настроены для запуска (в config.yml приложения). Тем не менее, Admin Bundle выполняет итерацию всех блоков вашего объекта в шаблоне block_admin_list.html.twig. Создавая свой шаблонный шаблон, отсюда вы можете взять макет, чтобы обернуть свои пользовательские группы (разделы) и кнопки, чтобы они были такими же, как и у групп сущностей.

Хорошо, это было введение.

Например, мы хотим создать пользовательскую рассылку новостей.

Есть шаги:

  1. создать новый class блоков, который реализует BlockBundleInterface
  2. создать новый шаблон блока
  3. создать услугу блока (читать и понимать, что такое услуги в библиотеке Symfony 2)
  4. добавление вновь созданного сервиса в конфигурацию сокета Sonata Block Bundle
  5. добавить вновь созданный сервис в конфигурацию администрирования Sonata Admin
  6. войдите в панель управления и наслаждайтесь новой группой / кнопкой / ссылкой / фактом-вы-put-in-your-block-template 🙂

Ad1) Создать новый class блоков

Общая инструкция: http://sonata-project.org/bundles/block/master/doc/reference/your_first_block.html

Мой файл выглядит следующим образом:

getDefaultSettings(), $block->getSettings()); return $this->renderResponse('InstitutoStoricoNewsletterBundle:Block:block_my_newsletter.html.twig', array( 'block' => $block, 'settings' => $settings ), $response); } } 

Я добавил несколько строк, считывающих файлы кода Sonata Media Bundle.

Ad2) Создать новый шаблон блока

Макет, который я взял из block_admin_list.html.twig пакета Sonata Admin.

Мой файл выглядит следующим образом:

 {% extends 'SonataBlockBundle:Block:block_base.html.twig' %} {% block block %} 
Newsletter - inviare
{% endblock %}

Ad3) Создать услугу блока

В вашем пакете есть файл, в котором вы объявляете сервисы (services.yml или admin.yml). Без разницы. Но важно, чтобы он был включен в config.yml вашего приложения в разделе «Импорт».

Объявление моей службы выглядит следующим образом:

 sonata.block.service.newsletter: class: InstitutoStorico\Bundle\NewsletterBundle\Block\NewsletterBlockService arguments: [ "sonata.block.service.newsletter", @templating ] tags: - { name: sonata.block } 

Ad4) Добавить вновь созданный сервис в конфигурацию сокета Sonata Block Bundle

Эта конфигурация помещается в config.yml вашего приложения.

Моя конфигурация выглядит так:

 #Sonata Block Bundle sonata_block: default_contexts: [cms] blocks: sonata.admin.block.admin_list: contexts: [admin] sonata.block.service.text: ~ sonata.block.service.action: ~ sonata.block.service.rss: ~ sonata.block.service.newsletter: ~ 

Ad5) Добавить вновь созданный сервис в конфигурацию пакета администрирования Sonata

Эта конфигурация помещается в config.yml вашего приложения.

Моя конфигурация выглядит так:

 # Sonata Admin Generator sonata_admin: ... dashboard: blocks: # display a dashboard block - { position: left, type: sonata.admin.block.admin_list } - { position: left, type: sonata.block.service.newsletter} 

Ad6) Войдите в панель инструментов и наслаждайтесь

Моя панель инструментов выглядит так:

http://img805.imageshack.us/img805/2789/immaginezuq.png

Это все. Похож на сложный, но быть искренним, это не так много. Важно, что это чистый способ изменения страницы вашей панели управления без переопределения целых шаблонов без особой необходимости. Все эти Il изучили исходный код Admin Bundle 🙂 Целый день

У меня были проблемы с выполнением метода (я использую Sonata 2.3.x). Вот код, который работает для меня.

Примечание: BlockContextInterface и $ blockContext-> getBlock ():

  public function execute(BlockContextInterface $blockContext, Response $response = null) { // merge settings $settings = array_merge($this->getDefaultSettings(), $blockContext->getSettings()); return $this->renderResponse('bundleName:Block:templateName.html.twig', array( 'block' => $blockContext->getBlock(), 'settings' => $settings ), $response); } 
  • Symfony2 и Doctrine - Ошибка: Недействительный метод PathExpression. Должно быть выражение StateFieldPathExpression
  • Symfony2 переписать правила .htaccess app.php
  • Symfony 2: Как проверить, не вошел ли пользователь внутри шаблона?
  • передача данных с controllerа на тип symfony2
  • Утечка памяти Symfony2 Doctrine2 / превышение предела памяти
  • Symfony2 Настройка выбора поля выбора по умолчанию
  • Нет расширения, способного загрузить конфигурацию для «facebookbundle» symfony2
  • Передача пользовательских параметров в форму symfony2
  • MySQL Нелегальное сочетание сортировок
  • Symfony2: как вручную вывести пользователя вручную в controller?
  • Какая новая структура каталогов Symfony 3?
  • Давайте будем гением компьютера.