将会话中的筛选器存储在LexikFormFilterBundle中



当前我在会话中存储过滤器,如下所示:

// Filter action
if ('filter' == $request->get('filter_action')) {
// 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是一个更舒适的解决方案。

如果我从会话中删除了负责合并实体的行,那么我会得到错误:

类型为"的实体;应用程序\实体\类别"必须管理传递到选项字段的。也许你忘记了在实体经理中坚持它?

merge用于重新附加分离的实体。persist告诉条令,实体将被保存,因此它实现了重新附着。通过这种方式,您可以实现对实体的管理,正如错误消息所示。

您可以在此处阅读更多信息:https://symfony.com/doc/current/doctrine.html#persisting-对象到数据库

最新更新