问题标签 [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.

0 投票
3 回答
4081 浏览

php - 如何从 Slim 4 中间件进行重定向?

我一直在测试新的 Slim 4 框架,并且重定向在普通类中对我来说工作正常,但我似乎无法让它们在中间件中工作,其中响应是由请求处理程序动态生成的(显然?)。当我尝试使用 Location 标头重定向时,它根本无法重定向,并且我的路线继续到原始位置。

这是我用于测试的身份验证中间件的基本版本:

有没有人让这个工作?如果是这样,你是如何做到的?提前致谢。

0 投票
1 回答
740 浏览

pdo - 如何在 slim 4 中设置多个 PDO 数据库连接并在存储库中访问它们?

我尝试使用 2 个 PDO 数据库连接设置 SLIM 4。
我无法从存储库访问 db 或 db2。
我想我做错了什么

我跟着苗条的4骨架。
我在应用程序中创建了一个 db.php 文件,用于在容器中添加 db 的定义
我在 index.php 中包含 db.php 我试图从存储库访问 db 或 db2,但它不起作用

这是我的文件:

应用程序/db.php

公共/index.php

src/域/ObContact/ObContactRepository.php

0 投票
2 回答
657 浏览

php - 带有授权标头的 GET 请求之前的 OPTIONS 请求在苗条框架 4 中不起作用

我已经克隆了已经实现了 CORS的超薄骨架( https://github.com/slimphp/Slim-Skeleton )。但是仍然当 API 在 GET 之前调用 OPTIONS 时,它会发送 405 错误“不允许的方法。必须是以下之一:GET”

这是我遇到此错误的路线。$group->get('/users', ListUsersAction::class);

邮递员也有同样的路线。如果我从标头中删除授权令牌,则相同的路线正在工作。

执行甚至没有到达“AuthenticationMiddleware”的第一行。

但是我通过添加没有“AuthenticationMiddleware”的相同选项路由来测试它。

像这样:

这是有效的。所以我想我忘了添加一些代码,或者我做了任何导致错误的错误,或者骨架有错误。

有人可以帮忙吗?提前致谢。

0 投票
1 回答
579 浏览

php - 如何从苗条的中间件中获取属性

当我尝试在 Slim 4 的先前中间件中设置属性时遇到问题。

我在 app/middleware.php 中使用中间件
我使用 JwtAuthentication 中间件来检查令牌,我想将解码的令牌传递给下一个中间件:CheckTokenInDatabaseMiddleware。

我返回了带有解码令牌的 $request :return $response->withAttribute("decoded", $arguments['decoded']);

在 CheckTokenInDatabaseMiddleware 中 $request->getAttribute('decoded') 返回 NULL

我有一个纤细的骨架并使用它:

应用程序/中间件.php

应用程序/应用程序/中间件/CheckTokenInDatabaseMiddleware.php

0 投票
1 回答
224 浏览

bdd - 如何在 Slim 4 框架中将服务注入 Behat 特征上下文

当我搜索服务注入功能上下文时,我总是会找到 symfony 的扩展。但我需要扩展或其他东西才能在 Slim 4 框架中执行此操作。

谢谢你。

0 投票
1 回答
372 浏览

php - Slim 4 错误处理未捕获基本异常

出于某种原因,我的 Slim 4 应用程序错误处理程序没有捕获可以被捕获的错误,\Exception并且我在浏览器中看到502 bad gateway错误,这是我的ErrorMiddleware配置(我正在使用 PHP-DI 来配置它):

我试图添加处理程序来处理这样的 500 错误$middleware->setErrorHandler(HttpInternalServerErrorException::class, $container->get(NotFoundHandler::class) );

但它不起作用,502 bad gateway直到我将所有控制器操作都用try/catch(\Exception $e).

我需要添加一些其他错误处理程序吗?我不清楚如何在 slim 4 应用程序中正确设置处理。

更新: 我发现ErrorMiddleware默认情况下 slim 会捕获HttpException正在扩展的 slim Exception,但为什么不直接Exception甚至Throwable优雅地退出带有漂亮错误页面的应用程序

0 投票
1 回答
882 浏览

monolog - Slim 4 独白不写日志

monolog在我的 slim 4 应用程序中进行了配置,并将 and 设置logErrorslogErrorDetailstrue,ErrorMIddleware但是当我遇到错误时,它不会写入日志。为了模拟错误,我打开了我的应用程序上的缓存,我得到了一个像这样的错误,默认情况下使用Call to undefined function apcu_fetch()apcudoctrine缓存所有元数据,并且我的开发环境中没有安装 apcu。

这是PHP-DI记录器的配置:

这是ErrorMiddleware配置:

是的,我正在将中间件添加到App这样的$app->add($container->get(ErrorMiddleware::class));

我检查了不同的 slim 4 骨架 Github 存储库,但没有找到任何额外的配置,所以我不知道为什么它没有将日志写入文件。也许我需要设置一个自定义的默认错误处理程序?作为 slim 4 默认的一个使用 phperror_log函数来写日志?

0 投票
1 回答
270 浏览

php - 使用 Varnish 时修改路由和 url

我有一个项目,在 Slim 4 项目之前使用了 Varnish。由于某些项目的特殊性,应隐藏原始 url,并将传入请求重写为其他一些标头。

例子

  • 对 demo.xyz 的原始调用即将来到 Varnish
  • Varnish 将请求转换为http://slimapp.dev/url/demo.xyz
  • 原始主机保存在标头中X-Orig-Host: demo.xyz

Slim App 需要检测它是否是 Varnish 请求(我已经知道了)并且需要转换路由。

路线

没有清漆:

使用清漆:

url_for因此,当使用(Twig-View 包)创建路由时,应该像这样生成 url:

  • 不含清漆的路线:http://slimapp.dev/url/demo.xyz/article/123
  • 带清漆的路线:http://demo.xyz/article/123

想法:

  1. 修改原始的 UriInterface 对象,但我不知道如何。
  2. 为 Twig-View 写一个 TwigExtension 来修改方法url_for等等。

第一个想法感觉更可靠,也是正确的地方。另一个意味着我需要覆盖辅助方法来构建基于X-Orig-Host.

知道如何修改 Uri / 可能覆盖该create方法吗?

提前致谢!

PS:我在Slim Discourse中提出的问题相同。

更新 1

路由.php

中间件.php

错误信息

0 投票
1 回答
1215 浏览

twig - 致命错误:未捕获的 TypeError:参数 1 传递给 Slim\Views\Twig

我不断收到致命错误:未捕获的类型错误:传递给 Slim\Views\Twig::__construct() 的参数 1 必须是 Twig\Loader\LoaderInterface 的实例,给定字符串...

代码是:

我在用着

我尝试了不同的选项(评论)。有谁能够帮我?我想不出来谢谢

0 投票
1 回答
189 浏览

php - Slim 4 - 基本路径作为查询参数

我有一个 Slim 4 应用程序正在运行,并将一些重复的 url 参数设置为基本路径,以便在 url 生成中不显示它。

请求流:

  1. 调用--->通过 Varnish 代理http:demo.xyz?p1=a重写http://slim.app/url/demo.xyz?p1=a
  2. http://slim.app/url/demo.xyz?p1=a直接拨打

两个电话都需要工作。

在中间件中,我设置/url/demo.xyz为基本路径,因此生成的 URL 是http://demo.xyz?p1=a.

这样做的问题是:

  • 基本路径不被识别routes.php为传递参数的东西,因此url/abc不匹配。
  • 我仍然需要url参数的值才能在 Slim 应用程序中获取一些东西。
  • 我的路由需要匹配此结构才能与两个请求流一起使用。

有什么想法可以让它发挥作用吗?

这与放置在这里的问题有关。