gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:29:58 24 4
gpt4 key购买 nike

我正在尝试改进我的文件结构,如我的 validators文件夹很快就填满了。为了改善这一点,我想在此文件夹中添加新的子文件夹,以使所有内容都井井有条且易于管理。然而,这样做,我的应用程序不再正确自动加载所有必需的文件。具体来说,它会遗漏 /validators 子文件夹中的所有文件。 (见下面的结构)

v1
|-- validators
|-- sessionValidators

我的 composer.json 的自动加载部分文件如下所示:
"autoload": {
"classmap": [
"./",
"v1",
...
"v1/validators",
"v1/validators/sessionValidators"
]
}

我不确定是否有 v1/validatorsv1/validators/sessionValidators可能是问题所在。

我试过删除 v1/validators/sessionValidators来自 composer.json ,但这当然行不通。

需要明确的是,在我尝试将东西移到新的 sessionValidators 之前,一切都被加载得很好。文件夹。

Slim 代码无法找到 SessionValidator类看起来像这样:
$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' is neither a callable nor a valid container entry #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

文件
# 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

最佳答案

顺便说一下,这样做的原因是我没有使用 namespaces正确和一致。

关于php - Composer 自动加载某些子文件夹中缺少的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56460927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com