2

FOSRestBundle を使用する Symfony アプリケーションがあり、メインの 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

curlから動作します。ブラウザーが 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". 
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 に答える