2

我有使用 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 的捆绑包)。有没有办法只为我的公共 APi 包调整 FOSRestBundle(或任何其他包)配置?我试过扩展:

$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". 
4

2 回答 2

4

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

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

这里有更多信息。

于 2013-06-08T18:26:59.287 回答
4

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

于 2019-04-15T19:25:11.150 回答