Неустранимая ошибка из-за composer.json в фреймворке slim tree

Я следовал руководству Алекса Гарета по созданию корзины покупок. Я на складе, потому что думаю, что composer.json неправильно загружает мои файлы. Вот моя ошибка:

"Неустранимая ошибка: необработанная ошибка: класс 'Order\App' не найден в C:\xampp\htdocs\order\bootstrap\app.php:10 Трассировка стека: #0 C:\xampp\htdocs\order\public\index.php(3): require() #1 {main} в C: \ xampp \ htdocs \ order \ bootstrap \ app.php в строке 10"

файл composer.json

    {
    "require": {
        "slim/slim": "^3.0",
        "slim/twig-view": "^2.4",
        "php-di/slim-bridge": "^2.0",
        "illuminate/database": "^5.6"
    },

    "autoload": {
        "psr-4": {
            "Order\\": "Order"
        }
    }
}

Класс приложения

    namespace Order;

    use DI\ContainerBuilder;
    use DI\Bridge\Slim\App as DIBridge;

    class App extends DIBridge{

        protected function configureContainer(ContainerBuilder $builder){
            $builder->addDefinitions([
                'settings.displayErrorDetails' => true
            ]);

            //
        }

}

файлapp.php, который является файлом начальной загрузки

<?php

use Order\App;

session_start();

require __DIR__ . '/../vendor/autoload.php';
//require __DIR__ . '/../app/App.php';

$app = new App;

Если я откомментирую нужную строку, где я вытащил в App.php, он работает нормально.

Структура каталогов:

структура папок

ОС: Windows 10

2 ответа

Решение

Попробуй поменять autoload к следующему:

"autoload": {
    "psr-4": {
        "Order\\": ""
    }
}

Вы должны изменить свою автозагрузку, чтобы настроить таргетинг на app/ вместо папки, так как там, где ваш App.php расположен:

"autoload": {
    "psr-4": {
        "Order\\": "app/"
    }
}

По сути, это говорит автозагрузчику, что все классы, которые имеют пространство имен Order\ существует в app/,

Так что теперь, если вы хотите создать подпапки в app/:

app/
    App.php
    Foo/
        Bar.php

затем Bar.php должно иметь пространство имен Order\Foo и вы получите доступ к этому классу с помощью: $bar = new Order\Foo\Bar(),

Примечание. Именно здесь важен корпус файла / папки. Корпус пространства имен и имя класса должны иметь тот же корпус, что и файлы и папки. В противном случае он все равно будет работать для вас в Windows, но не будет работать в других ОС (например, в Linux).

Другие вопросы по тегам