Класс не найден, проблема с загрузчиком композитора и Zend Framework 1

У меня есть следующее определение автозагрузки класса в [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
{
....
}

Что здесь не так? Почему автозагрузчик не может найти этот класс?

0

Решение

Вы пытаетесь загрузить пространство имен «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
{
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]