[英]problems with slim loading class
I am doing my first project using SLIM in PHP.我正在 PHP 中使用 SLIM 做我的第一个项目。 When calling a class I have the following error message:调用 class 时,我收到以下错误消息:
Error Message:错误信息:
Fatal error: Uncaught RuntimeException: App\Controllers\CitasController:getAll is not resolvable in /var/www/html/slim/vendor/slim/slim/Slim/CallableResolver.php:170
Stack trace: #0 /var/www/html/slim/vendor/slim/slim/Slim/CallableResolver.php(109): Slim\CallableResolver->assertCallable()
#1 /var/www/html/slim/vendor/slim/slim/Slim/CallableResolver.php(72): Slim\CallableResolver->resolveByPredicate()
#2 /var/www/html/slim/vendor/slim/slim/Slim/Routing/Route.php(366): Slim\CallableResolver->resolveRoute()
#3 /var/www/html/slim/vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\Routing\Route->handle()
#4 /var/www/html/slim/vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\MiddlewareDispatcher->handle()
#5 /var/www/html/slim/vendor/slim/slim/Slim/Routing/Route.php(341): Slim\MiddlewareDispatcher->handle()
#6 /var/www/html/slim/vendor/slim/slim/Slim/Routing/RouteRunner.php(84): Slim\Routing\Route->run()
#7 /var/www/html/slim/vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\Routing\RouteRunner->handle()
#8 in /var/www/html/slim/vendor/slim/slim/Slim/CallableResolver.php on line 170
Project Structure:项目结构:
[ [ ] ]
{
"require": {
"slim/slim": "^4.9",
"slim/psr7": "^1.5",
"slim/php-view": "^3.1",
"respect/validation": "^1.1",
"php-di/php-di": "^6.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require __DIR__ . '/../src/App/App.php';
<?php
use Slim\Factory\AppFactory;
require __DIR__ . '/../../vendor/autoload.php';
$app = AppFactory::create();
require __DIR__ . "/Routes.php";
$app->run();
<?php
use Slim\Routing\RouteCollectorProxy;
$app->group('/api',function(RouteCollectorProxy $group){
$group->get('/citas','App\Controllers\CitasController:getAll');
});
$app->get('/', function (Request $request, Response $response, $args) {
$response->getBody()->write("Hello world!");
return $response;
});
<?php
namespace App\Controllers;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class CitasController{
public function getAall($request, $response, $arg){
$response->getBody()->write("Hollaaa");
return $response;
}
}
There's no error here about class loading issues.这里没有关于 class 加载问题的错误。 You've defined a route with a callable that isn't valid:您已经定义了一个带有无效可调用对象的路由:
/**
* @param mixed $resolved
* @param mixed $toResolve
*
* @throws RuntimeException
*
* @return callable
*/
private function assertCallable($resolved, $toResolve): callable
{
if (!is_callable($resolved)) {
throw new RuntimeException(sprintf(
'%s is not resolvable',
is_callable($toResolve) || is_object($toResolve) || is_array($toResolve) ?
json_encode($toResolve) : $toResolve
));
}
return $resolved;
}
The error complaints about CitasController:getAll()
but you have public function getAall($request, $response, $arg)
.关于CitasController:getAll()
的错误投诉,但您有public function getAall($request, $response, $arg)
。 Typo aside, the syntax is also not quite right.除了错字,语法也不太正确。
Some examples:一些例子:
class Foo
{
public static function test1()
{
}
public function test2()
{
}
}
var_dump(is_callable('Foo::test1'));
var_dump(is_callable('Foo::test2'));
var_dump(is_callable('Foo::typo'));
bool(true)
bool(false)
bool(false)
In particular, you cannot invoke a non-static method unless you have an object instance.特别是,除非您有 object 实例,否则您不能调用非静态方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.