Zendexpressive-php错误报告

2024-04-28

我正在尝试 zendexpressive,这是我的config/autoload/zend-expressive.global.php当我尝试向将转到操作类的路径发出请求时,它返回错误页面,但我在 apache 错误日志中看不到任何 php 错误。所以我无法判断出了什么问题。

zend-expressive 有没有办法获得这些 php 错误日志?还有 zendexpressive 有什么好的文档吗?官方文档好像并没有太多例子。

return [
    'debug' => true,    
    'config_cache_enabled' => false,
    'zend-expressive' => [
        'error_handler' => [
            'template_404'   => 'error::404',
            'template_error' => 'error::error',
        ],
    ],
];

如果你想尝试表现力,我建议使用骨架安装程序。它为您提供了安装内容的选项。其中一个选项是 whoops 错误处理程序,它提供了有关异常的大量详细信息。

官方文档在这里包含很多信息:https://docs.zendframework.com/zend-expressive/ https://docs.zendframework.com/zend-expressive/

安装程序文档:https://docs.zendframework.com/zend-expressive/getting-started/骨骼/ https://docs.zendframework.com/zend-expressive/getting-started/skeleton/

Update: Add 错误处理程序 https://docs.zendframework.com/zend-expressive/reference/migration/to-v1-1/#error-handling记录器示例

作为 ErrorHandler 的基础,您可以使用Zend\Stratigility\Middleware\ErrorHandler。您可以附上一个listener https://docs.zendframework.com/zend-stratigility/error-handlers/#errorhandler-listeners到 ErrorHandler 并使用它进行日志记录。或者,您可以复制该类并根据您的需要进行修改。

下一步是为其创建一个 ErrorHandlerFactory:

<?php 
// src/Factory/ErrorHandler/ErrorHandlerFactory.php

namespace App\Factory\ErrorHandler;

use Interop\Container\ContainerInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Log\LoggerInterface;
use Throwable;
use Zend\Diactoros\Response;
use Zend\Expressive\Middleware\ErrorResponseGenerator;
use Zend\Stratigility\Middleware\ErrorHandler;

class ErrorHandlerFactory
{
    public function __invoke(ContainerInterface $container)
    {
        $generator = $container->has(ErrorResponseGenerator::class)
            ? $container->get(ErrorResponseGenerator::class)
            : null;

        $errorHandler = new ErrorHandler(new Response(), $generator);

        if ($container->has(LoggerInterface::class)) {
            $logger = $container->get(LoggerInterface::class);
            $errorHandler->attachListener(function (
                Throwable $throwable,
                RequestInterface $request,
                ResponseInterface $response
            ) use ($logger) {
                $logger->error('"{method} {uri}": {message} in {file}:{line}', [
                    'date'    => date('Y-m-d H:i:s'),
                    'method'  => $request->getMethod(),
                    'uri'     => (string) $request->getUri(),
                    'message' => $throwable->getMessage(),
                    'file'    => $throwable->getFile(),
                    'line'    => $throwable->getLine(),
                ]);
            });
        }

        return $errorHandler;
    }
}

之后您需要注册ErrorHandler。您可以通过将其添加到config/autoload/middleware-pipeline.global.php特别是在middleware => always部分。这样它就会一直运行。如果您将其注册为第一个,它将先于其他任何程序运行。

<?php 
// in config/autoload/middleware-pipeline.global.php

use Acme\Container\ErrorHandlerFactory;
use Zend\Stratigility\Middleware\ErrorHandler;

return [
    'dependencies' => [
        /* ... */
        'factories' => [
            ErrorHandler::class => ErrorHandlerFactory::class,
            /* ... */
        ],
        /* ... */
    ],
    'middleware_pipeline' => [
        'always' => [
            'middleware' => [
                ErrorHandler::class,
                /* ... */
            ],
            'priority' => 10000,
        ],
        /* ... */
    ],
];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zendexpressive-php错误报告 的相关文章

