Нужно выполнить несколько шагов:
1) create new block class that implements BlockBundleInterface
<?php namespace Acme\DemoBundle\Block; use Symfony\Component\HttpFoundation\Response; use Sonata\AdminBundle\Form\FormMapper; use Sonata\AdminBundle\Validator\ErrorElement; use Sonata\BlockBundle\Model\BlockInterface; use Sonata\BlockBundle\Block\BaseBlockService; class NewsletterBlockService extends BaseBlockService { public function getName() { return 'My Newsletter'; } public function getDefaultSettings() { return array(); } public function validateBlock(ErrorElement $errorElement, BlockInterface $block) { } public function buildEditForm(FormMapper $formMapper, BlockInterface $block) { } public function execute(BlockInterface $block, Response $response = null) { // merge settings $settings = array_merge($this->getDefaultSettings(), $block->getSettings()); return $this->renderResponse('InstitutoStoricoNewsletterBundle:Block:block_my_newsletter.html.twig', array( 'block' => $block, 'settings' => $settings ), $response); } }
2) create new block template
{% extends 'SonataBlockBundle:Block:block_base.html.twig' %} {% block block %} <table class="table table-bordered table-striped sonata-ba-list"> <thead> <tr> <th colspan="3">Newsletter - inviare</th> </tr> </thead> <tbody> <tr> <td> <div class="btn-group" align="center"> <a class="btn btn-small" href="#">Servizio Newsletter</a> </div> </td> </tr> </tbody> </table> {% endblock %}
3) create block service (read and understand what are services in Symfony 2 library)
sonata.block.service.newsletter: class: Acme\DemoBundle\Block\NewsletterBlockService arguments: [ "sonata.block.service.newsletter", @templating ] tags: - { name: sonata.block }
4) add newly created service to Sonata Block Bundle configuration
#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: ~
5) add newly created service to Sonata Admin Bundle configuration
# 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}