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のベータステータスのせいですか?それとも私は何か間違ったことをしていますか?たぶん私はいくつかの依存症を見逃していますか?公式ドキュメントでは、この問題について役立つ情報は見つかりませんでした。
config/packages/framework.yaml
に行を追加
framework:
templating: { engines: ['twig'] }
それは解決します
Symfony\Bundle\FrameworkBundle\Templating\EngineInterfaceのインスタンス>テンプレートをレンダリングするには、FOS\RestBundle\View\ViewHandlerに注入する必要があります。
リクエストでAccept: application/json
を送信しますか?
そうでない場合、必ずしもtwig
は必要ありませんが、バンドル構成のフォーマット構成からhtml
を削除する必要があります。
fos_rest:
format_listener:
rules:
- { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ json ] }
デフォルトでは優先度にhtml
があり、twig
が必要です。
SensioFrameworkExtraBundleビュー注釈を有効にする必要があります
sensio_framework_extra:
view: { annotations: false }
テンプレートコンポーネントの統合はSymfony 4.3では 非推奨 です。したがって、templatingセクションをconfig/packages/framework.yamlから削除(またはコメント)する必要があります
framework:
# templating: { engines: ['twig'] }
TwigをViewHandlerのテンプレートサービスとして定義するには、config/services.yamlに以下の行を追加します
fos_rest.templating: エイリアス:twig