2015-07-06 3 views
0

Я пытаюсь изучить композитор, но я не могу заставить автозагрузчик работать с созданным мной пакетом. Он просто утверждает, что класс не может быть найден.Composer autoloader

Что я делаю неправильно?

Index.php:

require 'vendor/composer/autoload_psr4.php'; 
use packageName\core\Bootstrap; 
$boot = new Bootstrap(); 

Bootstrap.class.php (внутри/продавец/Имя_вендора/PackageName/ядро ​​/):

namespace packageName\core; 
class Bootstrap { 
    ... 

composer.json для PackageName:

"autoload": { 
    "psr-4": { "packageName\\core\\": "/vendor/vendorName/packageName/core" } 
} 
+1

Просто включите vendor/autoload.php, https://getcomposer.org/doc/01-basic-usage.md#autoloading –

+1

Действительно ли '/ vendor/...' находится на корневом уровне в вашей файловой системе? Если это относительный путь, а не абсолютный путь, используйте '' vendor/vendorName/packageName/core "' –

+0

Он также не работает с поставщиком/autoload.php. Я не думаю, что он находит файлы. И/vendor/находится на корневом уровне. – dvlpr

ответ

0

Ответ Марка Бейкера (в комментариях выше) исправил проблему.

«Является/продавец/... действительно на корневом уровне в вашей файловой системе? Если это относительный путь, а не абсолютный путь, используйте„поставщик/Имя_вендора/PACKAGENAME/ядро“

1

Первый: не включать случайный компонент автозагрузки. Composer has documentation how to use the autoloader.

Во-вторых: не обрабатывайте пакеты, которые уже установлены вместе с Composer в вашей автозагрузке OWN. Все, что находится внутри папки vendor, не должно быть автоматически загружено из вашего собственного composer.json - оно должно предоставить собственное определение автозагрузки. Самый простой случай был бы вы имея только это:

{ 
    "require": { 
     "vendorName/packageName" : "^1.0" 
    } 
} 

Вам нужно будет только add autoloading к этому, если вы хотите иметь свой собственный код автозагрузки, а также (который я бы рекомендовал).

+0

Я создаю пакет. Он состоит из некоторых файлов, которые необходимо загрузить при запуске. – dvlpr

+0

Но если ваш пакет использует другие пакеты, они не должны появляться в автозагрузке вашего собственного пакета. Кроме того, единственной причиной для загрузки файла в начале было бы, если он содержит функцию, потому что функции не могут быть загружены автоматически. Я думаю, вы должны дать лучший пример того, что вы собираетесь делать - и, пожалуйста, также добавьте полное сообщение об ошибке, не перефразируйте его. – Sven

+0

В моем пакете не используется какой-либо другой пакет. Я тестирую, если мой пакет, который называется «имя пакета», может быть автоматически загружен при установке другими. Мне нужен класс bootstrap() для запуска в начале. – dvlpr

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