在 Symfony 3 框架上使用 Mpdf(和 tfox symfony 包)为 PDF 处理器开发 REST API。我创建了两个 GET 请求,一个没有用于测试的参数,另一个带有我想要读取然后转换为 PDF 的参数(HTML 文件的 URL)。
通用 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 调用第二个函数时,总是返回第一个函数,并且我得到带有“Hello”的 PDF,如果我删除第一个 GET 函数,则会收到错误“找不到 GET/create 的路由” ”
我调查了:
- PDF URL 是正确的,我手动将其插入到第一个函数中并工作
- 没有语法错误,我复制了不带参数的相同函数并工作
我拨打的电话是:
-
http://localhost:8000/创建 http://localhost:8000/create这个有效
-
http://localhost:8000/create?htmlSource=本地文件路径 http://localhost:8000/create?htmlSource=PATH-TO-FILE-LOCALLY这个不行
如果我手动将 PATH-TO-FILE-LOCALLY 放入函数 1 中,它就可以正常工作
所以我有两个问题:
- 由于我是 REST 和 LAMP 新手,我应该使用 GET 还是其他?我的目标是读取用户将填写到变量中的 HTML 表单并将其传递给 Mpdf,Mpdf 将其转换为 PDF 并返回该 PDF 以供查看或下载
- 为什么只读取第一个 GET 函数?
注意:我正在 Linux 上进行开发,使用 PHPStorm、PHP 7、Symfony 3、localhost,我正在测试的 html 文件位于我的本地计算机上
旁白:如果这个问题得到解决,我应该将其上传到我的客户端服务器(Apache) - 您是否有任何关于如何执行此操作以及 URL 应该更改为什么的指南?
谢谢大家
Updates:
我已将功能更改为 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"
}
}