2017-08-04 8 views
0

Symfony 3 FrameworkでMpdf(およびtfox symfonyバンドル)を使用してPDFプロセッサ用のREST APIで作業しています。私は2つのGET要求を作成しました.1つはテスト用のパラメータがなく、もう1つはパラメータ(HTMLファイルのURL)を読み取ってからPDFに変換するものです。パラメータを無視してREST GET PHP Symfony 3 Mpdf

ジェネリック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; 
} 

問題は、私はブラウザやポストマン最初の関数を使用して第2の関数を呼び出すとき常に返され、あります代わりに、私は最初のGET関数を削除すると、 "GET/createのルートが見つかりませんでした"というPDFを "Hello"で取得します。

調査しました:

  • PDFのURLが正しいことを、私は手動で最初の関数でそれを挿入し、
  • ません構文エラー働いていた、私はパラメータなしで同じ機能をコピーして

コールを働いていた私はあります。

は、手動では

は、だから私は2つの質問を持って正常に動作しますGETなどを使用しますか?私の目標は、ユーザーが変数に入力してMpdfに渡し、PDFに変換してそのPDFを表示またはダウンロードするHTMLフォームを読むことです。

  • なぜ最初のGET関数だけが読み込まれていますか?
  • 注:私はlocalhostを、私がテストしていhtmlファイルは私のローカルマシン上

    サイドポイントでPHPStorm、PHP 7、symfonyの3、で、Linux上で開発しています:場合、これは解決され、私はクライアントサーバー(これはApache)にこれをアップロードすることになっています。これを行う方法とURLを変更する必要がありますか?私はメソッドをPOSTするための機能を変更しているし、それは今も元気に動作

    ::Apacheの生産サーバーと一部に公開した後

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

    は、事前に

    アップデートをあなたのすべてをありがとう設定を調整すると、サイトは現在ライブになります! - 今私は私が私が持っているすべての設定情報を持つために新しい質問を投稿する新しい問題直面しています - 基本的にPOSTメソッドが{ "error": { "code": 405, "message": "Method Not Allowed" } }

    +0

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

    +0

    私の質問はかなりばかだとあなたの答えから推測しています:D – Sherbieny

    +0

    誰かが間違いを指摘できるかどうか気になるでしょう – Sherbieny

    答えて

    0

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

    ( "/作成/ {htmlSource}を返しているの")

    これらのパスは一致しません。 最初のパスはドメイン名とルートcreateで構成され、2番目のパスはルート「作成」+スラッシュ+ワイルドカードを持ちます。

    クエリパラメータはルーティングアノテーション内で定義されていません。その代わり、

    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リクエストを使用してください。

    「サイドノート」では、別の質問をする必要があります。

    +0

    多くのありがとう!私は実際にはPOSTリクエストを通じて機能を管理していましたが、POSTを使ってローカルサーバー上で正常に動作していますが、POST本体でファイルのパスが使用されましたが、今はApacheプロダクションサーバーにプロジェクトをアップロードした後私は現在、問題を許可されていない405メソッドに直面していますが、私はそれについて新しい質問が必要であると推測しています – Sherbieny

    関連する問題