symfony - 在 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
这是一个更舒适的解决方案。
如果我从会话中删除负责合并实体的行,则会收到错误消息:
必须管理传递给选择字段的“App\Entity\Category”类型的实体。也许您忘记将其保留在实体管理器中?
解决方案
merge
用于重新附加分离的实体。persist
告诉 Doctrine 该实体将被保存,因此它实现了重新连接。通过这种方式,您可以实现对实体的管理,如错误消息所示。
您可以在这里阅读更多内容:https ://symfony.com/doc/current/doctrine.html#persisting-objects-to-the-database
推荐阅读
- elasticsearch - 您可以在 Elasticsearch 的自动创建索引中将字段设置为 not_analyzed 吗?
- spring - 使用 Java 的 Spring Boot 中的全栈开发究竟是什么?
- javascript - 这个关键字随叫随到
- android - 有没有办法将正在运行代码的当前应用程序带到前台 Xamarin Forms - Android
- ios - iOS:在不干扰 LLDB 的情况下设置 Mach 异常处理程序
- node.js - 加载资源失败:net::ERR_CONNECTION_REFUSED socket.io
- c# - 图像检测优化
- command - 我正在尝试使用命令提示符 win 10 关闭一个特定的 chrome 选项卡
- javascript - txt 文件中的数字未排序
- static - 如果 gstreamer-1.16 构建为静态库,则 gst-inspect-1.0 失败并显示“g_once_init_leave: assertion 'result != 0' failed”