it-swarm.com.ru

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

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

enter image description here

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

<?php

namespace Library;

class MyHelper
{
    public function v($arr)
    {
        var_dump($arr);
    }
}

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

enter image description here

а потом я побежал

$ composer dump-autoload

но это, похоже, не имеет никаких последствий.

Файлы

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

не изменилось.

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

enter image description here

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

5
GerBawn

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

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

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

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

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

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

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

namespace App\Library;

class MyHelper 
{
    public function v($arr)
    {
        var_dump($arr);
    }
}

Для справки смотрите:

6
localheinz

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

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

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

namespace App\Library;

class MyHelper{
    public function v($arr){
        var_dump($arr);
    }
}

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

0
Zachary Weixelbaum