REST GET 忽略参数,PHP Symfony 3 Mpdf

2024-01-14

在 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 中,它就可以正常工作

所以我有两个问题:

  1. 由于我是 REST 和 LAMP 新手,我应该使用 GET 还是其他?我的目标是读取用户将填写到变量中的 HTML 表单并将其传递给 Mpdf,Mpdf 将其转换为 PDF 并返回该 PDF 以供查看或下载
  2. 为什么只读取第一个 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" } }


http://localhost:8000/create?htmlSource=本地文件路径 http://localhost:8000/create?htmlSource=PATH-TO-FILE-LOCALLY

(“/创建/{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 请求。

对于你的“旁注”,你应该问另一个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

REST GET 忽略参数,PHP Symfony 3 Mpdf 的相关文章

  • 在 PHPUnit 中实现给定接口的模拟对象上未定义方法?

    我是单元测试和 PHPUnit 的新手 我需要一个模拟 我可以完全控制它 实现ConfigurationInterface界面 测试对象是ReportEventParamConverter对象和测试必须检查我的对象和界面之间的交互 Repo
  • PHP 多个单选按钮

    我如何处理页面中的所有单选按钮
  • 可能的 PDOException 错误(MySQL 5)?

    因此 我正在为我的网络应用程序设置一个安装程序 并具有数据库凭据的输入字段 我的验证过程的一部分包括测试数据库连接 使用 PHP 的 PDO 库 如果连接失败 我希望能够区分错误的密码 错误的地址 不存在的数据库名称等 以便我可以引用表单上
  • jQuery - 找不到 ajax url

    好吧 我确信这真的很容易 而且我很愚蠢 但似乎无法弄清楚它的真相 我正在尝试从名为 custom js 的 js 文件对 helpers php 中的某些代码进行简单的 AJAX 调用 然而 我不断收到 404 错误 因为我似乎没有正确遍历
  • 使用 PHP / Javascript 检测应用内浏览器 (WebView)

    我开发了一个适用于 iOS 和 Android 的应用程序 它使用应用程序内浏览器 Webview 从我的网络服务器访问 HTML 文件 我不希望用户可以在不使用该应用程序的情况下访问此文件 是否有可能检测用户是否使用应用程序或直接通过此智
  • 在 Yii 2.0 中添加 jquery

    如何在 Yii 2 0 中将 jQuery 添加到我的页面 在 Yii 1 x 中你可以使用 Yii app gt clientScript gt registerCoreScript jquery 我已经尝试用自己的 View 类重写并尝
  • 在 Drupal 8 中如何在保存节点之前操作值?

    我有一个编辑节点表单 当用户输入新值并单击提交来编辑节点时 我首先想取回旧节点 操作该值 然后保存 更新节点 以下是我的解决方案 但它不起作用 function custom module form node form alter form
  • 使用矩阵参数创建 GET 请求

    我将使用的网络服务需要矩阵参数 http tester com v1 customers lastname Jackson firstname Tim bookingreference 7Y9UIY 而不是通常的 http tester c
  • 使用列模数的更简洁方法

    我目前有一个人员列表 我已将其分为两列 但在完成代码后 我一直想知道是否有更有效或更干净的方法来完成同样的事情 echo table class area list tr Loop users within areas divided up
  • Nginx - 自定义 404 页面

    Nginx PHP 在 fastCGI 上 对我来说非常有用 当我输入不存在的 PHP 文件的路径时 我不会得到默认的 404 错误页面 任何无效的 html 文件都会出现该错误页面 而只会得到 未指定输入文件 如何自定义此 404 错误页
  • php中的可变长度数据包

    我正在接收通过 UDP 发送到我的服务器的数据包 我正在使用 socket read 来读取数据 它运行得很好 但是我遇到了一个错误 在我的例子中 socket read 的长度参数并不总是相同的 数据长度的范围可以是 50 150 字节
  • .htaccess 只允许访问包含文件

    我的网站上有各种子文件夹 我希望用户无法通过 URL 访问它们 但同时我的主要 PHP 文件能够包含它们或将它们用作表单或链接上的操作 我尝试使用 htaccess 与
  • Prestashop 1.6 自定义模块未显示在前端

    我的模块没有显示在前端 我按照这个链接 doc prestashop com display PS15 Creating a PrestaShop module 在 prestashop 1 6 中创建自定义模块 我已经检查了位置 清除并禁
  • Web 服务 SOAP 请求适用于 SOAPUI,但不适用于 PHP

    我已经尝试了几乎所有我能找到的可能的解决方案 但我似乎无法让这个脚本工作 以下是我之前的一些尝试 如何使用 wse php 库通过 SOAP 连接到安全的 Web 服务 https stackoverflow com questions 1
  • 应用程序在 JSON jparser 发出 http 请求时崩溃

    您好 我使用本教程连接到网络或本地的 mySQL 数据库 here http www androidhive info 2012 05 how to connect android with php mysql 虽然所有服务器端 php 文
  • PHP 一次只能看到 20 个上传文件

    当我尝试一次上传超过 20 个文件时 网络服务器只能看到前 20 个文件 任何其他文件都会被忽略 问题是什么 简单的代码可以尝试
  • 调用php中未定义的方法DateTime::add方法

    我使用 php 5 2 9 作为 xampp 安装的一部分 我正在为我的网络应用程序使用 codeigniter 框架 当我调用 DateTime add 时 Call to undefined method显示错误 我的代码是 date
  • 使用PHP检测IE浏览器版本

    我正在使用 SERVER HTTP USER AGENT 来检测用户的浏览器 当我在 IE8 上的本地主机上运行 var dump 时 它返回 兼容的 微星8 0 但是当我将其上传到我的主机 godaddy 时 我得到 兼容的 MSIE 7
  • SalesForce.com:通过 PHP 检索自定义字段

    我在 SalesForce DE 站点中创建了一个简单的自定义联系人对象 API 名称为 Contact c 该对象有一个 Full Name c 字段 用于测试连接 然后我尝试通过 PHP 检索所有联系人 特别是此字段 try mySfo
  • 独立 Symfony2 包内的功能测试

    我需要直接在独立包中进行一些功能测试 我不想测试控制器 只是测试真实服务之间的一些交互 我想知道是否有标准 最佳方法可以做到这一点 我用一种方法做到了 但想知道是否有更好的方法 这是我自己的解决方案 我总结了在独立包中测试的所有过程 1 首

随机推荐