Хранить фильтры в сеансе в LexikFormFilterBundle - PullRequest
0 голосов
/ 30 марта 2020

В настоящее время я храню фильтры в сеансе следующим образом:

 // Filter action
        if ($request->get('filter_action') == 'filter') {
            // Bind values from the request
            $filterForm->handleRequest($request);

            if ($filterForm->isValid()) {
                // Build the query from the given form object
                $filterUpdater->addFilterConditions($filterForm, $queryBuilder);
                // Save filter to session
                $filterData = $filterForm->getData();
                $session->set(sprintf('%sControllerFilter', $this->filterName), $filterData);
                $session->set(sprintf('%sControllerFilterPage', $this->filterName), 1);
            }
        } else {
            // Get filter from session
            if ($session->has(sprintf('%sControllerFilter', $this->filterName))) {
                $filterData = $session->get(sprintf('%sControllerFilter', $this->filterName));
                foreach ($filterData as $key => $filter) {
                    if (is_object($filter)) {
                        $filterData[$key] = $em->merge($filter);
                    }
                }
                $filterForm = $this->createFilterForm($filterData, $this->getSiteFromSession($request));
                $filterUpdater->addFilterConditions($filterForm, $queryBuilder);
            }
        }

Но из-за устаревания EntityManager::merge() мне нужно изменить это решение. Есть идеи как это сделать? Решение состоит в том, чтобы пропустить использование EntityFilterType и использовать ChoiceFilterType, но я не хочу, потому что EntityFilterType является гораздо более удобным решением.

Если я удаляю строки, которые отвечают за слияние сущностей из сеанс, затем я получаю сообщение об ошибке:

Объект типа «App \ Entity \ Category», переданный в поле выбора, должен быть управляемым. Может быть, вы забыли сохранить его в менеджере сущностей?

1 Ответ

1 голос
/ 30 марта 2020

merge используется для повторного присоединения отдельного объекта. persist говорит Doctrine, что сущность должна быть сохранена, поэтому она достигает повторного присоединения. Таким образом, вы добьетесь того, что объектом будет управлять, как подсказывает сообщение об ошибке.

Подробнее можно прочитать здесь: https://symfony.com/doc/current/doctrine.html#persisting -объекты в базу данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...