Что не так в моей автозагрузке psr-4? - PullRequest
2 голосов
/ 03 мая 2019

Я создаю веб-приложение с Slim и Twig. Библиотеки, которые я использую, работают отлично, я могу без проблем вызывать их. Однако мои собственные классы не обнаруживаются composer.json с автозагрузкой psr-4 (psr-0 их тоже не находит)
Вот моя файловая система:

project
   |composer.json
   |src
       |public
       |   |index.php
       |classes
       |   |Application.php
       |   |middlewares
       |       |SecurityMiddleware.php
       |templates
           |TemplateController.php
           |main
               |MainController.php

Вот мой composer.json:

{
    "authors": [
        {
            "name": "Jean-Marc ZIMMER",
            "email": "################@gmail.com",
            "role": "Developer"
        }
    ],
    "require": {
        "slim/slim": "^3.11",
        "slim/extras": "*",
        "twig/twig": "^2.5",
        "slim/twig-view": "^2.4",
        "slim/views": "^0.1.3"
    },
    "autoload": {
        "psr-4": {
            "src\\": "src",
            "middlewares\\": "src/classes/middlewares",
            "classes\\": "src/classes",
            "templates\\": "src/templates"
        }
    }
}

Тогда src/classes/Application.php:

<?php

namespace classes;

class Application extends \Slim\App {

    public function __construct($container = array()) {
        parent::__construct($container);
    }
}

И, наконец, мой index.php файл:

<?php

require '../../vendor/autoload.php';

$app = new \classes\Application([
    "settings" => [
        "displayErrorDetails" => true
    ]
]);
$app->run();

Когда я запускаю composer dump-autoload, команда выводит:

Сгенерированные файлы автозагрузки, содержащие 0 классов

затем выходит с кодом состояния 0. Должно быть найдено 4 класса, верно?
И запуск приложения показывает ошибку:

Неустранимая ошибка: необученная ошибка: класс 'classes \ Application' не найден в /opt/lampp/htdocs/project/src/public/index.php:5

Я уверен, что я что-то упускаю, указывая пространство имен или что-то. Кто-нибудь может мне помочь?

редактирует:
Я попытался использовать параметр --optimize или --classmap-authoritative для dump-autoload. Ничего не изменилось.
Добавление '/' к именам папок в composer.json ничего не меняет.

1 Ответ

0 голосов
/ 04 мая 2019

Я получил решение из другого источника. Мне лично это не нравится, но это работает.
Файловая система не была изменена.

composer.json автозагрузка:

"autoload": {
    "psr-4": {
        "App\\": "src/"
    }
}

src/public/index.php

<?php

require '../../vendor/autoload.php';

$app = new \App\classes\Application([
    "settings" => [
        "displayErrorDetails" => true
    ]
]);
$app->run();

src/classes/Application.php:

<?php
namespace App\classes;

class Application extends \Slim\App {

    public function __construct($container = array()) {
        parent::__construct($container);
    }
}

Я собираюсь работать с этой функциональной базы и посмотреть, смогу ли я получить желаемый результат. Если я это сделаю, я отредактирую этот ответ.

...