我正在尝试使用sonataadminbundle将一个块添加到我的管理仪表板中。我试着遵循第一个答案中写的指令:How to add custom link or button to SonataAdminBundle Dashboard in Symfony2
但我的BlockService类有问题。
代码如下:
namespace AppBundle\Block;
use Symfony\Component\HttpFoundation\Response;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\CoreBundle\Validator\ErrorElement;
use Sonata\BlockBundle\Model\BlockInterface;
use Sonata\BlockBundle\Block\BaseBlockService;
class InvitationBlockService extends BaseBlockService
{
public function getName()
{
return 'Invitation manager';
}
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_invitation.html.twig', array(
'block' => $block,
'settings' => $settings
), $response);
}
}
但是我在validatBlock,buildEdittForm和execute方法上有一个编译错误:
声明必须与BlockServiceInterface-> validateBlock兼容(errorElement:\ Sonata \ AdminBundle> \ Validator \ ErrorElement,block:\ Sonata \ BlockBundle \ Model \ BlockInterface) 类层次结构检查:抽象方法实现,实现/重写方法与超级声明兼容。所有违规都会导致PHP致命错误。不建议禁用或禁止此检查。
你有什么想法吗?
感谢您的阅读。
答案 0 :(得分:-1)
我终于找到了问题的原因:我不得不自我更新作曲家。
看起来我的作曲家已经老了,并没有获取我需要的所有文件或依赖。
所以,composer self-update
救了我。