Неустранимая ошибка из-за 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).