繁体   English   中英

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

[英]Amazon EB Having Issues Autoloading My PSR-4 Namespaced Classes

我想为我的类添加PSR-4 命名空间

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

控制器/Test.php:

<?php

namespace Controllers;

class Test{}

app/autoloader.php(简化版):

<?php
spl_autoload_register('myAutoloader');

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

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

在本地,这很好加载。 但是当我将它部署到我的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 实例以允许混合大小写?

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

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

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

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

...但我确信有一些库可以将$className转换为 PSR4 文件路径。 与此同时,我将坚持将我的命名空间目录大写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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