代码之家  ›  专栏  ›  技术社区  ›  bos570

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

  •  0
  • bos570  · 技术社区  · 8 年前

    我已经做了好几个小时了,似乎不知道为什么它不起作用。这是我第一次使用SLIM,也是我第一次接触中间件。我试着跟着 tutorial 在slim网站上列出,但无法工作。

    我的引导代码:

    <?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(); 
    

    当我只运行我的slim url而不使用中间件时,它运行得很好。我明白了 Hello, World 作为我运行时的输出 http://mysite/test 但是当我添加slim站点上列出的中间件代码时,我得到了以下错误:

    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
    

    我错过什么了吗?中间件是否需要其他设置?在这方面,slim文档并不是很有帮助。感谢任何帮助。

    1 回复  |  直到 8 年前
        1
  •  4
  •   Mika Tuupola    8 年前

    您似乎已经安装了Slim 2。您还混合了Slim2和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();