问题标签 [mezzio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Zend Expresive - EmitterException:先前已发出输出
我试图在 VPS 上配置我的网站。在我的本地机器上一切正常,但在 VPS 上出现 500 错误。这是日志:
我在用着:
- Zend 表达 3
- Nginx 1.14.0
- PHP 7.2 FPM
我不知道是什么导致了这个问题,我很难在这个服务器上调试它。
php - 缺少来自 PHP/Apache2 的响应的 CORS 标头
我公司正在开发的 Zend Expressive 项目已准备好交付,但在我们的暂存环境中,我们似乎缺少 CORS 飞行前请求的响应标头。这在我们的开发环境中不会发生。我们在管道中使用了CorsMiddleware,但看起来中间件并不是罪魁祸首。
问题
在运行时,中间件检测传入的飞行前请求,它将回复如下响应:
好吧,这只适用于我们的开发服务器和 php 的内置网络服务器。响应与我们的登台服务器不同,即使请求完全相同,除了主机:
我们尝试过的
调查中间件
我们已经验证 CorsMiddleware 运行良好并且实际上设置了所需的标头。当我们修改 CorsMiddleware 的响应代码并将其设置为202
而不是200
我们现在确实得到了我们正在寻找的标头。将响应代码更改回200
使标题再次消失。
手动设置标题
使用以下示例:
这具有相同的行为,直到我们将响应代码修改204
为200
.
看着身体
响应正文是空的,不应该包含任何内容,但是当我们向响应正文添加内容时,标题看起来好像没有任何问题。
因此,如果我添加正文内容,则会出现标题。没有正文内容?没有 CORS 标头。这是Apache中的一些设置吗?我是否缺少 PHP 中的一些配置?我忘记了什么吗?
更多细节
所有请求都经过 httpie、Postman、curl 和 PhpStorm 的 http 客户端测试。
这是 httpie 示例:
这是卷曲示例:
pipeline.php 中的 Cors 配置(通配符仅用于测试):
登台环境:
暂存的 Apache2 虚拟主机:
Apache2 vhost 正在开发中:
对于所有指责 Cloudflare 的人:
试试这个与 httpie 的直接链接。此链接未使用 cloudflare:
在浏览器中查看源代码:http: //37.97.135.33/cors.php ?source=1
unit-testing - 如何使用 Prophesy 在 Zend Expressive 中为 RequestHandlerInterface 类制作测试替身?
我正在尝试对process()
Zend Expressive 应用程序中的中间件方法进行单元测试。为此,我需要模拟出$delegate
方法的参数,该参数是 typeRequestHandlerInterface
并且将具有 method handle()
。
这应该很容易做到,因为我在此测试中使用 Prophesy 成功模拟了其他对象:
每当handle()
调用该方法时,我都会收到以下错误:"Unexpected method call on Double\RequestHandlerInterface\P18:\n - handle(\n Double\ServerRequestInterface\P17:000000004a01de0d000000000617c05e Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n )\n )\nexpected calls were:\n - handle(\n\n )"
这是测试。请注意,其他模拟按预期工作,但调用时仍会抛出错误handle()
:$mockDelegate
这是它试图测试的方法。当该方法应该将请求委托给管道时,似乎会发生错误。看这里:
如何RequestHandlerInterface handle()
使用 Prophesy 准确地模拟该方法以实现无错误测试?
zend-framework - Swoole http 服务器中的 Zend View 行为
我们正面临一个使用 Zend View 并在 swoole http 服务器中运行的 Zend Expressive 应用程序的奇怪行为。此行为与单例模式有关。
我们已将 Zend Expressive 配置为在 swoole http 服务器中运行 - https://docs.zendframework.com/zend-expressive-swoole/ - 并且所有 api 编程工作都没有问题(swoole 是火箭!)
但是我们已经尝试进行下一步,我们尝试通过 swoole http 服务器执行一个 web 界面。
在那里,我们发现了奇怪的行为。为了简化我的问题(我们使用了很多视图助手),我们的 Web 界面与 Zend View 一起使用并使用了 headTitle 助手。当您第一次加载 Web 界面时,一切正常,但是当您重新加载页面时,您会看到元标题重复。
我们的处理程序是下一个
我们的观点是下一个
在 Google 中搜索,我们在https://framework.zend.com/blog/2018-03-21-expressive-swoole.html中发现Zend 的团队遇到了类似的问题:
但是,对于异步服务器,每个请求都将使用相同的实例。通常,对 PSR-7 消息实例的操作将创建新实例,因为它们实现的接口被指定为不可变的。不幸的是,由于 PHP 语言的技术限制,我们无法使响应消息的主体不可变。这意味着如果一个进程写入该主体,然后是后续进程——甚至是那些并行执行的进程!— 将收到相同的更改。在最好的情况下,这可能会导致重复的内容,在最坏的情况下,会导致提供不正确的内容或执行信息泄露!
他们已经解决了
为了应对这些情况,我们修改了我们在依赖注入容器中注册的 Psr\Http\Message\ResponseInterface 服务:它现在返回的不是接口实例,而是能够生成实例的工厂
但是检查 Zend Framework 类,我们发现我们遇到了另一个问题,因为解决方案是在代码中实现的,并且对 apis 的所有请求都是正确的
在 zend-expressive-swoole/src/ConfigProvider.php 你可以看到
然后我们改变观点并检查 zend 视图助手,我们发现视图助手 HeadTitle 扩展自 Container\AbstractStandalone
查看这个 AbstractStandalone 我们发现在构造函数方法中,容器是通过单例加载的
这是问题所在。使用 Zend Expressive Swoole 模块,每个请求和每个响应都是独立的,但会反复使用同一个 Singleton 容器。
你遇到过这个问题吗?你是怎么解决这个问题的?
我们正在考虑创建一个自定义助手来删除所有视图助手容器,但如果这样做,我们必须更改很多视图文件以添加这个新的自定义助手。
提前致谢
php - 在 zend-expressive 中更改 default_suffix 很热门?
我有一个问题 - 我需要改变default_suffix
其他phtml
事情......我该怎么做?我找到文件所在的位置-
\Zend\Expressive\ZendView\NamespacedPathStackResolver.php
但是我怎么能改变它呢?我找不到可以写类似的东西
$foo->setDefaultSuffix('html')
也许,我可以在config.php
文件中写一些东西?
mezzio - hal 中生成的不完整链接(zend-expressive-hal + zend-router)
我的路线定义:
数据数据地图定义:
生成结果:
所有链接都是用不完整的href生成的,只有域部分,路由部分被剥离..
预期的结果是这样的:
我做错了,我不知道从哪里开始..
谢谢大家给我一些想法
简化控制器代码:
PS:我没有使用完整的zend-expressive只是zend-framework ..
php - 仅使用 php 解密 zend-crypt 混合
我正在开发一个 API,它返回敏感数据需要某种握手,它将返回一个公钥供客户端在将信息发送到 API 之前对其进行加密。
对于 API,我使用了富有表现力的 zend 并执行握手,我使用的是 zend-crypt 模块,更具体地说是混合加密。
工作流程或多或少如下:
客户端应用程序向 api 发送公钥。API 使用此公钥加密服务器提供的公钥,使用混合加密。加密服务器的公钥返回给客户端客户端必须解密密钥才能将其用于敏感数据的加密。
以下是执行公钥加密的源代码:
我的问题是:如何在不使用框架的客户端上解密这个公钥,例如纯 PHP?
由于此 API 可用于移动应用程序开发或桌面软件,我需要了解解密的逻辑才能在不同平台上执行测试。
我目前正在使用 Codeception 对这个中间件进行集成测试,测试代码是这样的:
php - 绕过摘要身份验证中间件(zend expressive)?
所以我正在开发一个使用摘要身份验证中间件的 api。如果请求中存在特定参数,我希望能够完全绕过身份验证。
小伙子们,我有正确的想法吗?欢迎任何帮助或建议!
symfony - 什么是 zend-expressive symfony 控制台命令的容器
我目前正在尝试集成这个库
https://www.xtreamwayz.com/blog/2016-02-07-zend-expressive-console-cli-commands
好像需要
谁能帮我指出需要指出哪个文件?它看起来像什么>?