我有使用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
但后来我在exising应用程序中破坏了一些操作(其他使用FOSRestBundle的bundle)。有没有办法只为我的公共APi包调整FOSRestBundle(或任何其他包)配置?我尝试使用Extension:
$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".
当您通过composer安装软件包时,您需要手动将软件包添加到app / AppKernel.php:
public function registerBundles()
{
$bundles = array(
// ...
new FOS\RestBundle\FOSRestBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
// ...
);
}
当我们使用symfony4 + rest api安装rest api包后检查bundle文件,如果fosrest bunfle没有退出则添加FOS \ RestBundle \ FOSRestBundle :: class => ['all'=> true]