Sonata用户捆绑包

时间:2020-06-30 12:44:57

标签: symfony4 sonata sonata-user-bundle

我正在尝试使用Sonata捆绑软件中的模块为我的用户开发个人资料。由于我不知道它是如何工作的,因此我尝试通过以下操作从SonataBundle渲染一个块:

 {{ sonata_block_render({ 'type': 'sonata.user.block.menu' }, {
        'template': 'SonataBlock/Block/block_core_rss.html.twig',
    }) }}

在我的show.html.twig中。我按照Sonata文档中的教程将其定义为service.yaml中的服务:

    sonata.user.block.menu:
    class: App\Block\UserProfileMenu
    arguments:
        - ~
        - '@twig'
    tags:
        - { name: sonata.block }

但是当我尝试进入/ profile时,出现错误:

An exception has been thrown during the rendering of a template ("Warning: count(): Parameter must be an array or an object that implements Countable").

它似乎来自sonata_block_render,因为如果删除它,我的模板将起作用。 它来自SonataBundle BlockHelper.php:

protected function computeAssets(BlockContextInterface $blockContext, array &$stats = null)
{
    if ($blockContext->getBlock()->hasParent()) {
        return;
    }

    $service = $this->blockServiceManager->get($blockContext->getBlock());

    $assets = [
        'js' => $service->getJavascripts('all'),
        'css' => $service->getStylesheets('all'),
    ];

    if (\count($assets['js']) > 0) {
        @trigger_error(
            'Defining javascripts assets inside a block is deprecated since 3.3.0 and will be removed in 4.0',
            E_USER_DEPRECATED
        );
    }

    if (\count($assets['css']) > 0) {
        @trigger_error(
            'Defining css assets inside a block is deprecated since 3.2.0 and will be removed in 4.0',
            E_USER_DEPRECATED
        );
    }

    if ($blockContext->getBlock()->hasChildren()) {
        $iterator = new \RecursiveIteratorIterator(new RecursiveBlockIterator($blockContext->getBlock()->getChildren()));

        foreach ($iterator as $block) {
            $assets = [
                'js' => array_merge($this->blockServiceManager->get($block)->getJavascripts('all'), $assets['js']),
                'css' => array_merge($this->blockServiceManager->get($block)->getStylesheets('all'), $assets['css']),
            ];
        }
    }

    if ($this->stopwatch) {
        $stats['assets'] = $assets;
    }

    $this->assets = [
        'js' => array_unique(array_merge($assets['js'], $this->assets['js'])),
        'css' => array_unique(array_merge($assets['css'], $this->assets['css'])),
    ];
}

但是我不明白为什么会出现此错误?有谁知道吗由于我们无法修改供应商的文件,因此我不知道如何绕过:/ 谢谢!

PS:我还有一个问题,如果我想将自己的模板做为块,是否应该将它们放在文件夹“模板”或“资源/视图/块”中?

0 个答案:

没有答案