Symfony Fileloader не может найти существующий класс

возможно я просто что-то напутал с пространствами имен, но я этого не вижу.

Я попытался разделить некоторые классы в моем приложении Symfony на пакет.
Ошибка, которую я получаю в Symfony:

Ожидается найти класс «Shop \ Admin \ CategoryAdmin» в файле
«C: \ wamp64 \ www \ gall \ bundles \ Shop \ src / Admin \ CategoryAdmin.php» в то время как
импортировать сервисы из ресурса «../bundles/Shop/src/*», но это было
не найдено! Проверьте префикс пространства имен, используемый с ресурсом в
C: \ wamp64 \ www \ gall \ config / services.yaml (который загружается в ресурс
«C: \ wamp64 \ WWW \ желчный \ Config / services.yaml»).

Вот мои услуги.yaml:

Shop\:
resource: '../bundles/Shop/src/*'
exclude: '../bundles/Shop/src/{Entity,Migrations,Tests}'

Shop\Controller\:
resource: '../bundles/Shop/src/Controller'
tags: ['controller.service_arguments']

Структура файла выглядит следующим образом:

project (C:\wamp64\www\gall)
\- bundles
\- Shop
\- src
\- Admin
\- CategoryAdmin.php
\- config
\- services.yaml

И сам файл CategoryAdmin.php выглядит так:

namespace Shop\Admin;

use Shop\Entity\Category;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Sonata\TranslationBundle\Filter\TranslationFieldFilter;


/**
* Class CategoryAdmin
* @package Shop\Admin
*/
class CategoryAdmin extends AbstractAdmin
{
{...}
}

Так, маршруты выглядят точно так, как указано в ошибке. Я не понимаю, почему FileLoader не может найти этот класс, какие-либо идеи?

0

Решение

Это проблема автозагрузки.

composer.json часть:

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

Пространство имен приложения связано с папкой src.

Зарегистрируйте пространство имен магазина как связки / Магазин, и удалите каталог src под связками / Магазин

РЕДАКТИРОВАТЬ: Я обычно делаю это для пакетов, которые я еще не готов опубликовать, но опубликую в будущем.
Пример из одного из моих проектов:

"autoload": {
"psr-4": {
"App\\": "src/",
"Padam87\\AdminBundle\\": "bundles/Padam87/AdminBundle/"}
},

РЕДАКТИРОВАТЬ 2: не забудьте запустить composer dump-autoload после смены.

1

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

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

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