批处理操作 编辑该页面 删除行动你可以一次删除多个条目。 configureBatchActions ()在你的管理类来定义新通过将它们添加到批处理操作美元的行为数组中。每个键代表一批行动,可能含有这些设置: 标签所使用的名称:向用户提供这个选项时,应该通过翻译(默认值:生成的标签是通过labelTranslatorStrategy) translation_domain:域用来翻译的关键。(默认值是翻译领域的管理) ask_confirmation:默认值为true,意味着用户将被要求确认处理批处理行动之前 模板:覆盖ask_confirmation模板的具体行动。这允许您为每个批处理操作指定不同的模板,需要确认。 例如,可以定义一个新的合并行动需要大量的源项,并将其合并到一个目标项目。它应该只可以当两个条件得到满足: 这个管理的编辑和删除路线存在(没有被禁用) 登录管理员编辑和删除的权限: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 受保护的函数configureBatchActions(数组美元行动):数组{如果(美元这- >hasRoute (“编辑”)& &美元这- >hasAccess (“编辑”)& &美元这- >hasRoute (“删除”)& &美元这- >hasAccess (“删除”)){美元行动(“合并”]= [“ask_confirmation”= >真正的,“控制器”= >“app.controller.merge:: batchMergeAction”,/ /或“App /控制器/ MergeController:: batchMergeAction控制器基础上如何申报服务。];}返回美元行动;} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 / / src /控制器/ MergeController.php名称空间应用程序\控制器;使用奏鸣曲\AdminBundle\管理\AdminInterface;使用奏鸣曲\AdminBundle\数据表格\ProxyQueryInterface;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\RedirectResponse;使用ob娱乐下载\组件\HttpFoundation\请求;类MergeController扩展AbstractController{公共函数batchMergeAction(ProxyQueryInterface美元查询,AdminInterface美元管理):RedirectResponse{美元管理- >checkAccess (“编辑”);美元管理- >checkAccess (“删除”);美元modelManager=美元管理- >getModelManager ();美元目标=美元modelManager- >找到(美元管理- >getClass (),美元请求- >get (“targetId”));如果(美元目标= = =零){美元这- >addFlash (“sonata_flash_info”,“flash_batch_merge_no_target”);返回新RedirectResponse (美元管理- >generateUrl (“列表”,(“过滤”= >美元管理- >getFilterParameters ())));}美元selectedModels=美元查询- >execute ();/ /合并工作试一试{foreach(美元selectedModels作为美元selectedModel){美元modelManager- >删除(美元selectedModel);}美元这- >addFlash (“sonata_flash_success”,“flash_batch_merge_success”);}抓(\异常美元e){美元这- >addFlash (“sonata_flash_error”,“flash_batch_merge_error”);}最后{返回新RedirectResponse (美元管理- >generateUrl (“列表”,(“过滤”= >美元管理- >getFilterParameters ())));}}/ /……} batchAction < MyAction >将处理你的批处理执行CRUDController类。所选对象传递给这个方法通过查询参数可用于检索它们。如果由于某种原因有必要执行批处理操作没有默认选择方法(例如你定义的另一种方式,在模板级别,选择模型粒度较低),通过查询零: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 / / src /控制器/ CRUDController.php名称空间应用程序\控制器;使用奏鸣曲\AdminBundle\控制器\CRUDController作为BaseController;使用奏鸣曲\AdminBundle\数据表格\ProxyQueryInterface;使用ob娱乐下载\组件\HttpFoundation\RedirectResponse;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException;类CRUDController扩展BaseController{/ * * *@paramProxyQueryInterface selectedModelQuery美元*@param请求美元请求* *@returnRedirectResponse * /公共函数batchActionMerge(ProxyQueryInterface美元selectedModelQuery,请求美元请求){美元这- >管理- >checkAccess (“编辑”);美元这- >管理- >checkAccess (“删除”);美元modelManager=美元这- >管理- >getModelManager ();美元目标=美元modelManager- >找到(美元这- >管理- >getClass (),美元请求- >get (“targetId”));如果(美元目标= = =零){美元这- >addFlash (“sonata_flash_info”,“flash_batch_merge_no_target”);返回新RedirectResponse (美元这- >管理- >generateUrl (“列表”,(“过滤”= >美元这- >管理- >getFilterParameters ())));}美元selectedModels=美元selectedModelQuery- >execute ();/ /合并工作试一试{foreach(美元selectedModels作为美元selectedModel){美元modelManager- >删除(美元selectedModel);}美元modelManager- >更新(美元selectedModel);}抓(\异常美元e){美元这- >addFlash (“sonata_flash_error”,“flash_batch_merge_error”);返回新RedirectResponse (美元这- >管理- >generateUrl (“列表”,(“过滤”= >美元这- >管理- >getFilterParameters ())));}美元这- >addFlash (“sonata_flash_success”,“flash_batch_merge_success”);返回新RedirectResponse (美元这- >管理- >generateUrl (“列表”,(“过滤”= >美元这- >管理- >getFilterParameters ())));}/ /……} 请注意 你自己可以检查如何声明CRUDController类体系结构部分。 list__batch.html.twig)和添加一个单选按钮选择目标对象。 1 2 3 4 5 6 7 8 9 10 11 12 {#模板/包/ SonataAdminBundle / CRUD / list__batch.html。树枝#}{#看到@SonataAdmin / CRUD / list__batch.html。嫩枝为当前默认模板#}{%扩展get_admin_template (base_list_field, admin.code) %}{%块场%}<输入类型=“复选框”的名字=“idx []”价值=”{{admin.id(对象)}}”/ >{#新单选按钮#}<输入类型=“广播”的名字=“targetId”价值=”{{admin.id(对象)}}”/ >{%endblock%} batchAction < MyAction > IsRelevant方法(如。batchActionMergeIsRelevant)在你的CRUDController类。这之前检查执行用户要求确认,以确保确认有东西。 这种方法可以返回三个不同的值: 真正的:批处理操作是相关的和可以应用。 假:同上,默认“操作中止,没有模式选择”通知消息。 字符串:批处理操作是不相关的当前请求参数(例如目标缺少一个合并行动)。返回的字符串是一个信息显示给用户: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 / / src /控制器/ CRUDController.php名称空间应用程序\控制器;使用奏鸣曲\AdminBundle\控制器\CRUDController作为BaseController;使用ob娱乐下载\组件\HttpFoundation\请求;类CRUDController扩展BaseController{公共函数batchActionMergeIsRelevant(数组美元selectedIds,美元allEntitiesSelected,请求美元请求){/ /这里有访问所有POST参数,如果你使用一些自定义的/ / POST参数即使在确认页面。美元parameterBag=美元请求- >请求;/ /检查目标选择如果(!美元parameterBag- >有(“targetId”)){返回“flash_batch_merge_no_target”;}美元targetId=美元parameterBag- >get (“targetId”);/ /如果选择所有实体,一个合并可以做到的如果(美元allEntitiesSelected){返回真正的;}/ /过滤的目标选择模型美元selectedIds= array_filter (美元selectedIds,函数(美元selectedId)使用(美元targetId){返回美元selectedId= = !美元targetId;});/ /如果至少有一个但不是目标模型被选中时,合并可以做到的。返回计数(美元selectedIds)>0;}} preBatchAction方法执行之前做批处理操作。这种方法的主要目的是改变查询或选择id的列表: 1 2 3 4 5 6 7 8 9 10 公共函数preBatchAction(美元actionName,ProxyQueryInterface美元查询、数组和美元idxbool,美元allElements):无效{/ /改变查询或idx数组美元喷火=美元查询- >getParameter (“foo”)- >getValue ();/ /使用foo对象/ /……美元查询- >setParameter (“foo”,美元酒吧);}