忽略参数的 REST GET,PHP Symfony 3 Mpdf

REST GET with parameter ignored, PHP Symfony 3 Mpdf

在 Symfony 3 框架上使用 Mpdf(和 tfox symfony 包)为 PDF 处理器开发 REST API。我创建了两个GET请求,一个没有参数用于测试,一个有参数(HTML文件的URL)我想阅读然后转换成PDF。

通用 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 调用第二个函数时,第一个函数总是 returned 而不是 "Hello",如果我删除第一个 GET 函数,我会得到 PDF ,我得到错误 "no route found for GET/create"

我调查过:

我打的电话是:

如果我手动将 PATH-TO-FILE-LOCALLY 放入函数 1 中,它就可以正常工作

所以我有 2 个问题:

  1. 由于我是 REST 的新手并且 LAMP,我应该使用 GET 还是其他?我的目标是读取 HTML 用户将填写到变量中的表单并将其传递给 Mpdf,后者会将其转换为 PDF 并 return 该 PDF 以供查看或下载
  2. 为什么只读取第一个 GET 函数?

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

旁白:如果这个问题得到解决,我应该将其上传到我的客户端服务器(即 Apache)——你有没有关于如何做到这一点的指南以及 URL s 改为 ?

提前谢谢大家

更新:

我已将功能更改为 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 一个关于我拥有的所有配置信息的新问题 - 基本上 POST 方法是 returning { "error": { "code": 405, "message": "Method Not Allowed" } }

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

("/create/{htmlSource}")

这些路径不匹配。 第一条路径由域名和路由 create 组成,而第二条路径由路由 "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 请求。

对于你的 'side note' 你应该问另一个问题。