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

时间:2017-07-20 09:14:27

标签: listview sonata-admin

我有一个数据库字段,表示实体的当前状态。该字段与实体本身在同一个表中。

这些状态是

0 = unchecked
1 = ok
2 = not okay

目前我用选择字段

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

为了获得更好的工作流程,我不想渲染一个选择输入字段,因为当列表视图中有几百个实体时,它会非常慢地进行3次点击以设置一个实体的状态。

相反,我希望将2个图像显示为按钮:一个按钮,拇指向下表示“不好”,一个用拇指向上表示“确定”,如果没有检查:未经验证。只能检查其中一个图像或无图像

我该怎么做?有人做过类似的事吗?也许选择领域有一个“扩展”选项?

1 个答案:

答案 0 :(得分:0)

以下是您的问题的可能方法

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

  2. 使用" updateStatusAction"等方法扩展此自定义控制器类。您更新实体状态的逻辑在哪里

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

  4. 为列表操作设置自定义模板。扩展base_list.html.twig并仅覆盖javascripts块。一般情况下,除了添加ajax代码以便稍后处理可点击元素外,不要做任何改动。

  5. 在列表操作中设置所需字段的自定义模板(在您的示例中为" status"字段)并在其中放置2个链接(或使用按钮/图像)使用path()方法为它们提供自定义控制器方法(updateStatusAction)的路径。

  6. 现在列表视图的每一行都有2个元素(链接/图像/按钮),当您单击它时,ajax代码(在list_view模板中定义)将处理对自定义控制器的调用。您在此处的逻辑将通过从您的链接获取ID和状态来处理状态更新。它执行一些实体处理并返回实体的当前状态。您可以显示此当前状态,例如通过着色您单击的链接的背景。

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