slim 相关问题

Slim for PHP是一个基于Sinatra的PHP 5 RESTful微框架。

Slim 框架给出了令人困惑的未捕获类型错误

我刚刚用我自己的设置安装了一个新的 slim viacomposer 副本。非常简单的index.php,里面只有很少的内容: 我刚刚使用我自己的设置通过 Composer 安装了 slim 的新副本。非常简单的index.php,里面很少: <?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Factory\AppFactory; require_once __DIR__ . '/../bootstrap.php'; // start the app $APP = AppFactory::create(); /** * Middleware to check validation before any routes */ $APP->add(function(Request $request, Response $response, callable $next){ $response = $next($request,$response); return $response; }); /** * Add routes */ $APP->get('/test',function(Request $request, Response $response, array $args){ return $response->getBody()->write('hello'); }); // run the app $APP->run(); Php 给出了一个非常奇怪的错误: **致命错误:未捕获类型错误:传递给 {closure}() 的参数 2 必须是 Psr\Http\Message\ResponseInterface 的实例, Slim\Routing\RouteRunner 给定,调用 /var/www/vendor/slim/slim/Slim/MiddlewareDispatcher.php 第 275 行 并在 /var/www/public/index.php:16 堆栈跟踪中定义:#0 /var/www/vendor/slim/slim/Slim/MiddlewareDispatcher.php(275): {闭包}(对象(Slim\Psr7\Request),对象(Slim\Routing\RouteRunner)) 1 /var/www/vendor/slim/slim/Slim/MiddlewareDispatcher.php(73): class@anonymous->handle(Object(Slim\Psr7\Request)) #2 /var/www/vendor/slim/slim/Slim/App.php(206): Slim\MiddlewareDispatcher->handle(对象(Slim\Psr7\Request)) #3 /var/www/vendor/slim/slim/Slim/App.php(190): Slim\App->handle(对象(Slim\Psr7\Request)) #4 /var/www/public/index.php(34): Slim\App->run() #5 {main} 抛出 /var/www/public/index.php 第 16 行** 我不明白为什么它说这里的基本中间件正在获取 Slim\Routing\RouteRunner 的实例,而我明确给出了 Psr\Http\Message\ResponseInterface 有什么想法吗? 编辑: 感谢delboy的回答,但是可以更具体一点吗? slim 文档显示如何使用它(http://www.slimframework.com/docs/v3/concepts/middleware.html): $app->add(function ($request, $response, $next) { $response->getBody()->write('BEFORE'); $response = $next($request, $response); $response->getBody()->write('AFTER'); return $response; }); 但这行不通!总是出现类型错误,那么他们的文档是否已过时?如果是这样,我如何在这里实现中间件? 他们给出的示例代码还会产生另一个奇怪的错误: Fatal error: Uncaught ArgumentCountError: Too few arguments to function {closure}(), 2 passed in /var/www/vendor/slim/slim/Slim/MiddlewareDispatcher.php on line 275 and exactly 3 expected in /var/www/public/index.php:26 Stack trace: #0 /var/www/vendor/slim/slim/Slim/MiddlewareDispatcher.php(275): {closure}(Object(Slim\Psr7\Request), Object(class@anonymous)) #1 /var/www/vendor/slim/slim/Slim/MiddlewareDispatcher.php(73): class@anonymous->handle(Object(Slim\Psr7\Request)) #2 /var/www/vendor/slim/slim/Slim/App.php(206): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request)) #3 /var/www/vendor/slim/slim/Slim/App.php(190): Slim\App->handle(Object(Slim\Psr7\Request)) #4 /var/www/public/index.php(38): Slim\App->run() #5 {main} thrown in /var/www/public/index.php on line 26 示例代码传递了 3 个参数,而不是 2 个! 编辑: 好吧,Slim 文档显然已经过时了,应该这样做: $app->add(function(ServerRequestInterface $request, RequestHandlerInterface $handler) { $response = new Response(); $response->getBody()->write('STUFF'); return $response; }); 您的中间件未实现 PSR-15。您不应该传递响应,而应该传递请求处理程序接口: namespace Psr\Http\Server; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; /** * Participant in processing a server request and response. * * An HTTP middleware component participates in processing an HTTP message: * by acting on the request, generating the response, or forwarding the * request to a subsequent middleware and possibly acting on its response. */ interface MiddlewareInterface { /** * Process an incoming server request. * * Processes an incoming server request in order to produce a response. * If unable to produce the response itself, it may delegate to the provided * request handler to do so. */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface; } https://www.php-fig.org/psr/psr-15/ 需要补充: 使用 Slim\Psr7\Response; 首先,您需要检查您正在使用哪个 slim 版本,当我开始学习时,我也遇到了这个错误/问题,但您想解决这个问题,您可以在代码中进行此编辑。 $APP = AppFactory::create(); $app->setBasePath("/myapp/public/index.php"); $APP->add(function(Request $request, Response $response, callable $next){ $response = $next($request,$response); return $response; }); 我在使用 Slim V4 时也遇到了 OP 的错误。根据此处的文档和包含的回复,我调整了以下内容: <?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Server\RequestHandlerInterface as RequestHandler; use Slim\Factory\AppFactory; require __DIR__ . '/../vendor/autoload.php'; $app = AppFactory::create(); $app->add(function (Request $request, RequestHandler $handler) { $response = $handler->handle($request); $response->getBody()->write('ADD AUTH'); return $response; }); /** * Add routes */ $app->get('/test', function(Request $request, Response $response, array $args) { return $response->getBody()->write('hello'); }); /** * Add Error Middleware * Note: This middleware should be added last. * It will not handle any exceptions/errors * for middleware added after it. */ $errorMiddleware = $app->addErrorMiddleware(true, true, true); // Run the app $app->run(); 但请注意,不需要 new Response(); 的实例化;事实上,它给我带来了一个错误,因为它需要通过 RequestHandler 来解决。 我还删除了错误中间件,因为在 Slim 文档中还有另一个潜在的问题,您可能会错过。 希望这可以避免其他人因我而头痛。

