DQL фильтр в запросе с EasyAdminBundle - PullRequest
0 голосов
/ 11 октября 2018

У меня есть доктрина Page со свойством category.Я использую EasyAdminBundle для изменения страниц.Есть 4 фиксированных категории, и я хочу отдельный вид списка для каждой категории.В строке меню каждая категория должна отображаться отдельно.

Я знаю, что могу этого добиться, создав отдельные сущности с одинаковым классом доктрины и назначив им каждый отдельный фильтр DQL, например:

Конфигурация YAML:

easy_admin:
    design:
        menu:
        -   label: "Pages"
            children:
            -   entity: PageCategory1
            -   entity: PageCategory2
            -   entity: PageCategory3
            -   entity: PageCategory4

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

Конфигурация YAML:

easy_admin:
    design:
        menu:
        -   label: "Pages"
            children:
            -   entity: Page
                label: 'Category 1'
                dql_filter: "entity.category = 'category1'"
            -   entity: Page
                label: 'Category 2'
                dql_filter: "entity.category = 'category2'"
            -   entity: Page
                label: 'Category 3'
                dql_filter: "entity.category = 'category3'"
            -   entity: Page
                label: 'Category 4'
                dql_filter: "entity.category = 'category4'"

Сейчас я попробовал следующее.Это работает в некоторой степени, но когда я начинаю поиск в представлении списка, например, фильтр больше не работает.Я также думаю, что это не самое элегантное решение.

Конфигурация YAML:

easy_admin:
    design:
        menu:
        -   label: "Pages"
            children:
            -   entity: Page
                label: 'Category 1'
                params:
                -    dql_filter: "entity.category = 'category1'"
            -   entity: Page
                label: 'Category 2'
                params:
                -    dql_filter: "entity.category = 'category2'"
            -   entity: Page
                label: 'Category 3'
                params:
                -    dql_filter: "entity.category = 'category3'"
            -   entity: Page
                label: 'Category 4'
                params:
                -    dql_filter: "entity.category = 'category4'"

Переопределение метода listAction:

protected function listAction()
{
    $this->dispatch(EasyAdminEvents::PRE_LIST);

    $fields = $this->entity['list']['fields'];

    /* START CUSTOM PART */
    // Check if there is a DQL filter given with the request, otherwise get the DQL filter from the entity itself
    $dqlFilter = ($this->request->query->get('0')['dql_filter'] ? $this->request->query->get('0')['dql_filter'] : $this->entity['list']['dql_filter']);
    $paginator = $this->findAll($this->entity['class'], $this->request->query->get('page', 1), $this->entity['list']['max_results'], $this->request->query->get('sortField'), $this->request->query->get('sortDirection'), $dqlFilter);
    /* END CUSTOM PART */

    $this->dispatch(EasyAdminEvents::POST_LIST, array('paginator' => $paginator));

    $parameters = array(
        'paginator' => $paginator,
        'fields' => $fields,
        'delete_form_template' => $this->createDeleteForm($this->entity['name'], '__id__')->createView(),
    );

    return $this->executeDynamicMethod('render<EntityName>Template', array('list', $this->entity['templates']['list'], $parameters));
}

Я вижу, что EsayAdminExtensionBundle имеет фильтры, которые могут быть добавлены к URL, но я не знаю, как это сделать из конфигурации меню.Кто-нибудь знает возможное решение этого?Спасибо!

1 Ответ

0 голосов
/ 13 октября 2018

К сожалению, нет решения.Хавьер Эгилуз ответил мне на Github:

Боюсь, это один из недостатков использования YAML для конфигурации.Нелегко повторно использовать содержимое / конф. Для таких вещей.Мы не планируем добавлять поддержку этой функции.Хотя это решение далеко от идеала, я рекомендую вам скопировать + вставить конфигурацию для четырех категорий.Прости!

https://github.com/EasyCorp/EasyAdminBundle/issues/2386

...