简体   繁体   English

超薄加载问题 class

[英]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:项目结构:

[ [ ] ]

  1. composer.json作曲家.json
    {
        "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/"
            }
        }
    }
  1. index.php index.php
    <?php
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

    require __DIR__ . '/../src/App/App.php';
  1. App.php App.php
    <?php
    use Slim\Factory\AppFactory;
    require __DIR__ . '/../../vendor/autoload.php';
    $app = AppFactory::create();
    require __DIR__ . "/Routes.php";
    $app->run();
  1. Routes.php Routes.php
    <?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;
    });
  1. CitasController.php CitasController.php
    <?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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM