【问题标题】:Slim3 use reference is wrongSlim3 使用参考是错误的
【发布时间】:2019-10-27 04:44:42
【问题描述】:

我正在尝试用 Slim3 和 composer 准备一个简单的空应用程序。

这是我的前端控制器:

<?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) 类进行请求和响应? 我真的必须为每个控制器文件添加前缀吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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


    您可能会也可能不会忽略参数前面的类型。能不能这样做,就看Slim是否使用Reflection来决定是否放$request$response对象。根据您收到的错误消息,我想您可以简单地删除该类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2013-02-11
      • 2015-07-30
      • 2018-03-12
      • 2012-12-27
      相关资源
      最近更新 更多