Amazon EB在自动加载我的PSR-4命名空间类时遇到问题

问题描述 投票:0回答:1

我想为我的课程添加PSR-4 namespacing

- app
-- autoloader.php
-- bootstrap.php -> `include 'autoloader.php'`
- public
-- index.php -> `include './../app/bootstrap.php'`
- controllers
-- Test.php

controllers / Test.php:

<?php

namespace Controllers;

class Test{}

app / autoloader.php(简体):

<?php
spl_autoload_register('myAutoloader');

function myAutoloader($className) {
    include "./../$classname.php"
}

然后在某个时候我叫Controllers\Test::someMethod()

Locally,可以正常加载。但是,当我将其部署到AWS EB实例时,它将失败。因此,我进行了测试以将其范围缩小到:

var_dump(file_exists('./../controllers/Test.php')); // local: bool(true), AWS: bool(true)
var_dump(file_exists('./../Controllers/Test.php')); // local: bool(true), AWS: bool(false)***

在AWS EB实例上,找不到大写的Controllers的文件名,但可以找到小写的controllers

如何配置我的EB实例以允许混合大小写?

php amazon-web-services amazon-elastic-beanstalk psr-4 spl-autoload-register
1个回答
0
投票

进行了进一步的挖掘,发现问题是Elastic Beanstalk实例正在Linux上运行。我的本地环境是Mac。

在Mac和Windows上,

file_exists()include|require()不区分大小写,但是在Linux上是不区分大小写

因此,为了在不借助库或框架抽象的情况下自动加载类,我需要将目录大写。不幸的是,我无法执行任何更高级的PSR-4标准:

\Acme\Log\Writer\File_Writer => ./acme-log-writer/lib/File_Writer.php

...但是我确定那里有可以将$className转换为PSR4文件路径的库。同时,我将坚持使用大写的命名空间目录。

© www.soinside.com 2019 - 2024. All rights reserved.