2016-05-26 43 views
0

我指的這個解決方案https://stackoverflow.com/a/15167450/2910183和錯誤發生:在索納塔管理員捆綁創建新的塊將導致錯誤

Compile Error: Declaration of AppBundle\Block\NewsletterBlockService::execute() must be compatible with Sonata\BlockBundle\Block\BlockServiceInterface::execute(Sonata\BlockBundle\Block\BlockContextInterface $blockContext, Symfony\Component\HttpFoundation\Response $response = NULL)

代碼

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} 

部分我的部分/private/var/www/learning_sonata/app/config/services.yml

sonata.block.service.newsletter: 
     class: AppBundle\Block\NewsletterBlockService 
     arguments: [ "sonata.block.service.newsletter", @templating ] 
     tags: 
      - { name: sonata.block } 

/private/var/www/learning_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); 
    } 
} 

感謝devilcius!

我是指你的答案,清除錯誤之上,但新的埃羅發生:

Method "id" for object "Sonata\BlockBundle\Block\BlockContext" does not exist in SonataBlockBundle:Block:block_base.html.twig at line 11

文件路徑vendor/sonata-project/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> 

索納塔版本

sonata-project/admin-bundle    3.1.0 The missing Symfony Admin ... 
sonata-project/block-bundle    3.0.0 Symfony SonataBlockBundle 
sonata-project/cache      1.0.7 Cache library 
sonata-project/core-bundle    3.0.0 Symfony SonataCoreBundle 
sonata-project/doctrine-orm-admin-bundle 3.0.1 Symfony Sonata/Integrate... 
sonata-project/exporter     1.4.1 Lightweight Exporter library 

我讀這resource,它說它是版本親。

你能提出一些想法嗎?

回答

0

擴展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); 
} 
+0

太棒了,但出現錯誤,我更新了我的問題。 @devilcius – liam

+0

您正在使用哪個版本的奏鳴曲*('composer show | grep sonata')? – devilcius

+0

我已經更新了我的專業版。 @dev – liam