Intereting Posts

REST GET с игнорируемым параметром, PHP Symfony 3 Mpdf

Работа над 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 "

Я исследовал:

  • URL-адрес PDF правильный, я вручную вставил его в первую функцию и работал
  • Нет синтаксической ошибки, я скопировал ту же функцию без параметров и работал

Звонки, которые я делаю:

  • http: // localhost: 8000 / create Это работает
  • http: // localhost: 8000 / create? htmlSource = PATH-TO-FILE-LOCALLY Этот файл не работает

Если я положил функцию PATH-TO-FILE-LOCALLY 1 вручную, она отлично работает

Итак, у меня есть 2 вопроса:

  1. Поскольку я новичок в REST и LAMP, должен ли я использовать GET или другие? Моя цель – прочитать форму HTML, которую пользователь заполнит переменной и передать ее в Mpdf, которая преобразует ее в PDF и возвращает этот PDF для просмотра или загрузки
  2. Почему только первая функция GET читается?

Примечания: Я разрабатываю 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.

Для вашей «примечания» вы должны задать другой вопрос.