2014-09-02 3 views
15

Следующая проблема: Я определил classmap в моем composer.json:Композитор classmap автозагрузка не загружает новые файлы в папке

"autoload": { 
    "classmap": [ 
     "app/controllers", 
     "app/models", 
     "app/helper.php" 
    ] 
} 

Однако, когда я создаю новый файл в «контролеров» или " моделей ", он не будет загружать их, и мне всегда приходится создавать компоновщик-дамп-автозагрузка.

Это правильное поведение? Я думал, что автозагрузчик от композитора контролирует папку для новых файлов?

ответ

16

Да, это правильное поведение. Если вы хотите, чтобы новые классы загружались автоматически, вы должны использовать либо автозагрузку PSR-0, либо PSR-4.

Для создания Classmap Composer необходимо знать имя файла, содержащего определенный класс. Это можно сделать только путем анализа всего исходного кода в каталоге и сканирования для классов, интерфейсов и определений признаков.

Обычно это задача для процессора и ввода-вывода, поэтому она выполняется только тогда, когда Composer устанавливает/обновляет или (по запросу) сбрасывает автозагрузчик, это не делается с каждым require "vendor/autoload.php";.

Обратите внимание, что самозарядка classmap просто существует для старых устаревших кодовых баз, которые не реализовали хотя бы PSR-0. Он не предназначен для нового кода - если вы не хотите заплатить цену, чтобы сбрасывать автозагрузчик снова и снова во время разработки.

+0

Хорошо ... большое спасибо! – pyxl

+0

«Обратите внимание, что автозагрузка групповой карты просто существует для старых устаревших кодовых баз, которые не реализовали хотя бы PSR-0». Не совсем верно.См. Документацию для dump-autoload: «--optimize (-o): конвертировать PSR-0/4 для загрузки с помощью classmap, чтобы получить более быстрый автозагрузчик. Это рекомендуется специально для производства, но может потребоваться немного времени для запуска поэтому в настоящее время он не выполняется по умолчанию ». – spekary

+0

Оптимизация автозагрузчика - это не то же самое, что определение схемы автозагрузки. Если будущая версия PHP предлагает поддержку уровня PSR-4 на уровне двигателя, Composer, вероятно, откажется от classmap при оптимизации для такой версии, но должен сохранить classmap, если эта классная карта является способом автозагрузки. – Sven

6

Перейти к корневому серверу вашего сервера по SSH. Теперь сделайте следующее:

  1. Запустить ls, чтобы перечислить все файлы.
  2. Вы увидите файл composer.lock; удалите файл командой rm composer.lock.
  3. Теперь запустите команду php composer update.

В зависимости от типа вашего linux вам может потребоваться запустить php-cli composer update.

Шаг 3 создаст новый файл composer.lock, и все ваши классы будут загружены снова. Сделайте это в любое время, когда вы добавите новые классы.

или:

  1. Run composer dump-autoload команду.
+1

спасибо Sven за редактирование –

-2

Puedes искоса Эсте пост, Justo estaba Buscando ло Mismo дие Вос у logre encontrar ла respuesta ан-Эсте сообщение:

http://phpenthusiast.com/blog/how-to-autoload-with-composer


Вы можете прочитать этот пост, я просто искал так же, как вы и сумели найти ответ на этот пост:

http://phpenthusiast.com/blog/how-to-autoload-with-composer

+3

Пожалуйста, добавьте больше вашего ответа, чем просто ссылку. Иногда ссылки идут плохо, и ответ уже не будет хорошим. Кроме того, почему вы ответили дважды на двух разных языках? – Chillie

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