簡體   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