如何解决Slim 4-Uncaught TypeError:传递给{closure}的参数1必须是RouterCollectorProxy的实例
我遵循苗条4的指南来创建路由组,但是在尝试测试已部署的heroku应用程序时出现此错误:
PHP Fatal error: Uncaught TypeError: Argument 1 passed to {closure}() must be an instance of RouterCollectorProxy,instance of Slim\Routing\RouteCollectorProxy given,called in /app/vendor/slim/slim/Slim/Routing/RouteGroup.php on line 75 and defined in /app/index.php:17
我的代码有什么问题?也许我错过了什么?
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use Updater\DefinitionUpdater;
require __DIR__.'/vendor/autoload.php';
$app = AppFactory::create();
$app->get('/',function(Request $request,Response $response,$args){
$response->getBody()->write('Hello world!');
return $response;
});
$app->group('/api/v1',function(RouteCollectorProxy $group){
/**/
$app->get('/list',$args){
$list = DefinitionUpdater::updateList();
$response->getBody()->write( json_encode($list,JSON_UNESCAPED_SLASHES) );
return $response->withHeader( 'Content-Type','application/json' );
})->setName('privacy');
/**/
$app->get('/privacy',$args){
$privacy = DefinitionUpdater::updatePrivacy();
$response->getBody()->write( json_encode($privacy,'application/json' );
})->setName('privacy');
/**/
$app->get('/cookie',$args){
$cookie = DefinitionUpdater::updateCookie();
$response->getBody()->write( json_encode($cookie,'application/json' );
})->setName('cookie');
});
$app->run();
$app->addErrorMiddleware(true,true,true);
?>
解决方法
您将提示$group
输入为RouteCollectorProxy
。编译器需要知道类的完全限定名称,因此有两个选项:
-
在类型提示时使用类的完全限定名称(不推荐):
$app->group('/api/v1',function( Slim\Routing\RouteCollectorProxy $group){});
-
添加另一个use语句:
use Slim\Routing\RouteCollectorProxy;
您的代码还有另一个问题。在路由组回调中,您应使用$group
添加实际路由:
use Slim\Routing\RouteCollectorProxy;
$app->group('/api/v1',function(RouteCollectorProxy $group){
$group->get('/list',function(Request $request,Response $response,$args){
//
});
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。