php Slim4控制器已在本地主机中正确自动加载,但未在远程服务器上正确加载(“可调用的控制器不存在”)

9rygscc1  于 2022-12-02  发布在  PHP
关注(0)|答案(1)|浏览(66)

我正在开发一个应用程序与Slim 4 PHP框架的第一次,它在localhost工作得很好,但我有一个问题与运行它在远程服务器.我得到以下错误时,运行所有路由,例如example.com/myapp/app.php/program
Uncaught RuntimeException: Callable \App\Controller\ProgramController::list() does not exist in /.../vendor/slim/slim/Slim/CallableResolver.php
下面是两个环境和主php文件的基本配置:

  • Windows 10操作系统,Apache 2.4.53,PHP 8.1.12(xampp)
  • 远程服务器:Debian软件开发工具,Apache 2.4.54,PHP 8.1.12
    编写器.json
{
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}

应用程序.php

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;

require __DIR__ . '/vendor/autoload.php';
require_once './app/config-dev.php'; // contains all CONFIG_ vars

$app = AppFactory::create();
# set app's base path from config
$app->setBasePath(CONFIG_BASE_PATH);

$twig = Twig::create(CONFIG_TWIG_DIR, ['cache' => CONFIG_TWIG_CACHE]);
$app->add(TwigMiddleware::create($app, $twig));

if (CONFIG_DEBUG) {
    $app->addRoutingMiddleware();
    $app->addErrorMiddleware(true, true, true);
}

# routing
require_once './app/routing.php';

$app->run();

应用程序/路由.php

use App\Controller\ProgramController;

$app->get('/program', [ProgramController::class, 'list'])
    ->setName('program');
// ...

应用程序/控制器/程序控制器.php

namespace App\Controller;

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

class ProgramController
{
    public function __construct()
    {
        // ...
    }
    
    public function list(Request $request, Response $response, array $args): Response
    {
        // ...
    }
}

我已经尝试了不同形式的名称空间和不同的注册控制器的策略,例如:$app->get('/program', '\App\Controller\ProgramController:list')->setName('program');
我也试过运行composer dump-autoload,但没有任何效果。

aurhwmvo

aurhwmvo1#

这是一个愚蠢的问题。控制器所在的文件夹名为“controller”,用小写字母,但命名空间是\App\Controller,因此找不到它。这在区分大小写的UNIX系统上很重要,但在文件路径不区分大小写的Windows上运行良好。将文件夹名更改为“Controller”后运行良好。

相关问题