Php 在Sonata管理包中创建新块导致错误

Php 在Sonata管理包中创建新块导致错误,php,symfony,Php,Symfony,我引用了此解决方案,出现了一个错误: 编译错误:声明 AppBundle\Block\NewsletterBlockService::execute()必须兼容 具有 Sonata\BlockBundle\Block\BlockServiceInterface::execute(Sonata\BlockBundle\Block\BlockContextInterface $blockContext,Symfony\Component\HttpFoundation\Response$Respons

我引用了此解决方案,出现了一个错误:

编译错误:声明 AppBundle\Block\NewsletterBlockService::execute()必须兼容 具有 Sonata\BlockBundle\Block\BlockServiceInterface::execute(Sonata\BlockBundle\Block\BlockContextInterface $blockContext,Symfony\Component\HttpFoundation\Response$Response= 空)

代码

我的
app/config/config.yml的一部分

sonata_block:
    default_contexts: [cms]
    blocks:
        # enable the SonataAdminBundle block
        sonata.admin.block.admin_list:
            contexts: [admin]
        sonata.user.block.menu: ~    # used to display the menu in profile pages
        sonata.user.block.account: ~ # used to display menu option (login option)
        sonata.block.service.text: ~
        sonata.block.service.rss: ~
        sonata.block.service.newsletter: ~

sonata_admin:
    dashboard:
        blocks:
            -
                position: left
                type: sonata.admin.block.admin_list
                settings:
                    groups: [default, app.admin.group.content]
            -
                position: right
                type: sonata.admin.block.admin_list
                settings:
                   groups: [default]
            - { position: left, type: sonata.block.service.newsletter}
sonata.block.service.newsletter:
        class: AppBundle\Block\NewsletterBlockService
        arguments: [ "sonata.block.service.newsletter", @templating ]
        tags:
            - { name: sonata.block }
我的一部分
/private/var/www/learning\u sonata/app/config/services.yml

sonata_block:
    default_contexts: [cms]
    blocks:
        # enable the SonataAdminBundle block
        sonata.admin.block.admin_list:
            contexts: [admin]
        sonata.user.block.menu: ~    # used to display the menu in profile pages
        sonata.user.block.account: ~ # used to display menu option (login option)
        sonata.block.service.text: ~
        sonata.block.service.rss: ~
        sonata.block.service.newsletter: ~

sonata_admin:
    dashboard:
        blocks:
            -
                position: left
                type: sonata.admin.block.admin_list
                settings:
                    groups: [default, app.admin.group.content]
            -
                position: right
                type: sonata.admin.block.admin_list
                settings:
                   groups: [default]
            - { position: left, type: sonata.block.service.newsletter}
sonata.block.service.newsletter:
        class: AppBundle\Block\NewsletterBlockService
        arguments: [ "sonata.block.service.newsletter", @templating ]
        tags:
            - { name: sonata.block }
My
/private/var/www/learning\u sonata/src/AppBundle/Block/NewsletterBlockService.php

namespace AppBundle\Block;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

use Sonata\BlockBundle\Model\BlockInterface;
use Sonata\BlockBundle\Block\BlockContextInterface;
use Sonata\BlockBundle\Block\BlockContext;

use Sonata\BlockBundle\Block\BlockServiceInterface;

use Sonata\AdminBundle\Form\FormMapper;
use Sonata\CoreBundle\Validator\ErrorElement;
use Sonata\BlockBundle\Block\BaseBlockService;


//use Sonata\BlockBundle\Block;

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);
    }
}
谢谢魔鬼

我参考您的答案,清除上面的错误,但出现新的错误:

对象“Sonata\BlockBundle\Block\BlockContext”的方法“id”没有 SonatableLockBundle:Block:Block_base.html.twig第11行不存在

文件路径
供应商/sonata项目/block bundle/Resources/views/block/block_base.html.twig

<div id="cms-block-{{ block.id }}" class="cms-block cms-block-element">
    {% block block %}EMPTY CONTENT{% endblock %}
</div>
我看了这个,上面说是专业版


伙计们,你们能告诉我一些想法吗?

在扩展BaseBlockService时,你们没有实现方法签名

use Sonata\BlockBundle\Block\BlockContextInterface;

public function execute(BlockContextInterface $blockContext, Response $response = null)
{    
    return $this->renderResponse('InstitutoStoricoNewsletterBundle:Block:block_my_newsletter.html.twig', array(
        'block'     => $blockContext->getBlock(),
        'settings'  => $blockContext->getSettings()
    ), $response);
}

扩展BaseBlockService时没有实现方法签名

use Sonata\BlockBundle\Block\BlockContextInterface;

public function execute(BlockContextInterface $blockContext, Response $response = null)
{    
    return $this->renderResponse('InstitutoStoricoNewsletterBundle:Block:block_my_newsletter.html.twig', array(
        'block'     => $blockContext->getBlock(),
        'settings'  => $blockContext->getSettings()
    ), $response);
}

太棒了,但是发生了一个错误,我已经更新了上面的问题@Devilcius您使用的是哪种版本的奏鸣曲*(
composer show | grep sonata
)?太棒了,但是出现了一个错误,我已经更新了上面的问题@设备您使用的是哪种版本的奏鸣曲*(
composer show | grep sonata
)?