php - SonataAdmin - 找不到我要构建的自定义 block

标签 php symfony sonata-admin symfony-sonata

我正在尝试将自定义 block 添加到 SonataAdminBundle 的仪表板。我按照此处的说明 (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 仪表板的 block 模板:

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

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

最佳答案

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

看看 coding standards对于 Symfony。

Service Naming Conventions:

  • A service name contains groups, separated by dots

  • The DI alias of the bundle is the first group (e.g. fos_user)

  • A service name contains groups, separated by dots

  • Use lowercase letters for service and parameter names

关于php - SonataAdmin - 找不到我要构建的自定义 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389460/

相关文章:

php - 使用mysql int 长度大于11时插入错误值

git - 如何使 Composer 依赖项可提交?

mysql - 整合 Sonata 中的 fosUserBundle 表格

symfony - 如何使用 knplabs 学说行为对 sonata admin 中的可翻译数据进行排序

exception - SonataUserBundle FOSUserBundle UniqueEntity 电子邮件和用户名

php - 如何重用一个 html head 部分?

PHP sin函数上去

php - 修改Yii CRUD生成(Gii)表单模板

php - Symfony 项目 CMS

php - 获取 "Integrity constraint violation: 1048 Column ' payment_id' cannot be null"using Doctrine & Symfony