"Class not found" после установки библиотеки через композер
"Class not found" после установки библиотеки через композер
Добрый день!
Я добавил в composer.json новый пакет и установил библиотеку.
Но сейчас мне приходится постоянно делать require(), иначе получаю ошибку "Class not found".
Это нормально, или все таки классы, установленные через композер должны сами подгружаться ?
Я добавил в composer.json новый пакет и установил библиотеку.
Но сейчас мне приходится постоянно делать require(), иначе получаю ошибку "Class not found".
Это нормально, или все таки классы, установленные через композер должны сами подгружаться ?
-
- Сообщения: 957
- Зарегистрирован: 2014.05.31, 20:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: "Class not found" после установки библиотеки через композер
Должны сами. Импорт через use делаете? Нужно больше информации.
Re: "Class not found" после установки библиотеки через композер
должны сами подгружаться
Re: "Class not found" после установки библиотеки через композер
Код: Выделить всё
use ApiFactory;
Код: Выделить всё
ApiFactory::createNewApiConnection(
Код: Выделить всё
Class 'ApiFactory' not found
Re: "Class not found" после установки библиотеки через композер
Может быть в библиотеке должен быть реализовать autoload ? Потому, что его там нет
- Neuromance
- Сообщения: 716
- Зарегистрирован: 2011.09.06, 13:04
Re: "Class not found" после установки библиотеки через композер
use ApiFactory; - это что? Где здесь путь до класса?
-
- Сообщения: 957
- Зарегистрирован: 2014.05.31, 20:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: "Class not found" после установки библиотеки через композер
Скиньте ссылку на расширение.
Re: "Class not found" после установки библиотеки через композер
Библиотека из закрытого репозитория на гитхабе.
Может я что то путаю, в том как происходит импорт, я правильно понимаю, что :
1. при исспользовании композера, в папке vendor/composer, есть SPL autoload который делает require() нужных файлов с классами.
2. use в классах, которые мы пишем, просто служит для импорта пространств имен.
Или я ошибаюсь?
У меня такое чувство, что мой файл с классом не был подключен через require(), потому, что когда я его подключаю руками через require(), все начинает работать
Может я что то путаю, в том как происходит импорт, я правильно понимаю, что :
1. при исспользовании композера, в папке vendor/composer, есть SPL autoload который делает require() нужных файлов с классами.
2. use в классах, которые мы пишем, просто служит для импорта пространств имен.
Или я ошибаюсь?
У меня такое чувство, что мой файл с классом не был подключен через require(), потому, что когда я его подключаю руками через require(), все начинает работать
Re: "Class not found" после установки библиотеки через композер
1. автолоад не основан на телепатии пространств имен
2. именно, что пространство имен
2. именно, что пространство имен
- Neuromance
- Сообщения: 716
- Зарегистрирован: 2011.09.06, 13:04
Re: "Class not found" после установки библиотеки через композер
Должно быть use vendor\library\ApiFactory; , вы уверены, что именно так пишете?
-
- Сообщения: 957
- Зарегистрирован: 2014.05.31, 20:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: "Class not found" после установки библиотеки через композер
Посмотрите composer.json в репозитории библиотеки, там найдёте namespace.
Re: "Class not found" после установки библиотеки через композер
Если, как советует Neuromance, получается что дефисы дают ошибку
А, в composer.json
Код: Выделить всё
use vendor\testsoftware\api-client\ApiFactory;
Код: Выделить всё
testsoftware/api-client
Re: "Class not found" после установки библиотеки через композер
Та дайте Вы ссылку на гитхаб
-
- Сообщения: 957
- Зарегистрирован: 2014.05.31, 20:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: "Class not found" после установки библиотеки через композер
В composer.json должна быть часть autoload, что там написано? И посмотрите namespace в самом классе:
Код: Выделить всё
<?php
namespace testsoftware/api;
Re: "Class not found" после установки библиотеки через композер
Видимо, вся проблема в том, что данная библиотека не использует namespace, там отсутствуют пространства имен.
Загуглил, нашел такую тему, видимо прийдется все таки юзать require()
http://stackoverflow.com/questions/2812 ... -with-yii2
Загуглил, нашел такую тему, видимо прийдется все таки юзать require()
http://stackoverflow.com/questions/2812 ... -with-yii2
Re: "Class not found" после установки библиотеки через композер
Не надо каждый раз. Сделайте это один раз в index.phpbaydikov писал(а): Но сейчас мне приходится постоянно делать require(), иначе получаю ошибку "Class not found".
Код: Выделить всё
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
$config = require(__DIR__ . '/../config/web.php');
$app = new yii\web\Application($config);
require(__DIR__ . '/../vendor/vendorname/package/file.php');
$app->run();
Re: "Class not found" после установки библиотеки через композер
не бывает классов без пространств имен. Есть корневой namespace. composer работает и с ними.baydikov писал(а):Видимо, вся проблема в том, что данная библиотека не использует namespace, там отсутствуют пространства имен.
Загуглил, нашел такую тему, видимо прийдется все таки юзать require()
http://stackoverflow.com/questions/2812 ... -with-yii2
Re: "Class not found" после установки библиотеки через композер
Значит это и используйте:mickgeek писал(а):namespace testsoftware/api;
Код: Выделить всё
use testsoftware\api\ApiFactory;
-
- Сообщения: 957
- Зарегистрирован: 2014.05.31, 20:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: "Class not found" после установки библиотеки через композер
ElisDN, этот namespace был взят с потолка, в качестве примера.