我有一个数据库字段,表示实体的当前状态。该字段与实体本身在同一个表中。
这些状态是
0 = unchecked
1 = ok
2 = not okay
目前我用选择字段
表示此字段->add('status', 'choice',
array('choices' => ['unverified', 'OK', 'Critical'],
'editable' => true);
为了获得更好的工作流程,我不想渲染一个选择输入字段,因为当列表视图中有几百个实体时,它会非常慢地进行3次点击以设置一个实体的状态。
相反,我希望将2个图像显示为按钮:一个按钮,拇指向下表示“不好”,一个用拇指向上表示“确定”,如果没有检查:未经验证。只能检查其中一个图像或无图像
我该怎么做?有人做过类似的事吗?也许选择领域有一个“扩展”选项?
答案 0 :(得分:0)
以下是您的问题的可能方法
为您的管理类设置自定义控制器,并让它扩展CRUDController类。
使用" updateStatusAction"等方法扩展此自定义控制器类。您更新实体状态的逻辑在哪里
通过覆盖configureRoutes方法在管理类中添加路由 - >添加与您的updateStatusAction方法匹配的路由
为列表操作设置自定义模板。扩展base_list.html.twig并仅覆盖javascripts块。一般情况下,除了添加ajax代码以便稍后处理可点击元素外,不要做任何改动。
在列表操作中设置所需字段的自定义模板(在您的示例中为" status"字段)并在其中放置2个链接(或使用按钮/图像)使用path()方法为它们提供自定义控制器方法(updateStatusAction)的路径。
现在列表视图的每一行都有2个元素(链接/图像/按钮),当您单击它时,ajax代码(在list_view模板中定义)将处理对自定义控制器的调用。您在此处的逻辑将通过从您的链接获取ID和状态来处理状态更新。它执行一些实体处理并返回实体的当前状态。您可以显示此当前状态,例如通过着色您单击的链接的背景。
我不知道这是否是最好的方法,但它是我会考虑的解决方案。