列表视图中的自定义内联编辑

Custom inline edit in list view

我有一个代表实体当前状态的数据库字段。此字段与实体本身位于同一 table 中。

这些州是

0 = unchecked
1 = ok
2 = not okay

目前我用一个选择字段表示这个字段

->add('status', 'choice', 
array('choices' => ['unverified', 'OK', 'Critical'], 
'editable' => true);

为了更好的工作流程,我不想呈现选择输入字段,导致当列表视图中有数百个实体时,点击 3 次为一个实体设置状态非常慢。

相反,我想将 2 个图像显示为按钮:一个拇指向下表示 "not okay" 的按钮,一个拇指向上表示 "ok" 的按钮,如果未选中任何内容:未验证。只能检查两者之一或 none 图片

我该怎么做?有人做过类似的事情吗?也许选择字段有一个 "expanded" 选项?

这是解决您的问题的可能方法

  1. 为您的管理员设置自定义控制器 class 并让它扩展 CRUDController class。

  2. 使用类似 "updateStatusAction" 的方法扩展此自定义控制器 class,您更新实体状态的逻辑将在此处

  3. 通过覆盖 configureRoutes 方法在管理 class 中添加路由 -> 添加与您的 updateStatusAction 方法匹配的路由

  4. 为您的列表操作设置自定义模板。扩展 base_list.html.twig 并仅覆盖 javascripts 块。一般来说,除了添加用于稍后处理可点击元素的 ajax 代码外,不要更改任何内容。

  5. 在列表操作中为您想要的字段设置自定义模板(在您的示例中为 "status" 字段)并放置 2 links(或使用 buttons/images 如果你喜欢的话),并使用 path() 方法为他们提供你的自定义控制器方法 (updateStatusAction) 的路径。

现在您的列表视图的每一行都有 2 个元素 (links/images/buttons),当您单击它时,ajax 代码(在您的 list_view 模板中定义)将处理对自定义控制器的调用。您在此处的逻辑将通过从 link 获取 ID 和状态来处理状态更新。它会处理一些实体处理内容和 returns 您实体的当前状态。例如,您可以通过为您单击的 link 的背景着色来显示此当前状态。

我不知道这是否是最佳方法,但这是我会考虑的解决方案。