回答 4 投票 0

Slim框架mvc设计

我用slim框架创建了一个名为chat-app的小项目,但是MVC架构应该如何? 项目/ │ ├─ 应用程序/ │ ├─ 控制器/ │ │ ├─ GroupController.php │ │ ├─ MessageController.ph...

回答 0 投票 0

路由不适用于 Slim 框架

正在学习slim框架。我有一点必须设置我的网络服务器,以便我可以看到类似 http://slimapp 而不是 http://localhost/slimapp/public/index.php 的内容。 我有

回答 2 投票 0

通过 Respect/validation 验证请求数据

我正在使用 Slim PHP Framework,我需要验证 POST 请求有效负载,我正在使用这个 PHP 包 Respect-Validation。 我有数组 ob 对象的想法,我需要验证数据插入...

回答 0 投票 0

Error trying to connect database Slim Message: Class "App\Models\Database" not found

我无法使用 slim 版本 4 连接数据库 这是我在公共文件夹中的 index.php 当我在新数据库中单击(CTRL+左键单击)或使用 App\Models\Database 时;它在我的课堂上是正确的

回答 0 投票 0

stripe php 示例返回 TypeError: Argument 1 passed to Dotenv\Dotenv::create() must be an instance of Dotenv\Repository\RepositoryInterface

当我尝试使用此处的示例时 https://github.com/stripe-samples/subscription-use-cases 我收到错误: PHP 致命错误:未捕获类型错误:参数 1 传递给 Dotenv\Dotenv::create() m...

回答 1 投票 0

PHP:访问 Slim $response 对象

