2017-08-04 20 views
0

在Symfony 3 Framework上使用Mpdf(和tfox symfony包)处理PDF处理器的REST API。我创建了两个GET请求,一个没有参数用于测试,另一个有我想要读取的参数(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; 
} 

的问题是,当我打电话使用浏览器或邮差第一功能的第二功能总是返回相反,我得到PDF与“你好”,如果我删除第一个GET功能,我得到错误“没有找到GET /创建路线”

我调查:

  • PDF格式的URL是正确的,我手动在第一个函数插入它和工作
  • 没有语法错误,我复制了同样的功能没有参数的工作

的电话我也有:

如果我把PATH-TO-FILE-局部的功能1手动将其工作正常

所以我有2个问题:

  1. 由于我是新来的REST和LAMP,我应该使用GET或其他?我的目标是阅读HTML表单,用户将填入一个变量并将其传递给Mpdf,将其转换为PDF并返回该PDF以供查看或下载
  2. 为什么只有第一个GET函数正在被读取?

注:我正在开发在Linux上,用PHPStorm,PHP 7,Symfony的3,本地主机,我与测试的html文件是我的本地机器上

面点:如果这个解决了,我应该上传到我的客户服务器(这是Apache) - 你有任何指导如何做到这一点,应该是什么网址更改为?

谢谢大家提前

更新:

我已经改变为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" } }

+0

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

+0

我从你的回答中猜测我的问题很愚蠢:如果有人能指出这个错误,D – Sherbieny

+0

会很感谢 – Sherbieny

回答

0

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

(“/创建/ {htmlSource} “)

这些路径不匹配。 第一条路径由域名和路由create组成,第二条路径有路由“创建”+斜杠+通配符。

查询参数未在路由注释中定义。相反,访问它们的内部控制,利用

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