Php Composer自动加载某些子文件夹中缺少的类

Php Composer自动加载某些子文件夹中缺少的类,php,docker-compose,composer-php,slim,autoload,Php,Docker Compose,Composer Php,Slim,Autoload,我正在努力改进我的文件结构,因为我的validators文件夹很快就满了。为了改善这一点,我想在这个文件夹中添加新的子文件夹,以使一切都井然有序,易于管理。但是,在这样做时,我的应用程序不再正确自动加载所有必需的文件。具体来说,它会漏掉/validators子文件夹中的所有文件(请参见下面的结构) 我的composer.json文件的自动加载部分如下所示: "autoload": { "classmap": [ "./", "v1", ..

我正在努力改进我的文件结构,因为我的
validators
文件夹很快就满了。为了改善这一点,我想在这个文件夹中添加新的子文件夹,以使一切都井然有序,易于管理。但是,在这样做时,我的应用程序不再正确自动加载所有必需的文件。具体来说,它会漏掉
/validators
子文件夹中的所有文件(请参见下面的结构)

我的
composer.json
文件的自动加载部分如下所示:

"autoload": {
    "classmap": [
        "./",
        "v1",
        ...
        "v1/validators",
        "v1/validators/sessionValidators"
    ]
}
$app->put('/session', 'SessionResource::updateSession')->add('SessionValidator');
我不确定是否有
v1/验证器
v1/验证器/会话验证器
可能是问题所在

我曾尝试从
composer.json
中删除
v1/validators/sessionValidators
,但当然没有成功

说清楚,在我尝试将内容移动到新的
sessionValidators
文件夹之前,所有内容都加载得很好。


具有的Slim代码找不到
SessionValidator
类,如下所示:

"autoload": {
    "classmap": [
        "./",
        "v1",
        ...
        "v1/validators",
        "v1/validators/sessionValidators"
    ]
}
$app->put('/session', 'SessionResource::updateSession')->add('SessionValidator');
我尝试将其更改为此,但没有任何效果:

$app->put('/session', 'SessionResource::updateSession')->add('sessionValidators/SessionValidator');
我可以通过将此添加到Slim路由文件的顶部来获取要执行的代码:

require_once 'validators/sessionValidators/SessionValidator.php';
然而,这并不是一个优雅的解决方案,因为我必须对
/validators
中文件夹中的每个文件都这样做,而且有很多这样的解决方案

我反复看到,重新生成自动加载文件应该可以解决这个问题,但是我认为这里不是这样。当我重新运行docker compose时,应自动重新生成自动加载文件;请参阅本文末尾的Docker文件


除了
v1/validators/sessionValidators
之外的所有内容似乎都已正确加载。当我尝试发出请求或运行需要在
sessionValidators
文件夹中的类的测试时,我得到以下错误:

/var/www/html/vendor/php di/invoker/src/Exception/NotCallableException.php(33)'SessionValidator'既不是可调用的,也不是有效的容器条目35; 0/var/www/html/vendor/php di/invoker/src/CallableResolver.php(80)

如果它碰巧是相关的,我在Docker容器中运行所有这些,尽管我不认为这会是问题所在


docker-compose.yml

version: '3.3'

services:
  salus-db:
    image: postgres:11.2
    volumes:
      - ./tests:/docker-entrypoint-initdb.d/
    ports:
      - 7000:5432

  salus-api:
    build: .
    volumes:
      - .:/var/www/html
      - ${CONFIG_PATH}:/var/www/html/conf
      - ${HOST_LOG_PATH}:/var/www/html/salus_api_log
    env_file:
      - api.env
    ports:
      - 9191:80
    depends_on:
      - salus-db
    links:
      - salus-db:salus-db
Dockerfile

# Build Dockerfile from official PHP 7.3 image
FROM php:7.3-apache

# Create new user 'deploy'
RUN useradd -ms /bin/bash deploy

# Copy contents of current directory into /var/www/html/ inside the container
COPY . /var/www/html/

# Install Composer
RUN curl -sS https://getcomposer.org/installer | \
            php -- --install-dir=/usr/bin/ --filename=composer

USER deploy

# Install Composer dependencies without autoloader
RUN composer install --no-autoloader

# Copy new contents
COPY . ./

# Generate autoload.php
RUN composer dump-autoload

USER root

ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf

# Expose port 80 inside the container
EXPOSE 80

顺便说一下,原因是我没有正确且一致地使用。

在将类文件移动到其他目录后是否运行了
composer dump autoload
?我重新运行了docker compose,其中包括以下命令
运行composer dump autoload
。我将把我的Docker文件添加到问题中。@rob006我已经添加了这些文件:)