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

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

Expected to find class "Shop\Admin\CategoryAdmin" in file "C:\wamp64\www\gall\bundles\Shop\src/Admin\CategoryAdmin.php" while importing services from resource "../bundles/Shop/src/*", but it was not found! Check the namespace prefix used with the resource in C:\wamp64\www\gall\config/services.yaml (which is loaded in resource "C:\wamp64\www\gall\config/services.yaml").


Вот мой services.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 не может найти этот класс, какие-нибудь идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 302
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

composer.json часть:

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

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

Зарегистрируйте пространство имен Shop как bundles / Shop и удалите каталог src в bundles / Shop.

Обновлено: Я обычно делаю это для пакетов, которые я еще не готов опубликовать, но опубликую в будущем. Пример из одного из моих проектов:

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

Обновлено еще раз: Не забудьте запустить composer dump-autoload после изменения.

Есть ли какое-либо решение, которое не требует удаления папки src? Я хотел бы сохранить структуру Sf по умолчанию внутри моего пакета (класс в src, шаблонах, переводах и т. д. Рядом с каталогом src). Также есть ли возможность не включать «пакеты» в пространство имен и настроить автозагрузчик для работы с пространством имен «Магазин»? Я возьмусь с этим, спасибо за некоторые направления.

Arkadiusz Galler 25.07.2018 21:20

Структура пакета отличается от структуры приложения. Большинство пакетов не используют папку src. Кстати, если вы делаете это, чтобы добавить некоторую структуру в свое приложение, не делайте этого вообще. Используйте папки в обычном пространстве имен приложений.

Padam87 25.07.2018 21:23

Как правило, структура связок поощрялась в Sf3, а в Sf4 в основном не поощрялась. Я хочу отделить «Магазинный пакет», чтобы я мог легко удалить файлы и несколько строк конфигурации из проекта в любое время, не просматривая все каталоги и не удаляя каталог «магазин» с файлами, связанными с пакетом. Я еще немного поиграюсь с этим, спасибо за подсказки, и другие намеки по моей проблеме приятно видеть :)

Arkadiusz Galler 25.07.2018 21:26

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

Arkadiusz Galler 25.07.2018 21:29

Другие вопросы по теме