【问题标题】:Tweaking bundle config only for particular bundle in application仅针对应用程序中的特定包调整包配置
【发布时间】:2023-03-09 08:17:01
【问题描述】:

我有使用 FOSRestBundle 的 Symfony 应用程序,并且有一些 在 main config.yml 中配置的设置:

fos_rest: 
    service: 
        serializer: my.serializer 
        view_handler: my.viewHandler 
    view: 
        view_response_listener: false 
        failed_validation: 200 

现在我正在构建新的公共 API 包,但我遇到了以下问题。 当我从浏览器测试我的 API 时,我得到了

Unable to find template "". 
500 Internal Server Error - InvalidArgumentException

它的工作原理是 卷曲。我猜它失败了,因为浏览器要求提供 html 内容类型,并且 我不需要任何模板,我只想像这样返回 xml/json:

return $this->get('fos_rest.view_handler')->handle(View::create(array('x' => 'y'))); 

我用更新的配置来解决这个问题:

fos_rest: 
    service: 
        serializer: my.serializer 
        view_handler: my.viewHandler 
    view: 
        view_response_listener: false 
        failed_validation: 200 
    format_listener: 
       default_priorities: [xml, json] 
       fallback_format: xml 

但后来我破坏了现有应用程序中的一些操作(其他捆绑 使用 FOSRestBundle)。 有没有办法调整 FOSRestBundle(或任何其他捆绑包)配置 仅适用于我的公共 API 捆绑包? 我试过扩展:

$loader = new YmlFileLoader($container, new FileLocator(__DIR__.'/../ 
Resources/config')); 
        $loader->load('services.yml'); 

services.yml 在哪里:

fos_rest: 
  service: 
    view_handler: my.public.api.view_handler 
  format_listener: 
    default_priorities: [xml, json] 
    fallback_format: xml 

但我得到了:

InvalidArgumentException: There is no extension able to load the 
configuration for "fos_rest". 

【问题讨论】:

    标签: rest symfony configuration bundle


    【解决方案1】:

    当您通过 composer 安装包时,您需要手动将包添加到 app/AppKernel.php:

    public function registerBundles()
    {
        $bundles = array(
            // ...
            new FOS\RestBundle\FOSRestBundle(),
            new JMS\SerializerBundle\JMSSerializerBundle(),
            // ...
        );
    }
    

    Here is more info.

    【讨论】:

      【解决方案2】:

      当我们在安装 rest api 包后使用 symfony4 + rest api 时检查捆绑文件如果 fosrest bunfle 不退出然后添加 FOS\RestBundle\FOSRestBundle::class=> ['all' => true]

      【讨论】:

      • 请尝试详细说明,如何检查,在哪里添加?请提供代码示例。
      • 所有使用的捆绑包都在 config/bundles.php 中定义,在我的情况下,这是不存在的,我手动添加了它
      猜你喜欢
      • 2014-10-21
      • 2012-12-25
      • 2016-04-22
      • 2020-01-16
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      相关资源
      最近更新 更多