как правильно добавить обработчик представления в fosrestbundle для возврата файла - PullRequest
0 голосов
/ 30 апреля 2018

Проверка этот пост и этот другой пост , также я проверил комплект 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 :

Ошибка типа: аргумент 1 передан FOS \ RestBundle \ Controller \ TemplatingExceptionController :: __ конструкт () должен реализовывать интерфейс FOS \ RestBundle \ View \ ViewHandlerInterface, данный экземпляр AppBundle \ View \ CsvViewHandler, вызываемый в /var/www/sicocme-emed-api/var/cache/dev/ContainerDztemfl/getFosRest_Exception_TwigControllerService.php по линии 14

...