Как я могу автоматически загрузить пользовательский класс в Laravel 5.1?

Я создал папку library папке app чтобы добавить свои собственные классы.

введите описание изображения здесь

Это содержимое файла app/library/helper.php :

 <?php namespace Library; class MyHelper { public function v($arr) { var_dump($arr); } } 

Я добавил пространство имен в composer.json :

введите описание изображения здесь

и тогда я побежал

 $ composer dump-autoload 

но он, похоже, не имеет никаких эффектов.

Файлы

  • vendor/composer/autoload_psr4.php
  • vendor/composer/autoload_classmap.php

не изменился.

Если я попытаюсь создать экземпляр MyHelper , Laravel сообщает о следующей ошибке:

введите описание изображения здесь

Я не уверен, что я делаю неправильно.

Solutions Collecting From Web of "Как я могу автоматически загрузить пользовательский класс в Laravel 5.1?"

Конфигурация автозагрузки почти хороша, но у вас есть

  • не получили пространства имен
  • ошиблись

Чтобы устранить проблему, настройте конфигурацию автозагрузки:

 { "autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/" } } } 

Затем переименуйте каталог /library в /Library (обратите внимание на случай).

Затем переименуйте файл /app/Library/helper.php в /app/Library/MyHelper.php (обратите внимание, как имя класса должно совпадать с именем файла).

Затем /app/Library/MyHelper пространство имен класса, предоставленное /app/Library/MyHelper чтобы соответствовать префиксу PSR-4 (и, следовательно, структуре вашего проекта), а также к классам класса:

 namespace App\Library; class MyHelper { public function v($arr) { var_dump($arr); } } 

Для справки см .:

Использовать директиву files в composer.json : https://getcomposer.org/doc/04-schema.md#files

 { "autoload": { "files": ["app/library/helper.php"] } } 

Я знаю, что этот вопрос был дан ответ некоторое время назад, но причина, по которой он не работает, заключается в том, что вам нужно предоставить пространство имен, соответствующее структуре файла. Поэтому, поскольку класс Library находится внутри папки App, вам нужно:

 namespace App\Library; class MyHelper{ public function v($arr){ var_dump($arr); } } 

Кроме того, если вы собираетесь вызвать класс MyHelper , вам нужно вызвать файл MyHelper.php

Используйте composer.json:

  "autoload": { "classmap": [ "database", "app/Transformers" ] }, 

Добавьте свои каталоги автонагрузки, как я добавил приложение / Трансформаторы.

Не забудьте добавить run composer dump-autoload .

Единственная проблема с этим методом – вам нужно запустить composer dump-autoload всякий раз, когда вы добавляете новый класс в этот каталог.

Или вы можете использовать «Файлы» в composer.json.

 "autoload": { "files": ["src/MyLibrary/functions.php"] }