В настоящее время я храню фильтры в сеансе следующим образом:
// 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», переданный в поле выбора, должен быть управляемым. Может быть, вы забыли сохранить его в менеджере сущностей?