У Amazon EB возникли проблемы с автозагрузкой моих классов пространств имен PSR-4 - PullRequest
0 голосов
/ 11 февраля 2020

Я хотел бы добавить PSR-4 namespace для моих классов:

- 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 для учета смешанной капитализации?

1 Ответ

0 голосов
/ 11 февраля 2020

Проделал дальнейшую копку и обнаружил, что проблема в том, что экземпляр Elasti c Beanstalk работает на Linux. Моя локальная среда - Ma c.

file_exists() и include|require() без учета регистра на Ma c и Windows, но это case -чувствительный к Linux.

Итак, чтобы автозагрузить классы без помощи абстракции библиотеки или фреймворка, мне нужно было использовать заглавные буквы в своих каталогах. К сожалению, я не смог бы выполнить какой-либо из более классных стандартов PSR-4:

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

... но я уверен, что есть библиотеки, которые могут преобразовать $className в PSR4 filepath. А пока я буду использовать заглавные буквы в своих каталогах пространства имен.

...