ClassNotFoundError после установки кастомной Symfony Bundle - PullRequest
0 голосов
/ 11 марта 2020

Я создал простой пользовательский пакет Symfony (в версии 5.0). Это после того, как я запустил composer require, расположенный в vendor/ntrx/ntrx-user-bundle, но я не могу загрузить его нормально. Структура папок там выглядит следующим образом:

Controller/
Service/
composer.json
NtrxUserBundle.php
Readme.md

composer.json содержит следующее:

{
    "name": "ntrx/ntrx-user-bundle",
    "description": "",
    "license": "proprietary",
    "type": "symfony-bundle",
    "require": {
        "php": "^7.2.5",
        [...]
    },
    "autoload": {
        "psr-4": { "Ntrx\\UserBundle\\": "" }
    }
}

И NtrxUserBundle.php содержит следующий код:

<?php

namespace Ntrx\UserBundle;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;

class NtrxUserBundle extends Bundle
{
    /**
     * {@inheritdoc}
     */
    public function build(ContainerBuilder $container): void {
        parent::build($container);
    }
}

Когда я запускаю, например, php bin/console, я получаю следующую ошибку:

Symfony\Component\ErrorHandler\Error\ClassNotFoundError^ {#31
  #message: """
    Attempted to load class "NtrxUserBundle" from namespace "Ntrx\UserBundle".\n
    Did you forget a "use" statement for another namespace?
    """
  #code: 0
  #file: "./src/Kernel.php"
  #line: 23
  trace: {
    ./src/Kernel.php:23 {
      App\Kernel->registerBundles(): iterable^
      › if ($envs[$this->environment] ?? $envs['all'] ?? false) {
      ›     yield new $class();
      › }
    }
    ./vendor/symfony/http-kernel/Kernel.php:369 { …}
    ./vendor/symfony/http-kernel/Kernel.php:123 { …}
    ./vendor/symfony/framework-bundle/Console/Application.php:169 { …}
    ./vendor/symfony/framework-bundle/Console/Application.php:75 { …}
    ./vendor/symfony/console/Application.php:140 { …}
    ./bin/console:42 { …}
  }
}

Я пытался изменить имена пакета или изменить автозагрузчик, но кажется, что класс не там вообще. Я также попытался сломать другой сторонний пакет (сделайте опечатку в имени класса), и я получаю соответствующую ошибку там, но не ошибку выше (The file was found but the class was not in it, the class name or namespace probably has a typo.). Кроме того, composer dump-autoload ничего не меняет.

Единственная похожая ошибка, которую я обнаружил в Интернете: Symfony включить пользовательский пакет ClassNotFoundException , и я думаю, что в моем коде все исправлено. Есть предложения?

1 Ответ

0 голосов
/ 11 марта 2020

Спасибо @Cerad за подсказку для проверки файлов автозагрузки composer. Там в autoload_psr4.php папка автозагрузки была определена в vendor/ntrx/ntrx-user-bundle/src. Но класс в vendor/ntrx/ntrx-user-bundle. Дополнительная подпапка src была частью нового изменения пакета.

Я полностью удалил папку vendor, выполнил composer clear-cache и установил все пакеты с composer. Чем это работает!

Я пропустил очистку кеша composer после этого изменения автозагрузчика.

...