2017-09-12 10 views
0

私はソナタでカスタムブロックを作成しようとしています。テキストだけを表示するブロックが、サービスが見つからないと思われるのでテンプレートをレンダリングできません。テンプレートのレンダリング中に例外が発生しました: "ブロックサービス` app.service.block.custom`が存在しません "

私はまた私のサービスが稼働している見ることができるブロックがconfig.yml

sonata_block: 
    default_contexts: [cms] 
    blocks: 
     app.service.block.portfolio: 

dashboard: 
    blocks: 
     - { position: right, type: app.service.block.portfolio, settings: { content: "<h2>This is a test block</h2>"} } 

で宣言されていません。

app/console debug:container | grep app.service.block.portfolio 
    app.service.block.portfolio  App\CoreBundle\Block\BlockPortfolio 

これは私が使用するコードです:

<?php 

namespace App\CoreBundle\Block; 

use Sonata\BlockBundle\Block\Service\AbstractAdminBlockService; 
use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\BlockBundle\Block\BlockContextInterface; 
use Sonata\BlockBundle\Model\BlockInterface; 
use Sonata\CoreBundle\Model\Metadata; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use JMS\DiExtraBundle\Annotation as DI; 


/** 
* @DI\Service("app.service.block.portfolio") 
*/ 
class BlockPortfolio extends AbstractAdminBlockService 
{ 
/** 
* {@inheritdoc} 
*/ 
public function execute(BlockContextInterface $blockContext, Response $response = null) 
{ 
    return $this->renderResponse($blockContext->getTemplate(), array(
     'block' => $blockContext->getBlock(), 
     'settings' => $blockContext->getSettings(), 
    ), $response); 
} 

/** 
* {@inheritdoc} 
*/ 
public function buildEditForm(FormMapper $formMapper, BlockInterface $block) 
{ 
    $formMapper->add('settings', 'sonata_type_immutable_array', array(
     'keys' => array(
      array('content', 'textarea', array()), 
     ), 
    )); 
} 

/** 
* {@inheritdoc} 
*/ 
public function configureSettings(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'content' => 'Insert your custom content here', 
     'template' => 'SonataBlockBundle:Block:block_core_text.html.twig', 
    )); 
} 

/** 
* {@inheritdoc} 
*/ 
public function getBlockMetadata($code = null) 
{ 
    return new Metadata($this->getName(), (!is_null($code) ? $code : $this->getName()), false, 'SonataBlockBundle', array(
     'class' => 'fa fa-file-text-o', 
    )); 
} 

}

誰でもclu e?

よろしく、 ジュリアン

答えて

0

[OK]を、私は私がサービスにタグがありませんでした、その答えを見つけました。

/** 
* @DI\Service("app.service.block.portfolio") 
* @DI\Tag(name="sonata.block") 
*/ 

このタグが必要な理由はわかりませんが、誰かがその理由を知っていれば、私はここでそれをうれしく思います。

乾杯、 ジュリアン

関連する問題