随机推荐

  • 使用 CGFloat 和 float 有什么区别?

    我倾向于在所有地方使用 CGFloat 但我想知道我是否会因此而受到毫无意义的 性能打击 CGFloat 似乎是比 float 更 重 的东西 对吧 我应该在什么时候使用 CGFloat 什么才是真正的区别 正如 weichsel 所说 C
  • 更改通过表单上传的 tmp 文件的文件名

    就像标题说我想更改用户通过表单上传的文件的文件名 这是代码 HTML
  • 这是一个合理的用户注册流程吗?

    我正在制定内部申请的注册流程 我的初步设计如下 我的主要问题是是否真的有必要包括registration confirmation code 它是保护应用程序免受现实威胁还是只是增加不必要的复杂性 对此我不确定 用户输入电子邮件地址 由于这
  • 如何获得日期为 yyyy-mm-dd 的年份差异?

    我想得到以 yyyy mm dd 格式给出的两个日期之间的差异 差异应该是年份 var ds 2002 09 23 var today date new Date alert today date Date prototype yyyymm
  • 如何使用 Ant 配置惰性或增量构建?

    Java编译器提供增量构建 所以javac蚂蚁任务也是如此 但大多数其他进程则不然 考虑到构建过程 它们将一组文件 源 转换为另一组文件 目标 我在这里可以区分两种情况 变压器cannot获取源文件的子集 仅获取整个集合 这里我们只能做懒惰
  • Angular:将数据从工厂 ajax 调用传递回我的控制器

    我一直在使用 Angular 并且已经从使用本地数据 似乎工作正常 转向尝试通过工厂中的 ajax 调用来填充我的视图 这是代码 div h2 Get data using a Factory h2 div div div
  • 使用 Asynchronous ReadableStream 和 Response 从 Service Worker 的 fetch 事件返回 HTML

    这个问题类似于我的另一个问题 https stackoverflow com questions 62457644 use readablestream with response to return html from fetch eve
  • JavaFX 中的隐形舞台/场景

    我正在寻找一种隐藏 JavaFX 舞台或场景的方法 现在我知道了 hide 但这行不通 我需要一些仍然保留窗口的东西 但只是使其完全透明 一个很好的比喻是display none and visibility hidden在CSS中 第一个
  • Dataproc:使用 PySpark 从 BigQuery 读取和写入数据时出现错误

    我正在尝试读取一些 BigQuery 数据 ID my project mydatabase mytable 原始名称受保护 来自用户管理的 Jupyter Notebook 实例 内部Dataproc https cloud google
  • 通过命令行创建私有 github 存储库

    我希望能够通过命令行创建一个私人 github 存储库 我认为使用其余 API 应该可以做到这一点 但是我无法从文档中弄清楚如何做到这一点 这可能吗 The GitHub CLI https github com cli cli tool
  • 安全浮点除法

    我的代码中有一些地方我想确保 2 个任意浮点数 32 位单精度 的除法不会溢出 目标 编译器不保证 足够明确 对 INF INF 的良好处理 并且 不完全保证 IEEE 754 的异常值 可能未定义 并且目标可能会改变 另外 我无法对这几个
  • 使用 BeautifulSoup 在 python 中抓取多个页面

    我已经设法编写代码来从第一页中抓取数据 现在我不得不在这段代码中编写一个循环来抓取接下来的 n 页 下面是代码 如果有人可以指导 帮助我编写从剩余页面中抓取数据的代码 我将不胜感激 Thanks from bs4 import Beauti
  • 为什么playsound函数无法在python中播放我的mp3文件

    所以基本上我试图创建一个音乐播放程序 可以在您要求时播放音乐 我只是想让歌曲播放部分实际工作 所以我编写了一个超级简单的代码来测试它 import playsound playsound sample mp3 This was done i
  • 在 C# 中查找并写入大于 2GB 的文件

    在 C 中 FileStream的方法 Read Write Seek 采用integer在参数中 在一个上一篇文章 https stackoverflow com questions 5654298 filestream read wri
  • Access 2003中可以制作存储过程或函数吗?

    在Access 2003中 我们可以创建存储过程或函数吗 对于 Access 2003 答案是否定的 Access 2010 确实有表触发器和存储过程 这些是真正的引擎级例程 作为行更新的结果运行 因此 导致行修改的表单或 VBA 记录集代
  • 在 Silverlight 中克隆业务对象的最佳方法是什么?

    创建 DTO 克隆的最佳方法是什么 Silverlight 中没有 ICloneable 接口或 BinaryFormatter 类 反思是唯一的方法吗 这是我们为克隆编写的代码 这适用于 Silverlight 2 和 3 Public
  • CloudWatch:计算日志文件中特定字符串的出现次数

    我有包含特定弹簧模式的日志文件 这些字符串模式在每个日志事件中频繁出现 例如
  • Python 列联表

    作为我正在编写的项目的一部分 我正在生成很多很多列联表 工作流程是 获取具有连续 浮点 行的大型数据数组 并通过分箱将其转换为离散整数值 例如 结果行的值为 0 9 将两行切片为向量 X 和 Y 并生成列联表 https en wikipe
  • 终止进程树(C for Windows)

    以前曾有人问过这个问题 但我在代码中找不到明确的答案 我打开一个进程 ProcessA PID 为 1234 此进程打开一个子进程 ProcessAB PID 5678 完成后 我终止了 ProcessA 但 ProcessAB 仍然存在
  • Zendexpressive-php错误报告

    我正在尝试 zendexpressive 这是我的config autoload zend expressive global php当我尝试向将转到操作类的路径发出请求时 它返回错误页面 但我在 apache 错误日志中看不到任何 php