Проблема в порядке, файлы загружаются.
Я обнаружил проблему, бит я еще не исправил ее.
Проблема в том, что автозагрузчик включает файлы в алфавитный порядок, но не в порядке, файлы должны быть включены.
Мои настоящие имена классов:
AbstractEntity
EntityInterface
Ticket
Реализация:
interface EntityInterface {}
abstract class AbstractEntity implements EntityInterface {}
class Ticket extends AbstractEntity {}
Файлы включены в следующем порядке ( в алфавитном порядке ):
AbstractEntity.php
EntityInterface.php
Ticket.php
AbstractEntity.php
- этот файл объявляет класс AbstractEntity
.
Этот класс реализует интерфейс EntityInterface
, поэтому файл EntityInterface.php
должен быть уже включен до AbstractEntity.php
.
правильный порядок должен быть:
EntityInterface.php
AbstractEntity.php
Ticket.php
Это легко проверить, просто переименовав от AbstractEntity
до ObstractEntity
, тогда алфавитный порядок будет:
EntityInterface.php
ObstractEntity.php
Ticket.php
Пока осталось только исправить порядок автозагрузки. Но ... Как это исправить быстро? Любые идеи? Это проблема с автозагрузкой поставщика или Symfony?
AFAIK В composer.json
есть какая-то опция, которая гласит:
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},
ОБНОВЛЕНИЕ : Хорошо, Я создал новый проект - и все работает хорошо. Работает как для каталога Entity
, так и для Entities
. Версии все одинаковые.
Но как только я переименовал Entites
в Entity
в моем исходном проекте - все начало работать без ошибок.
Так что это что-то странное.
Я могу только думать, что Symfony не настолько гибок, и классы должны храниться в каталоге Entity
, тогда автозапуск работает хорошо.
На данный момент это
Ticket.php
AbstractEntity.php
EntityInterface.php
В том смысле, в каком они требуют друг друга.