首页 > 解决方案 > 如何正确地将视图处理程序添加到 fosrestbundle 以返回文件

问题描述

检查这个帖子另一个帖子,我还检查了我想出了这个配置的捆绑包RssExample :

fos_rest 下

format_listener:
    enabled: true
    rules:
        - { path: ^/service/export-to-csv, priorities: [ csv,json ], fallback_format: json, prefer_extension: false }
        - { path: ^/, priorities: [ json ], fallback_format: json, prefer_extension: true }
exception:
    enabled: true
serializer:
    serialize_null: true
service:
    view_handler: app.view_handler.csv

根据服务

app.view_handler.csv:
    class: AppBundle\View\CsvViewHandler

app.view_handler:
    parent: fos_rest.view_handler.default
    public: true
    autowire: true
    autoconfigure: false
    calls:
        - ['registerHandler', ['csv', ["@app.view_handler.csv",'createResponse'] ] ]

处理程序类

namespace AppBundle\View;

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Csv;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\View\View;
use FOS\RestBundle\View\ViewHandler;


class CsvViewHandler
{

    public function createResponse(ViewHandler $handler, View $view, Request $request, $format)
    {
        $spreadSheet = new Spreadsheet();

        $spreadSheet->getActiveSheet()->getCell('A1')->setValue('CSV DOWNLOAD EXAMPLE');

        $csv = new Csv($spreadSheet);


        return new Response($csv, 200, $view->getHeaders());
    }
}

这个想法是在请求中发送到 /service/export-to-csv 的每个数据都被处理并作为 .csv 文件返回。但问题是我仍然得到这个FatalThrowableError

类型错误:传递给 FOS\RestBundle\Controller\TemplatingExceptionController::__construct() 的参数 1 必须实现接口 FOS\RestBundle\View\ViewHandlerInterface,给定 AppBundle\View\CsvViewHandler 的实例,在 /var/www/sicocme-emed- 中调用第 14 行的 api/var/cache/dev/ContainerDztemfl/getFosRest_Exception_TwigControllerService.php

标签: restcsvhandlerfosrestbundleviewhandler

解决方案


推荐阅读