web-dev-qa-db-ja.com

FOSRestBundleはSymfony 4.1では機能しません

Symfony 4.1プロジェクトで動作しているFOSRestBundleでビューを返すことに問題があります。

これは私のコントローラーからのコードです:

class NewsController extends FOSRestController
{

    public function getNewsAction()
    {
        $data = ['news1', 'news2'];

        $view = $this->view($data, 200);

        return $this->handleView($view);
     }
}

fos_rest.yaml

fos_rest:
    param_fetcher_listener:  true
    allowed_methods_listener:  true
    routing_loader: true
    view:
        view_response_listener:  'force'
    format_listener:
        rules:
            - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json, html ] }

framework.yaml

framework:
    secret: '%env(APP_SECRET)%'
    php_errors:
        log: true

sensio_framework_extra:
    view:        { annotations: true }

だから私はかなり基本的な設定を持っています、そして私はまだこのようなエラーを得ています:

(1/1)RuntimeException ViewResponseListenerを使用するには、SensioFrameworkExtraBundleビューアノテーションを有効にする必要があります。

「view:view_response_listener: 'force'」を削除しようとしましたが、次のエラーが発生しています。

Symfony\Bundle\FrameworkBundle\Templating\EngineInterfaceのインスタンス>テンプレートをレンダリングするには、FOS\RestBundle\View\ViewHandlerに注入する必要があります。

私はそれと何時間も苦労しています。それはSymfony 4のベータステータスのせいですか?それとも私は何か間違ったことをしていますか?たぶん私はいくつかの依存症を見逃していますか?公式ドキュメントでは、この問題について役立つ情報は見つかりませんでした。

10
jankes83

config/packages/framework.yamlに行を追加

framework:
    templating: { engines: ['twig'] }

それは解決します

Symfony\Bundle\FrameworkBundle\Templating\EngineInterfaceのインスタンス>テンプレートをレンダリングするには、FOS\RestBundle\View\ViewHandlerに注入する必要があります。

18

リクエストでAccept: application/jsonを送信しますか?

そうでない場合、必ずしもtwigは必要ありませんが、バンドル構成のフォーマット構成からhtmlを削除する必要があります。

fos_rest:
    format_listener:
        rules:
            - { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ json ] }

デフォルトでは優先度にhtmlがあり、twigが必要です。

10
magnetik

SensioFrameworkExtraBundleビュー注釈を有効にする必要があります

sensio_framework_extra:
    view:        { annotations: false }
2
Alister Bulman

テンプレートコンポーネントの統合はSymfony 4.3では 非推奨 です。したがって、templatingセクションをconfig/packages/framework.yamlから削除(またはコメント)する必要があります

framework:
    # templating: { engines: ['twig'] }

TwigをViewHandlerのテンプレートサービスとして定義するには、config/services.yamlに以下の行を追加します

    fos_rest.templating:
エイリアス:twig
0
Vitaliy