2016-01-09 8 views
2

Некоторое время назад я создал расширение ветки. Недавно я добавил пространство имен, чтобы легче использовать его с композитором. Я сделал это несколько раз, и он отлично работает с другими файлами/классами.Композитор PSR4 странное поведение

Проблема в том, что он только автозагружается правильно, если я использую опцию -o (оптимизировать) при обновлении или dumpautoload в композиторе.

Так, например, если я запустил composer dumpautoload -o, мой класс найден без проблем. Если я бегу composer dumpautoload он не будет работать, и дать мне следующую ошибку:

Fatal error: Class 'Crecket\custom_twig_extension' not found in C:\Dropbox\Ampps\www\crecket.dev\index.php on line 24 

Мой расширение класса:

namespace Crecket; 

class custom_twig_extension extends \Twig_Extension{ 
    // The code 
} 

Мой композитор файл

"autoload": { 
    "psr-4": { 
     "Crecket\\": "src/" 
    } 
} 

структура папок

src/custom_twig_extension.php 

Кто-нибудь знает, что вызывает это? Я не могу понять, что вызывает это. Я предполагаю, что это связано с тем, что композитор создает карту классов, когда я использую оптимизацию.

+0

Он отлично работает для меня с вашей настройкой. Проверьте пару вещей. Убедитесь, что вам требуется 'vendor/autoload.php' из' index.php'. Также проверяйте 'vendor/composer/autoload_classmap.php' и' vendor/composer/autoload_psr4.php' после каждой команды и посмотрите, дает ли это вам какие-либо идеи. –

+0

@JustinHoward класс отображается в файле psr4.php, но я проверил его в файле index.php, используя 'get_declared_classes()', и он там не указан. Я серьезно не знаю. Я даже попытался добавить/удалить лишние пространства имен и сменить папки – Crecket

+0

У меня есть то же самое ... все еще не выяснено, почему и как его исправить – Seb

ответ

0

У меня была аналогичная проблема, которая оказалась из-за того, что имя класса в моем файле отличается от имени файла, предоставляющего его. Я имел myclass.php и класс MyClass {}

Согласно Reddit обсуждения кто-то сталкивается с аналогичной проблемой (https://www.reddit.com/r/laravel/comments/2zx3in/l5_composer_dumpautoload_gives_class_not_found/):

In PSR-4, you have to name the file the name of the class.

Когда я переименовал myclass.php в MyClass.php проблема исчезла - дважды проверьте, что вы использовали одно и то же имя (и случай!) для обоих!

Смежные вопросы