【问题标题】:Error Using Middleware in SLIM Framework在 SLIM 框架中使用中间件时出错
【发布时间】:2017-06-06 19:43:25
【问题描述】:

我已经在这几个小时了,似乎无法弄清楚为什么它不起作用。这是我第一次使用 SLIM,也是我第一次接触中间件。我正在尝试关注超薄网站上列出的tutorial,但无法开始工作。

我的引导代码:

<?php

  require '../vendor/autoload.php';

  $app = new Slim\Slim();


  $app->get('/test', function() {

    echo 'Hello, World'; 
 }); 

$mw = function ($request, $response, $next) {
    $response->getBody()->write('BEFORE');
    $response = $next($request, $response);
    $response->getBody()->write('AFTER');

    return $response;
};


$app->add($mw); 
$app->run(); 

当我在没有中间件的情况下只运行我的超薄 url 时,它运行良好。当我运行http://mysite/test 时,我得到Hello, World 作为输出。但是,当我添加苗条网站上列出的中间件代码时,我收到以下错误:

Catchable fatal error: Argument 1 passed to Slim\Slim::add() must be an instance of Slim\Middleware, instance of Closure given, called in /Applications/XAMPP/xamppfiles/htdocs/project/api/public/index.php on line 22 and defined in /Applications/XAMPP/xamppfiles/htdocs/academy/api/vendor/slim/slim/Slim/Slim.php on line 1267

我错过了什么吗?中间件是否需要其他设置?在这方面,苗条的文档并不是很有帮助。任何帮助表示赞赏。

【问题讨论】:

  • 去掉use ($app)还能用吗?
  • @BizzyBob 抱歉,打算删除它。那是我只是想去上班,但我最初是用use ($app) dong ti,但它仍然不起作用
  • 你可以试试这个 $container = $app->getContainer(); $container["mw"] = $mw; $app->add($mw);
  • @BilasSarker 我得到Call to undefined method Slim\Slim::getContainer() in /Applications/XAMPP/xamppfiles/htdocs/academy/api/public/index.php on line 21
  • 快速浏览一下链接中的教程,$app = new Slim\Slim(); 应该是 $app = new \Slim\App();,这可能是导致问题的原因吗?

标签: php rest slim middleware


【解决方案1】:

您似乎已经安装了 Slim 2。您还混合了 Slim 2 和 Slim 3 语法。要安装 Slim 3,请发出以下命令。

$ composer install slim/slim

然后使用如下代码:

<?php

require "vendor/autoload.php";

$app = new \Slim\App;

$mw = function ($request, $response, $next) {
    $response->getBody()->write("BEFORE");
    $response = $next($request, $response);
    $response->getBody()->write("AFTER");

    return $response;
};

$app->add($mw); 

$app->get("/test", function ($request, $response) {
    echo "Hello, World"; 
});

$app->run();

【讨论】:

  • 谢谢。我只是用你的瘦骨架来重新启动项目。欣赏它。
  • 在你的瘦骨架项目中,我如何向我的项目添加自定义中间件类?
  • 与 Slim 文档中提到的方法相同。在骨架中,我在文件中添加中间件:github.com/tuupola/slim-api-skeleton/blob/master/config/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 2017-02-28
  • 1970-01-01
  • 2015-02-14
  • 2013-06-27
  • 1970-01-01
相关资源
最近更新 更多