Я создал папку 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 сообщает о следующей ошибке:
Я не уверен, что я делаю неправильно.
Конфигурация автозагрузки почти хороша, но у вас есть
Чтобы устранить проблему, настройте конфигурацию автозагрузки:
{ "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"] }