Slim3使用参考错误

时间:2019-06-12 15:50:09

标签: php dependencies composer-php classloader slim-3

我正准备使用Slim3和作曲器准备一个简单的空应用程序。

这是我的前端控制器:

<?php

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


    $config=[];
    $config['displayErrorDetails'] = true;
    $config['addContentLengthHeader'] = false;
    $app = new \Slim\App(['settings' => $config]);

    foreach(glob("../app/dependencies/*.php") as $dependency){
        $dependency=include $dependency;
        $dependency($app);
    }
    foreach(glob("../app/middleware/*.php") as $middleware){
        $middleware=include $middleware;
        $middleware($app);
    }
    foreach(glob("../app/routes/*.php") as $route){
        $route=include $route;
        $route($app);
    }

    $app->run();

这是我拥有的唯一路由文件:

<?php 

return function (\Slim\App $app){
    $app->get('/', function (Request $request, Response $response) {
        $response->getBody()->write("Hello");
        return $response;
    });
};

运行应用程序时出现错误:

  

传递给Closure :: {closure}()的参数1必须是的实例   请求,给定的Slim \ Http \ Request实例

我必须将此“用途”添加到我的路由文件中:

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

为什么php对请求和响应使用错误的(Slim)类? 真的我必须为每个控制器文件加上前缀吗?

1 个答案:

答案 0 :(得分:0)

  

真的必须为每个控制器文件添加前缀吗?

是的。每个文件的use声明都是documented in the PHP manual

  

导入规则是基于文件的,这意味着包含的文件将继承父文件的导入规则。


您可能会或可能不会在参数前面忽略类型。是否可以这样做取决于Slim是否使用Reflection来确定是否放置$request$response对象。根据您收到的错误消息,我想您只需删除类型即可。