Slim - 如何发送带有“Content-Type:application/json”标头的响应?

2024-02-14

我有这个简单的 REST api,用 Slim 完成,

<?php

require '../vendor/autoload.php';

function getDB()
{
    $dsn = 'sqlite:/home/branchito/personal-projects/slim3-REST/database.sqlite3';

    $options = array(
        PDO::ATTR_PERSISTENT => true,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    );
    try {

        $dbh = new PDO($dsn);

        foreach ($options as $k => $v)
            $dbh->setAttribute($k, $v);

        return $dbh;
    }
    catch (PDOException $e) {
        $error = $e->getMessage();
    }
}

$app = new \Slim\App();

$app->get('/', function($request, $response) {
    $response->write('Bienvenidos a Slim 3 API');
    return $response;
});

$app->get('/getScore/{id:\d+}', function($request, $response, $args) {

    try {
        $db = getDB();
        $stmt = $db->prepare("SELECT * FROM students
            WHERE student_id = :id
            ");

        $stmt->bindParam(':id', $args['id'], PDO::PARAM_INT);
        $stmt->execute();

        $student = $stmt->fetch(PDO::FETCH_OBJ);

        if($student) {
            $response->withHeader('Content-Type', 'application/json');
            $response->write(json_encode($student));

        } else { throw new PDOException('No records found');}

    } catch (PDOException $e) {

        $response->withStatus(404);
        $err =  '{"error": {"text": "'.$e->getMessage().'"}}';
        $response->write($err);
    }
    return $response;
});

$app->run();

但是,我无法让浏览器向我发送application/json内容类型,它 总是发送text/html?我做错了什么?

EDIT:

好吧,经过两个小时的头撞墙后,我偶然发现了这个答案:

https://github.com/slimphp/Slim/issues/1535 https://github.com/slimphp/Slim/issues/1535(在页面底部) 这解释了发生了什么,似乎response对象是不可变的并且 因此,如果您想在之后归还它,则必须归还或重新分配它 尽管。


所以,而不是这个:

if($student) {
            $response->withHeader('Content-Type', 'application/json');
            $response->write(json_encode($student));
            return $response;

        } else { throw new PDOException('No records found');}

这样做:

if($student) {
    return $response->withStatus(200)
        ->withHeader('Content-Type', 'application/json')
        ->write(json_encode($student));

} else { throw new PDOException('No records found');}

一切都很好。

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

Slim - 如何发送带有“Content-Type:application/json”标头的响应? 的相关文章

  • 如何从页面获取所有网址(php)

    我有一个页面 其中的网址和描述逐一列出 例如书签 网站列表 如何使用php从该页面获取所有url并将它们写入txt文件 每行一个 只有url而没有描述 页面如下所示 一些描述 http link com 其他说明 http link2 co
  • 如何在Redis中正确存储图片?

    决定将图像存储在Redis中 如何正确执行 现在我这样做 redis gt set image path here is the base64 image code 我不确定这是否正常 将图片存储在Redis中是完全可以的 Redis 键和
  • Laravel 中的 SQL 运算符是什么?

    我正在查看 Laravel 的源代码 发现了很多 Eloquent 的 SQL 运算符 我想知道其中一些是什么以及如何使用它们 不幸的是我没有找到任何文档 这是我找到的运营商vendor laravel framework src Illu
  • Jpgraph:如何在php中设置组条形柱形图的标签

    这是我的 jpgraph 演示代码
  • 如何在此查询中获取以 KM 为单位的距离

    salons Salon select salons gt selectRaw 6371 acos cos radians cos radians lat cos radians lng radians sin radians sin ra
  • MySQL 错误“连接过多”

    我正在将 MySQL 5 0 用于由 GoDaddy linux 托管的网站 我正在对我的网络应用程序进行一些测试 突然我注意到页面刷新速度非常慢 最后 经过漫长的等待 我到达了一个页面 上面写着 MySQL 错误 连接太多 它指向我连接到
  • 如何在时事通讯中发送图像?

    谁能告诉我如何将图像作为时事通讯的主体部分发送 我如何从后端添加任何图像 以便当我向订阅者发送新闻通讯时 我想要显示的图像作为邮件的主体部分 实际上我想说的是 我有一个可以输入文本的表单 并且该文本在时事通讯中效果很好 现在我也想在表单中添
  • 在 Twig 中使用 PHP 函数

    我有一个 PHP 代码 用于在我的通用控制器中为我的 Twig 模板添加一个新类 opencart htdocs catalog controller common cart php 该代码应检查设备是否是移动设备 function onS
  • 设置了 @version $Id$ 的 SVN Checkout

    我在 Subversion 中进行开发 在每个 PHP 文件的顶部都有以下注释块
  • 在 tumblr 主题中显示当前年份

    我想在我的 Tumblr 主题的页脚中放置一个版权声明 例如 Acme Co 2013 但我不想每年都进行更新 通常使用 php 可以使用date 这很好 但是虽然 Tumblr 是基于 php 构建的 但我认为最终用户不能在网站上使用它
  • 当 url 不存在时 file_get_contents

    我正在使用 file get contents 访问 URL file get contents http somenotrealurl com notrealpage 如果 URL 不真实 则返回此错误消息 如何让它优雅地出错 以便我知道
  • 在 .NET C# 项目中使用 PHP

    有谁知道是否可以 以及是否有任何复杂性 在 NET C 项目中使用 PHP 语言 我知道 VB 和 C 现在可以混合在解决方案中 所以我想知道 由于 IIS 现在能够运行 PHP 您是否可以将它们组合成一个单一的运行时 显然 提出这个问题的
  • WordPress 子主题 style.css 不起作用

    我创建了一个与父主题格式相同的文件结构 我的父主题称为 Alpine Alpine 中有一个functions php 和style css 文件 似乎没有任何其他 style css 文件 我创建了一个名为 Alpine child 的目
  • 循环遍历数据数组并打印“递增”字母

    我需要循环遍历数据数组并为每个数组值打印一个 递增 字母 我知道我可以这样做 array array 11 33 44 98 1 3 2 9 66 21 45 array to loop through letters array a b
  • 如何从 php 中的字符串中删除 unicode 字符 (LEFT_TO_RIGHT_MARK)

    我试图在将字符串编码为 JSON 之前从字符串中删除从左到右标记 u200e 和从右到左标记 u200f 以下两者似乎都不起作用 s mb ereg replace u200e s s preg replace u200e u s s pr
  • 在 VS Code 中调试 PHPUnit 测试?

    我最近配置了 VS code 以使用 xdebug 调试 PHP 它与我的应用程序代码一起可靠地工作 但是当我使用 PHPunit 运行单元测试时 我的断点被忽略 我的服务器在一个流浪盒子内运行 My php ini文件包含以下行 xdeb
  • Laravel Eloquent ORM 返回 stdClass 而不是实际模型

    我正在做 mymodel MyModel where url domain gt first 这返回了一个 MyModel 对象 现在 不知何故 它返回了一个 stdClass 发生了什么 laravel 有更新吗 我改变了什么吗 Than
  • 使用 PDO 的基于 PHP 类的用户系统 - 调用非对象上的成员函数prepare()

    我做了相当多的研究 故障排除和搜索 试图解决我的问题 但没有运气 所以这是错误 调用非对象上的成员函数prepare 生成此错误的代码位于我的用户 Auth 类中 如下所示 this gt dbManager gt db gt prepar
  • PHP:switch 与 if [重复]

    这个问题在这里已经有答案了 哪种形式更有效率 这个 switch var case 1 break case 2 break 或者这个 if var 1 elseif var 2 在性能方面 性能方面完全无关 As PHPBench htt
  • 如何找到数组中的最小数字并返回该数组的主索引?

    我有一个如下所示的数组 我想找到 diff 索引中数字最小的数组 所以在这种情况下 我想取回数组 7 我需要的只是数组编号 即 7 而不是任何其他信息 我知道我可以使用 array column 轻松找到最小的数字 但如何返回整个数组索引

随机推荐

  • 如何通过Gitlab CI成功安装fbprophet?

    我正在尝试使用 Gitlab CI 将我的代码 使用 fbprophet 部署为 EC2 实例 my requirements txt file i https pypi org simple cmdstanpy 0 4 convertda
  • 架构arm64的未定义符号

    每次从 CocoaPods 导入文件时 我都会收到 Apple Mach O 链接器错误 Undefined symbols for architecture arm64 OBJC CLASS FBSession referenced fr
  • 如何更改 Material UI 自动完成字体大小?

    我正在尝试将自定义 css 应用到 Material UI Autocomplete 组件 具体来说 我想更改输入字段的字体大小 这是我现在所拥有的
  • 在 Macos High Sierra 上创建并绑定套接字

    我在 Hight Sierra 应用程序中创建套接字时遇到严重且奇怪的问题 如果我创建命令行工具 一切都好 我创建套接字 绑定套接字 但是如果我尝试创建 Cocoa 应用程序 我无法绑定我的套接字 如果我在Cocoa App中使用CFSoc
  • C++ 风格:Stroustrup 指针星号的放置

    有谁知道为什么Stroustrup的风格是指针的放置如下 具体来说 Stroustrup 就此事提供了哪些指导 int p vs int p 因为声明多个变量需要每个变量名称旁边加星号 这会导致 int p x vs int p x 在 K
  • 增加字符串值

    如何增加字符串值 例如 string RECONCILIATION COUNT if thing happens RECONCILIATION COUNT 这通常不起作用 因为不可能以与 int 值相同的方式递增字符串变量 RECONCIL
  • 棋盘游戏胜局 - 搜索算法

    我正在寻找可能有效的算法来检测在 19x19 棋盘上玩的五子棋 五连棋 游戏中的 获胜 情况 当其中一名玩家设法连续获得五颗且不超过五颗 石子 水平 对角线或垂直 时 就会出现获胜情况 我可以轻松访问以下数据 两个玩家之前的动作 石头 存储
  • 如何在选择查询(MySQL)中仅消除连续重复项而不是所有重复项?

    我有一个这样的表 01 Jul 17 100 02 Jul 17 100 03 Jul 17 300 04 Jul 17 300 05 Jul 17 500 06 Jul 17 500 07 Jul 17 300 08 Jul 17 400
  • 如何检测隐藏字段篡改?

    在我的网络应用程序的一种形式上 我有一个隐藏字段 出于安全原因 我需要保护它免遭篡改 我正在尝试提出一个解决方案 通过该解决方案 我可以检测隐藏字段的值是否已更改 并做出适当的反应 即使用通用的 出现问题 请重试 错误消息 该解决方案应该足
  • 对成员 'tableView(_:numberOfRowsInSection:)' 的引用不明确 为什么会出现此错误?

    这是我的代码 其中出现错误 错误出现在第 3 行 if let indexpath override func prepare for segue UIStoryboardSegue sender Any if segue identifi
  • 像一维一样循环二维子图

    我正在尝试使用子图绘制许多数据 并且没有遇到麻烦 但我想知道是否有一种方便的方法可以做到这一点 下面是示例代码 import numpy as np import math import matplotlib pyplot as plt q
  • spectj可以向java.lang.String添加方法吗

    我读过aspectj的一些文章 我知道它可以增强类 这很有吸引力 我有一个非常愚蠢的问题 我找不到明确的答案 spectj可以向java lang String添加方法吗 或者类似的问题 如果我无法获取某些类的源代码 我可以通过aspect
  • Kubernetes 集群中的 DisallowedHost Django 部署:无效的 HTTP_HOST 标头

    我在 Azure Kubernetes 集群中为前端服务部署了 Django 并进行了一些基本配置 但请注意 同样的问题也适用于我本地的 Minikube 集群 我从远程容器注册表中获取 Django 前端容器映像并公开port 8010
  • 检测数据何时发生变化

    好吧 故事是这样的 我有很多特定格式的文件 相当大 大约 25GB 需要导入到数据存储中 这些文件不断更新数据 有时是新的 有时是相同的数据 我正在尝试找出一种算法来检测文件中特定行是否发生更改 以便最大限度地减少更新数据库所花费的时间 目
  • PHP date - 获取本地语言的月份名称

    我有这部分功能 它给我英文月份的名称 我如何将它们翻译成我的当地语言 塞尔维亚语 month name date F mktime 0 0 0 i Where i是月份的数字 值 1 12 也可以看看PHP mktime https www
  • 用于旋转相机意图捕获的图像的代码在 Android 中不起作用

    我有一个问题 使用相机意图捕获的图像被旋转 我在为什么使用相机意图捕获的图像在某些 Android 设备上会旋转 https stackoverflow com questions 14066038 why image captured u
  • 当选择标签样式属性设置为 display: none; 时如何从下拉列表中检索值在 python 硒中

    我正在尝试废弃一个网站的下拉类别的所有组合 但是 选项的文本属性仅为空白 尽管在检查时 我可以看到每个选项都存在文本 from selenium import webdriver from selenium webdriver suppor
  • 如何使用 .Mdf 文件部署 C# exe?

    我已经创建了 Windows 应用程序 并且创建了本地数据库并添加了用户名和密码 如果用户名和密码正确 那么我必须打开代码 我已经生成了一个 Setup Msi 但是当我尝试在我的机器中安装时它工作正常 但是当我尝试在其他没有 Net或任何
  • 为什么 SQL Server '=' 比较器不区分大小写?

    我刚刚意识到 SQL Server 比较器在用于文本比较时不区分大小写 我对这个功能有几个疑问 这对于所有数据库都相同还是特定于 SQL Server 我一直在使用lower函数以确保文本比较到目前为止不敏感 遵循同样的做法仍然是一个好主意
  • Slim - 如何发送带有“Content-Type:application/json”标头的响应?

    我有这个简单的 REST api 用 Slim 完成