Как передать переменную в метод setQueryBuilder в EasyAdmin?

Здравствуйте! Пожалуйста, подскажите, как передать переменную ($gameId) в метод setQueryBuilder в EasyAdmin, чтобы использовать одно из свойств редактируемой сущности?
  • 28 августа 2024 г. 13:54
Ответы на вопрос 1
В EasyAdmin вы можете использовать метод `setQueryBuilder` для настройки запросов, которые выбирают данные для отображения в админке. Если вам нужно передать переменную, например `$gameId`, и использовать её для фильтрации сущностей, вы можете сделать это следующим образом:

1. **Создайте пользовательский контроллер:** Вам нужно будет переопределить действие, которое использует `setQueryBuilder`.

2. **Используйте конструктор:**
   В вашем контроллере добавьте переменную `$gameId` и передайте её в метод `setQueryBuilder`.

Вот пример того, как это можно сделать:

```php
// src/Controller/Admin/GameCrudController.php

namespace App\Controller\Admin;

use App\Entity\YourEntity; // Используйте вашу сущность
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use Doctrine\ORM\QueryBuilder;

class GameCrudController extends AbstractCrudController
{
    private $gameId;

    public function __construct($gameId)
    {
        $this->gameId = $gameId;
    }

    public function configureCrud(Crud $crud): Crud
    {
        return $crud
            ->setPageTitle(Crud::PAGE_INDEX, 'My Custom Title');
    }

    public function createIndexQueryBuilder(EntityRepository $repository): QueryBuilder
    {
        $qb = $repository->createQueryBuilder('e');

        // Фильтруем по $gameId
        if ($this->gameId) {
            $qb->andWhere('e.game = :gameId')
               ->setParameter('gameId', $this->gameId);
        }

        return $qb;
    }

    // Другие методы CRUD...
}
```

3. **Регистрация контроллера:** Убедитесь, что вы правильно регистрируете свой контроллер в файле конфигурации EasyAdmin.

4. **Передача `$gameId`:** Если вам нужно передать `$gameId` динамически (например, из URL), вы можете использовать Router для извлечения параметра и передачи его в контроллер.

Пример маршрута:

```yaml
# config/routes.yaml
game:
    path: /admin/game/{gameId}
    controller: App\Controller\Admin\GameCrudController
```

Теперь ваше `GameCrudController` получит `gameId` как параметр, и вы сможете использовать его в методе `createIndexQueryBuilder`.

Помните, что каждый раз, когда вы создаёте новый контроллер или новый метод, важно обратить внимание на то, как вы хотите взаимодействовать с вашей сущностью и как вы хотите управлять отображением данных в EasyAdmin.
Похожие вопросы