2015-08-10 4 views
4

Я создал папку library в папке app, чтобы добавить свои собственные классы.Как я могу автозагрузить пользовательский класс в Laravel 5.1?

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

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

+0

Это популярный вопрос в Laravel, который имеет огромное количество сообщений о нем в Интернете уже. – Jonathan

ответ

0

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

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

Я пробую ваш ответ, и он работает. Но если у меня много файлов или какой-то каталог, это решение не очень эффективно. – GerBawn

+0

@GerBawn вы спросили, как добавить файл, я ответил. Если вы хотите что-то еще, прочитайте руководство для композитора. Есть много вариантов автозагрузки. –

+0

Это не масштабируется, вместо этого используйте PSR-4. – localheinz

-1

Использование composer.json:

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

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

Не забудьте добавить прогон composer dump-autoload.

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

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

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

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

namespace App\Library; 

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

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

+0

Если вы хотите совместить пространство имен с существующей файловой структурой, это должно быть 'App \ library'. – localheinz

+0

Это именно то, что я написал –

+0

Нет, это говорит 'App \ Library'. – localheinz

3

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

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

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

{ 
    "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); 
    } 
} 

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

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