问题标签 [slim-4]
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 - PHPUnit测试具有依赖关系的类的特定方法
在阅读了相当多的文档后,我想出了这个函数来测试服务方法findAllUsers
。我首先创建存储库的存根,然后告诉相关方法findAllusers
返回什么(是的,它们在 repo 和服务中具有相同的名称),然后创建一个我想UserService.php
用 repo 存根和空实例测试的类的实例。
类的构造函数UserService.php
和UserValidation.php
我觉得给类提供空实例并不是很优雅。有没有更清洁的方法?我想我想要的是创建一个UserService
仅提供相关依赖项(模拟UserRepository
实例)的实例,并让其余部分由 di 容器自动装配,php-di
这有意义吗?我听说过创建一个用于测试的容器,该容器返回手动创建的具有默认返回值的假类,因为它无论如何都用于稍后的集成测试。我很想看到一些例子和变体。
我对自动化测试非常陌生,因此欢迎对此功能提出任何批评,即使它与问题没有直接关系。
编辑
在阅读了评论和答案之后,我认为我可以想象的理想功能是在容器中注册UserService
类,该容器使用所需的自定义依赖项(在我的情况下是模拟UserRepository
)和(对于最少的开销)进行实例化其他依赖项的空模拟,不仅用自定义模拟替换存储库,还让自动装配功能注入真正的依赖项。但也许我在这里错了,我不知道注入真正的依赖项是否更慢或更多开销。
为了实现这一点,尽管在容器中注册新依赖项的函数必须以某种方式检测给定的参数(UserRepository
如果有多个,则包含或数组)和所需的缺失依赖项(UserValidation
and Logger
)并模拟它们并最终创建UserService
with cutom的实例UserRepository
和被嘲笑的UserValidation
and Logger
。
这是我的编程和 PHP 知识有限的地方,因为我不知道一种干净的编程方式。可能我不是第一个这样做的人,无论如何它是非常反模式的,但是如果我知道你对这个想法的看法以及为什么这可能是一个坏主意以及如何做到这一点,我会很有趣。
php - slim/twig-view 不适用于附加路由中间件
我一直在使用 slim/twig-view,记录在这里:https ://notes.enovision.net/slim/composer-package-documentation/slim_twig-view 。处理路由、渲染视图的推荐方法是:
问题是,如果您尝试添加任何基于路由的中间件以在之后运行,它会失败
出现这样的错误:
我看到这是因为我没有从路由处理程序返回响应,所以我重写了路由处理程序以返回 $response:
还是同样的错误。
我可以解决这个问题,但这是一个新建项目,如果能够访问路由中间件会很好。有任何想法吗?
php - 从 Slim Framework V4 中的类方法处理程序从一个 POST 路由重定向到另一个 POST 路由
我有两条 POST 路由 /test 和 /test_new。目标是将来自 /test_new 的所有传入请求连同正文内容重定向到 /test。因此,以下代码旨在使用命名路由进行重定向
这段代码失败并显示消息
如果我只是将 $routeParser 替换为第二个路由处理程序中的注释行并将 $app 用于 RouterParser 它工作正常。但是在我的实际代码中,我在类函数中有处理逻辑,并且无法访问其中的 $app 。
有人可以帮我解决这个问题吗
permissions - 在 Fedora 31 中,如何为 Podman 容器中运行的 nginx 设置权限?
我正在尝试使用 podman-compose 为 Slim-4 项目设置本地开发 LEMP 堆栈。到目前为止,我有 PHP 和 Nginx 的容器。Nginx 运行但在尝试访问日志目录时出现 500 错误 - 权限被拒绝。该目录位于 nginx 提供的公共目录之外。
我已将 selinux 设置为允许以消除其问题。我使用 podman unshare 将所有权设置为容器的 Nginx UID:GID。我只用一个简单的索引文件尝试了设置——该文件没有问题。因此,nginx/podman 可以访问主机上的 nginx 配置文件。问题必须与写权限有关。
这是我的 docker-compose 文件:
我错过了什么?
php - PHP Slim 4 到处获取请求(Psr\Http\Message\RequestInterface)
我发现访问代码中各处的应用程序设置很有用。所以我把容器
我的问题是:我怎样才能访问请求(Psr\Http\Message\RequestInterface)“在我的代码中的每一个地方”?使用相同的机制还是可能有一些我错过的更简单的东西?
==== 更新 ====
为了更准确地按照 Nima 的要求,我喜欢 Slim 处理错误的方式(http://www.slimframework.com/docs/v4/middleware/error-handling.html),所以我经常使用它!
那么 Slim\Exception 需要 '$request' 作为参数。这就是我问题的重点...
====结论====
多亏了 Nima,这是一种不好的做法:/(参见下面的评论),所以算了吧!亲切的问候
php - Slim 4 - 注册和访问路由
我刚刚使用“composer create-project slim\slim-skeleton appdb”创建了 slim 4 项目。我有一个 routes.php 作为
和 index.php 作为
尝试以 127.0.0.1/appdb/public/hello/Peter 的身份访问 post 路由,出现错误
{“statusCode”:404,“错误”:{“类型”:“RESOURCE_NOT_FOUND”,“描述”:“未找到。” } }
我究竟做错了什么?提前致谢
php - slim/twig-view - TwigExtension 模板功能未确定且正常工作
我正在按照此处描述的步骤在 Slim https://github.com/slimphp/Twig-View/tree/3.1.0#usage中使用 twig-view但是当我尝试时屏幕上出现以下错误使用 TwigExtension 中使用的任何模板函数
Fatal error: Uncaught Twig\Error\SyntaxError: Unknown "url_for" function.
我已经$ composer require slim/twig-view:^3.0
成功运行了,我的 composer.json 文件是这样的
这是我的代码
如果我url_for
从树枝模板中删除 ,则页面在浏览器上加载正常。我试图在我的代码库和供应商文件夹中搜索 TwigExtension,但找不到任何类似的文件。我在这里做错了吗?
php - Slim 4 - 未捕获的类型错误:传递给 {closure}() 的参数 1 必须是 RouterCollectorProxy 的实例
我正在按照 slim 4 的指南创建路由组,但是当我尝试测试已部署的 heroku 应用程序时出现此错误:
我的代码有什么问题?也许我错过了什么?
php - 未捕获的错误:在 Slim-4 php 和 php-di 中调用未定义的方法 App\App::run()
在使用 Slim 和 PHP-DI 时,收到警告说
Uncaught Error: Call to undefined method App\App::run()
代码如下: