在SLIM框架中使用中间件时出错

时间:2017-01-22 03:28:17

标签: php rest slim middleware

我已经在这几个小时了,似乎无法弄清楚它为什么不起作用。这是我第一次使用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(); 

当我在没有中间件的情况下运行我的超薄网址时,它运行良好。当我勉强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

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

1 个答案:

答案 0 :(得分:4)

您似乎已经安装了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();