Работа над REST API для процессора PDF с использованием Mpdf (и tfox symfony bundle) на Symfony 3 Framework. Я создал два запроса GET, один без параметров для тестирования, и один с параметром (URL-адрес файла HTML), который я хочу прочитать, а затем преобразовать в PDF.
Функция Generic GET:
/** * * @Rest\Get("/create") */ public function createPDFAction(){ $mpdfService = $this->get('tfox.mpdfport'); $html = "<h1> Hello </h1>"; $mpdf = $mpdfService->getMpdf(); $mpdf->WriteHTML($html); $mpdf->Output(); exit; }
Вторая функция GET с параметром:
/** * @param $htmlSource * @Rest\Get("/create/{htmlSource}") */ public function createPDFFromSourceAction($htmlSource){ $mpdfService = $this->get('tfox.mpdfport'); $html = file_get_contents($htmlSource); $mpdf = $mpdfService->getMpdf(); $mpdf->WriteHTML($html); $mpdf->Output(); exit; }
Проблема в том, что когда я вызываю вторую функцию с помощью браузера или Postman, первая функция всегда возвращается вместо этого, и я получаю PDF с «Hello», если я удаляю первую функцию GET, я получаю ошибку «маршрут не найден для GET / create "
Я исследовал:
Звонки, которые я делаю:
Если я положил функцию PATH-TO-FILE-LOCALLY 1 вручную, она отлично работает
Итак, у меня есть 2 вопроса:
Примечания: Я разрабатываю Linux, с PHPStorm, PHP 7, Symfony 3, localhost, html-файл, который я тестирую, находится на моей локальной машине
Боковой момент: если это разрешено, я должен загрузить его на сервер моих клиентов (это Apache) – есть ли у вас какие-либо руководства о том, как это сделать, и какими должны быть URL-адреса?
Спасибо всем заранее
Обновления:
Я изменил функциональность на методы POST, и теперь он отлично работает:
/** * @Rest\Post("/mPDF/") */ public function createPDFAction(Request $request){ $source = $request->get('source'); if($source == ""){ return new View('No Data found', Response::HTTP_NO_CONTENT); } $mpdfService = $this->get('tfox.mpdfport'); $html = file_get_contents($source); $mpdf = $mpdfService->getMpdf(); $mpdf->WriteHTML($html); $mpdf->Output(); exit; }
После публикации на сервере производства Apache и некоторых настроек настройки сайт теперь в прямом эфире! – но теперь я столкнулся с новой проблемой, о которой я отправлю новый вопрос со всей информацией о конфиге, которую я имею – в основном метод POST возвращает { "error": { "code": 405, "message": "Method Not Allowed" } }
HTTP: // локальный: 8000 / создать HtmlSource = PATH-TO-FILE-МЕСТНЫЙ
( "/ Создать / {HtmlSource}")
Эти пути не совпадают. Первый путь состоит из имени домена и create
маршрута, а второй путь имеет маршрут «create» + slash + wildcard.
Параметры запроса не определены в аннотации маршрутизации. Вместо этого обращайтесь к ним внутри контроллера, используя
public function createPDFFromSourceAction(Request $request) { $htmlSource = $request->query->get('htmlSource'); // query string parameter $somethingElse = $request->request->get('somethingElse'); //POST request parameter ... }
Symfony передаст вам объект Request
внутри контроллера.
Что касается вашего другого вопроса, запросы GET обычно используются для вещей, которые не изменяют состояние приложения, а запросы POST / PUT / PATCH / DELETE изменяют состояние. Поскольку вы загружаете что-то, используйте запрос POST.
Для вашей «примечания» вы должны задать другой вопрос.