2014-01-27 1 views
3

Я пытаюсь добавить настраиваемый блок в панель инструментов SonataAdminBundle. Я последовал за instructinos здесь (How to add custom link or button to SonataAdminBundle Dashboard in Symfony2), и я получаю следующее сообщение об ошибке:SonataAdmin - пользовательский блок, который я пытаюсь построить, не найден

RuntimeException: The block service `sonata.block.service.processManagement` does not exist 

Вот что я сделал. У меня есть файл с именем «ProcessManagementBlockService.php», который содержит следующее:

<?php 

namespace IMA\ProcessManagementBundle\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\BlockContextInterface; 
use Sonata\BlockBundle\Block\BaseBlockService; 

class ProcessManagementBlockService 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(BlockContextInterface $block, Response $response = null) 
    { 
     // merge settings 
     $settings = array_merge($this->getDefaultSettings(), $block->getSettings()); 

     return $this->renderResponse('IMAProcessManagement:Block:blockProcessManagement.html.twig', array(
      'block'  => $block, 
      'settings' => $settings 
     ), $response); 
    } 
} 

Я также создал файл (мнения/Block/blockProcessManagement.html.twig), который содержит шаблон блока я хочу добавить Приборная панель SonataAdmin в:

{% 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 %} 

Кроме того, я в services.yml файл моего расслоения, я следующий

services: 
# ima_process_management.example: 
#  class: %ima_process_management.example.class% 
#  arguments: [@service_id, "plain_value", %parameter%] 
    sonata.block.service.processManagement: 
     class: IMA\ProcessManagementBundle\Block\ProcessManagementBlockService 
     arguments: [ "sonata.block.service.processManagement", @templating ] 
     tags: 
      - { name: sonata.block } 

Я знаю этот файл правильно загружен, потому что я пытался поместите верхние строки непосредственно в config.yml и получите тот же результат.

Наконец, я добавил в главном config.yml файл моего проекта

sonata_block: 
    default_contexts: [cms] 
    blocks: 
     # Enable the SonataAdminBundle block 
     sonata.admin.block.admin_list: 
      contexts: [admin] 
     # Your other blocks 
     sonata.block.service.text: 
     sonata.block.service.rss: 
     sonata.admin.block.search_result: 
     sonata.block.service.processManagement: ~ 

и

sonata_admin: 
    templates: 
     dashboard: SonataAdminBundle:Core:dashboard.html.twig 
    dashboard: 
     blocks: 
      - { position: left, type: sonata.admin.block.admin_list } 
      - { position: left, type: sonata.block.service.processManagement} 

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

+0

Вроде бы все в порядке. Но когда я включил персонализированную службу, я не использую 'camellized', но я бы использовал' sonata.block.service.process_management'. Возможно, это не решение, но вы можете попытаться изменить его имя на всякий случай. –

+0

@ DaniSancas, меняющий его, не решает мою проблему ... – CoachNono

+0

Тогда я ничего не вижу. Я проверил свой собственный код, и все выглядит похоже. Может быть, глупый вопрос, но вы удалили (все) файлы кеша? –

ответ

3

Проблема в том, как вы сделали оболочку письма в config.yml. Всегда используйте строчные буквы для определения имен служб, если вы не тогда, Symfony преобразует их в нижний регистр.

Посмотрите на coding standards для Symfony.

Service Naming конвенции:

  • имя службы содержит группы, разделенные точками

  • Д. И. псевдоним расслоения является первой группой (например fos_user)

  • Название службы содержит группы, разделенные точками

  • Используйте строчные буквы для имен служб и параметров

Смежные вопросы