2017-08-04 4 views
0

Travail sur une API REST pour un processeur PDF en utilisant Mpdf (et tfox symfony bundle) sur Symfony 3 Framework. J'ai créé deux requêtes GET, une avec aucun paramètre à tester, et une avec le paramètre (URL du fichier HTML) que je veux lire et ensuite convertir en PDF.REST GET avec paramètre ignoré, PHP Symfony 3 Mpdf

La fonction GET générique:

/** 
* 
* @Rest\Get("/create") 
*/ 
public function createPDFAction(){ 
    $mpdfService = $this->get('tfox.mpdfport'); 
    $html = "<h1> Hello </h1>"; 
    $mpdf = $mpdfService->getMpdf(); 
    $mpdf->WriteHTML($html); 
    $mpdf->Output(); 
    exit; 
} 

La deuxième fonction GET avec le paramètre:

/** 
* @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; 
} 

Le problème est, quand je l'appelle la deuxième fonction en utilisant le navigateur ou Postman la première fonction est toujours renvoyée à la place et je reçois le fichier PDF avec "Bonjour", si je supprime la première fonction GET, j'obtiens erreur "aucun itinéraire trouvé pour GET/créer"

J'ai étudié:

  • L'URL du PDF est correct, je l'ai inséré manuellement en première fonction et travaillé
  • Pas d'erreur de syntaxe, je copiais la même fonction sans les paramètres et travaillé

Les appels que je fais sont:

Si je mets le PATH TO-FILE-LOCALEMENT en fonction 1 manuellement fonctionne très bien

J'ai donc 2 questions:

  1. Depuis que je suis nouveau au repos et LAMP, devrais-je utiliser GET ou d'autres? Mon but est de lire le formulaire HTML que l'utilisateur remplira dans une variable et de le passer à Mpdf qui le convertira en PDF et retournera ce PDF pour l'afficher ou le télécharger
  2. Pourquoi seule la première fonction GET est en cours de lecture?

Remarques: Je développe sous Linux, avec PHPStorm, PHP 7, Symfony 3, localhost, le fichier html je teste avec est sur ma machine locale

Point latéral: Dans le cas où cela est résolu, Je suis supposé télécharger ceci sur le serveur de mon client (qui est Apache) - avez-vous des guides sur la façon de le faire et sur ce que devraient être les URL modifiées?

Merci à tous à l'avance

Mises à jour:

J'ai changé la fonctionnalité POST méthodes et il fonctionne maintenant très bien:

/** 
* @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; 

} 

Après la publication sur le serveur de production Apache et certains configuration tweaks le site est maintenant en ligne!- mais maintenant je suis confronté à une nouvelle question que je vais poster une nouvelle question avec toutes les informations de configuration que j'ai - essentiellement la méthode POST EXPEDITEUR { "error": { "code": 405, "message": "Method Not Allowed" } }

+0

http://www.restapitutorial.com/ – MyMomSaysIamSpecial

+0

Je devine de votre réponse que ma question est assez stupide: D – Sherbieny

+0

apprécierait si quelqu'un pourrait signaler l'erreur s'il vous plaît – Sherbieny

Répondre

0

http://localhost:8000/create?htmlSource=PATH-TO-FILE-LOCALLY

("/ créer/{htmlSource} ")

Ces chemins ne correspondent pas. Le premier chemin est constitué du nom de domaine et de la route create, tandis que le second chemin comporte l'itinéraire "create" + slash + wildcard.

Les paramètres de requête ne sont pas définis dans l'annotation de routage. Au lieu de cela, les accès à l'intérieur contrôleur, en utilisant

public function createPDFFromSourceAction(Request $request) 
{ 
    $htmlSource = $request->query->get('htmlSource'); // query string parameter 
    $somethingElse = $request->request->get('somethingElse'); //POST request parameter 
    ... 
} 

Symfony passera Request objet à l'intérieur du contrôleur pour vous. En ce qui concerne votre autre question, les requêtes GET sont généralement utilisées pour les choses qui ne changent pas l'état de l'application, et les requêtes POST/PUT/PATCH/DELETE changent l'état. Puisque vous téléchargez quelque chose, utilisez la requête POST.

Pour votre note, vous devriez plutôt poser une autre question.

+0

Merci beaucoup! J'ai effectivement réussi à faire la fonctionnalité via la requête POST et cela fonctionne maintenant bien sur mon serveur local avec POST et le chemin de mes fichiers dans le corps POST, cependant, maintenant quand j'ai téléchargé le projet sur un serveur de production Apache et après quelques configurations Je suis maintenant confronté à une méthode 405 problème non autorisé, mais je suppose que j'ai besoin d'une nouvelle question pour cette – Sherbieny