Как в Symfony добавить репозитории из бандла?

В Symfony для добавления репозиториев из бандла следует выполнить несколько шагов.

1. Установите нужный вам бандл с помощью Composer, добавив его в файл composer.json вашего проекта. Например, если вы хотите использовать бандл AcmeBundle, выполните команду:

composer require acme/acme-bundle

2. Зарегистрируйте бандл в вашем приложении, отредактировав файл config/bundles.php. Найдите строку, похожую на 'Acme\AcmeBundle\AcmeBundle' => true,, и убедитесь, что она добавлена. Если нет, то добавьте ее в самом конце этого файла.

3. Создайте репозиторий для вашего бандла, в котором будет содержаться логика работы с данными. Рекомендуется использовать стандарт Symfony для нейминга репозитория, где ваш бандл называется AcmeBundle, а репозиторий - AcmeRepository. Местоположение файла репозитория должно быть в директории src/Repository.

// src/Repository/AcmeRepository.php

namespace AppRepository;

use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
use AppEntityAcme;

class AcmeRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Acme::class);
    }

    // здесь вы можете добавить свои собственные методы для работы с данными
}

4. Добавьте репозиторий в конфигурацию вашего бандла, создав файл config/packages/doctrine.yaml или добавив в существующий файл следующий код:

# config/packages/doctrine.yaml

doctrine:
    orm:
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'AppEntity'
                alias: App
            AcmeBundle:
                is_bundle: true
                type: annotation
                dir: '%kernel.project_dir%/vendor/acme/acme-bundle/src/Entity'
                prefix: 'AcmeAcmeBundleEntity'
                alias: AcmeBundle

Обратите внимание на параметры dir и prefix, они должны соответствовать директории и пространству имен вашего бандла.

5. Теперь вы можете использовать репозиторий в вашем контроллере или где угодно в вашем приложении:

namespace AppController;

use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentRoutingAnnotationRoute;
use AppRepositoryAcmeRepository;

class MyController extends AbstractController
{
    /**
     * @Route("/example", name="example")
     */
    public function example(AcmeRepository $acmeRepository)
    {
        $entities = $acmeRepository->findAll();

        // делайте что угодно с вашими данными, полученными из репозитория

        return $this->render('example.html.twig', [
            'entities' => $entities,
        ]);
    }
}

Теперь ваш бандл и репозиторий должны быть успешно добавлены и готовы к использованию в Symfony приложении.