возможно я просто что-то напутал с пространствами имен, но я этого не вижу.
Я попытался разделить некоторые классы в моем приложении 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 не может найти этот класс, какие-либо идеи?
Это проблема автозагрузки.
composer.json часть:
"autoload": {
"psr-4": {
"App\\": "src/",
}
},
Пространство имен приложения связано с папкой src.
Зарегистрируйте пространство имен магазина как связки / Магазин, и удалите каталог src под связками / Магазин
РЕДАКТИРОВАТЬ: Я обычно делаю это для пакетов, которые я еще не готов опубликовать, но опубликую в будущем.
Пример из одного из моих проектов:
"autoload": {
"psr-4": {
"App\\": "src/",
"Padam87\\AdminBundle\\": "bundles/Padam87/AdminBundle/"}
},
РЕДАКТИРОВАТЬ 2: не забудьте запустить composer dump-autoload
после смены.
Других решений пока нет …