У меня есть следующее определение автозагрузки класса в [root]/composer.json
файл:
{
...
"autoload": {
"psr-0": {
"": [
"application/models",
"application/controllers",
"application/forms",
"library/"]
},
"psr-4": {
"": ["src/"]
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"]
},
...
}
Когда я звоню [root]/public_html/index.php
На странице я получил следующую ошибку:
Неустранимая ошибка PHP: необработанная ошибка: класс ‘classes \ DependencyInjection’ не найден в /var/www/html/application/bootstrap.php:29
Что в [root]/public_html/index.php
это следующий код:
$bootstrap = true;
require_once '../application/bootstrap.php';
И что в [root]/application/bootstrap.php
файл:
// turn on autoloading for classes
// composer autoloader
include(MMIPATH.'/vendor/autoload.php');
// zend autoload
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
$diContainer = new classes\DependencyInjection(services.yaml');
$proxy = $diContainer->get('containerProxy');
Это определение [root]/library/classes/DependencyInjection.php
:
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
USE Symfony\Component\DependencyInjection\Container;
class DependencyInjection extends ContainerBuilder
{
....
}
Что здесь не так? Почему автозагрузчик не может найти этот класс?
Вы пытаетесь загрузить пространство имен «classes», однако ваш класс не определен как находящийся в пространстве имен «classes».
new classes\DependencyInjection(...)
в нагрузках ПСР-0 {paths}\classes\DependencyInjection.php
и пытается создать экземпляр класса DependencyInjection
из пространства имен classes
, но DependencyInjection
не в classes
Пространство имен. Файл загрузится, но класс не существует.
Вы могли бы добавить namespace classes;
для каждого из этих классов, но это не совсем хорошее решение. Лучшее решение — использовать правильное пространство имен или изменить список PSR-0, включив в него библиотеку / классы и использовать new DependencyInjection(...)
, (Мой голос за первый — используйте правильные пространства имен.)
Как просили. пример:
Расположение файла
{app}\library\UsefullNamespace\DependencyInjection.php
Звони, используя
new UsefullNamespace\DependencyInjection.php
DependencyInjection.php:
namespace UsefullNamespace;
use [...];
class DependencyInjection extends ContainerBuilder
{
Других решений пока нет …