Sonata 管理员搜索功能:尚未设置请求对象

Posted

技术标签:

【中文标题】Sonata 管理员搜索功能:尚未设置请求对象【英文标题】:Sonata Admin search feature : The Request object has not been set 【发布时间】:2018-07-31 22:10:58 【问题描述】:

我想在 symfony 迁移到 3.4.2 版本后激活奏鸣曲管理员搜索功能。 我在奏鸣曲块服务中发现了一个问题:

在渲染模板期间引发了异常(“The 请求对象尚未设置”)。

这是奏鸣曲块配置:

奏鸣曲块.yml

sonata_block:
    default_contexts: [cms]
    blocks:
        sonata.admin.block.admin_list:
            contexts:   [admin]
        sonata.admin.block.search_result:
            contexts: [admin]
        sonata.block.service.text:
        sonata.block.service.rss:

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

您在使用 SonataTranslationsBundle 吗?这是fixed recently。也许你应该更新?如果不是,请打开一个问题并提供堆栈跟踪。

【讨论】:

我尝试了这个解决方案,但徒劳无功,问题出在 sonata.admin.block.search_result @MohammadTrabelsi 你能在这里给我异常的完整堆栈跟踪或在 github 上打开一个问题 完整堆栈太大:这是简短版本:Twig_Error_Runtime:在渲染模板期间引发了异常(“尚未设置请求对象”)。在 vendor/sonata-project/admin-bundle/src/Resources/views/Core/search.html.twig:39 我打开了一个问题:这是链接:github.com/sonata-project/SonataAdminBundle/issues/4966【参考方案2】:

解决办法是重写get请求函数,因为她抛出了异常:

  public function getRequest()
    
        if (!$this->request) 
            throw new \RuntimeException('The Request object has not been set');
        

        return $this->request;
    

所以我创建了一个扩展抽象管理的类,并使我的管理文件夹中的每个类都从它扩展:

class MYAdmin extends AbstractAdmin

    /**
     * @inheritdoc
     */
    public function getRequest()
    
        if (!$this->request) 
            return $this->request = $this->getConfigurationPool()->getContainer()->get('request_stack')->getCurrentRequest();
        
        return $this->request;
    

【讨论】:

以上是关于Sonata 管理员搜索功能:尚未设置请求对象的主要内容,如果未能解决你的问题,请参考以下文章

Sonata 管理包,操作对象

symfony sonata 管理过滤器“开始于”

Sonata 管理控制器 + 依赖注入

阻止 SonataAdmin / Symfony2 使用 sonata_type_admin 嵌入式管理员创建空对象

Sonata Propel 管理员 - 找不到服务

使用 Sonata 管理员导出用户角色