我正在尝试在 PHP API 中设置 $response 主体,如下所示: $content = $this->getPDFService()->createPDF(); $response = $this->app->response->header( '内容-...

回答 1 投票 0

tensorflow SLIM项目死了吗?

在 TensorFlow-2 中使用 SLIM 训练图像分类模型不起作用。该错误取决于安装的 TensorFlow 版本。使用 TF 2.10,训练过程在保存非常

回答 0 投票 0

致命错误:未捕获的类型错误:传递给 Blog\Database::__construct() 的参数 1 必须是字符串类型,给定的布尔值,调用了

致命错误:未捕获的类型错误:传递给 Blog\Database::__construct() 的参数 1 必须是字符串类型,给定的布尔值,在 C:\OSPanel\domains\Php-blog-project endor\php-di 中调用\php-di\src\

回答 0 投票 0

FrontAccounting API 模块重定向到登录

请协助: 我目前正在使用 FrontAccounting, 在我的本地环境中工作正常,没有问题, 已经上传到 ubuntu-server 并且一切正常(从浏览器),唯一的问题......

回答 0 投票 0

如何在 PHP 中使用键和值从 2 个数组中识别将要停留的路线?

我在使用 PHP 中的 2 个数组时遇到了很多问题。 问题:我需要从“main_routes”和“destination”数组中确定哪些路线将有中途停留或没有。

回答 0 投票 0

如何使用 jQuery 向上/向下移动多个选择选项

我正在构建一个自定义下拉字段编辑器,并希望添加将所选选项向上或向下移动以及删除它们的功能。我主要实现了这个,但出于某种原因它

回答 0 投票 0

Plim。将 slim 源代码直接(在内存中)编译为 html

我需要在 python 中将小块的苗条代码编译为 html。 我用代码解决了这个问题(只是例子) 导入 plim str = 'div#sum.sum' plim.compile_plim_source(str, plim.syntax.BaseSyntax()) # ...

回答 0 投票 0

PHP Slim与Firebase JWT

我正在尝试将Firebase Auth与PHP Slim (JWT)集成,但没有任何进展。我使用我的Firebase用户登录,并正确保存我的token,然后我设置我的midleware.JwtAuthentication。然后我设置我的midleware.php如下: $app->add(new ...)

回答 1 投票 0

在Slim中间件中替换请求对象的内容

我正在对请求对象的头值和参数进行加密。在中间件中... 我解密的值,我想替换的值。尝试了下面的。似乎没有工作。 new \Slim\...

回答 1 投票 0

在使用slim框架时,PHP代码无法执行(已注释)。

我正在使用slim框架(路由等)和illuminate数据库来输出我的网页上的数据,但它似乎没有工作,因为当我加载网页时,php代码一直被注释掉......

回答 1 投票 0

Slim框架:无法使用JWT标记。

我正在做一个纤细的REST API,我想用JWT Token来保护它。我尝试了很多教程,我可以使事情工作。我使用:slim 4.* slimpsr7 0.6.0 tuupolaslim-jwt-auth ^3.4 ....

回答 1 投票 0

如何使用使用中间件的Slim Framework添加功能以在所有页面上呈现

我目前正在学习Slim Framework v4,以创建一个基于mysql的配置文件网站。我有一个导航栏,其中使用了树枝系统来检查用户是否已登录以显示帐户...

回答 1 投票 0

将Jenssegers MongoDB与Slim和Capsule一起使用

我正在使用Slim 4框架以及Jenssegers MongoDB库和Capsule(来自Laravel的Illuminate \ Database)。我已经在我的Linux服务器上安装了MongoDB扩展,并且所有内容都...

回答 1 投票 0

将PHP异常和错误记录到数据库表PHP Slim 3中

因此,我试图找到使PHP SLIM 3将PHP异常和错误记录到数据库表而不是日志中的最佳方法。什么是实现这一目标的最佳方法?到目前为止,在文档中...

回答 1 投票 1

© www.soinside.com 2019 - 2024. All rights reserved.