SonataAdmin - 找不到我正在尝试构建的自定义块

时间:2014-01-27 19:06:03

标签: php symfony sonata-admin symfony-sonata

我正在尝试将自定义块添加到SonataAdminBundle的仪表板中。我跟着这里的instructinos(How to add custom link or button to SonataAdminBundle Dashboard in Symfony2),我收到以下错误:

 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);
    }
}

我还创建了一个文件(views / 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 %}

另外,我在我的bundle的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}

我真的不知道为什么我收到服务不存在的错误......

1 个答案:

答案 0 :(得分:3)

问题是你如何在config.yml中使用字母大小写。如果不这样做,请始终使用小写来定义服务名称,然后Symfony将其转换为小写。

查看Symfony的coding standards

  

服务命名约定:

     
      
  • 服务名称包含以点分隔的组

  •   
  • 捆绑的DI别名是第一组(例如fos_user)

  •   
  • 服务名称包含以点分隔的组

  •   
  • 使用小写字母表示服务和参数名称

  •