体系结构 编辑该页面 SonataAdminBundle主要是受Django管理项目,这确实是一个伟大的项目。更多的信息可以在找到Django项目网站。 如果你遵循的指令创建一个管理员现在有了一个页面,你应该管理类和一个管理服务。在这一章,我们将更深入讨论它是如何工作的。 管理类地图一个特定模型所提供的丰富的CRUD接口SonataAdminBundle。换句话说,用你的管理类,您可以配置所示SonataAdminBundle在每个CRUD操作相关的模型。现在你已经看到3的这些行为创建一个管理员页面:列表、过滤和形式(创建/编辑)。然而,一个完全配置管理类可以定义更多的行动: 行动 描述 列表 字段显示在列表中 过滤器 可用的字段过滤列表 形式 用于创建/编辑实体的字段 显示 用于显示实体的字段 批处理操作 操作可以在一组执行的实体(如批量删除) 的奏鸣曲\ AdminBundle \ Admin \ AbstractAdmin类提供映射模型,通过扩展它。然而,任何实现的奏鸣曲\ AdminBundle \ Admin \ AdminInterface可用于定义一个吗管理服务。为每一个管理自动服务,以下所需的依赖项注入的包: 类 描述 ConfigurationPool 配置池,所有管理类实例存储 ModelManager 处理特定的代码与持久层(例如教义ORM) 数据源 处理代码相关的奏鸣曲出口国 FormContractor 构建的形式编辑/使用Symfony创建视图ob娱乐下载FormBuilder ShowBuilder 构建显示字段 ListBuilder 构建列表字段 DatagridBuilder 构建过滤字段 请求 接收http请求 RouteBuilder 允许您添加新操作和删除路由路线为默认的行为 RouterGenerator 生成不同的url SecurityHandler 处理权限模型实例和行动 验证器 处理模型验证 翻译 生成翻译 LabelTranslatorStrategy 时使用的策略生成标签 MenuFactory 生成的菜单,根据当前的行动 请注意 这些依赖项用于一个特定的任务,简要描述。如果你想了解更多关于如何使用它们,检查相应的文档章。欧宝官网下载app在大多数情况下,你不需要担心他们的底层实现。 所有这些依赖关系有默认值时,您可以重写声明你的任何管理服务。这是通过使用一个调用的匹配setter: 1 2 3 4 5 6 7 服务:app.admin.post:类:App \ Admin \ PostAdmin电话:- - - - - -[setLabelTranslatorStrategy,[“@sonata.admin.label.strategy.underscore”]]标签:- - - - - -{名称:sonata.admin,model_class:应用实体\ \,manager_type:orm,组:“内容”,标签:“职位”} 在这里,我们声明一样管理服务的创建一个管理员章,但使用不同的标签翻译策略,取代默认的一个。请注意,sonata.admin.label.strategy.underscore提供的服务吗SonataAdminBundle,但你可以使用你自己的服务。 CRUDController包含操作可用来操纵你的模型实例,如创建、列表、编辑或删除。它使用管理类来确定其行为,比如哪些字段显示在编辑表单,或者如何构建列表视图。在CRUDController,你可以访问管理类实例通过美元的管理变量。 请注意 CRUD是一个缩写”创建、读取、更新和删除” 的CRUDController没有不同于其他任何Symfony控制器,这意味着所有通常的选择ob娱乐下载,像得到服务的依赖注入容器(DIC)。 这是特别有用如果你决定延长CRUDController添加新的行为或改变现有的行为。您可以指定使用哪个控制器时宣布的管理服务通过它作为第三个参数。例如设置控制器应用程序控制器\ \ PostAdminController: 1 2 3 4 5 6 7 服务:app.admin.post:类:App \ Admin \ PostAdmin电话:- - - - - -[setTranslationDomain,('软件'])标签:- - - - - -{名称:sonata.admin,model_class:应用实体\ \,控制器:应用程序控制器\ \ PostAdminController,manager_type:orm,组:“内容”,标签:“职位”} 当扩展CRUDController,记住,管理类已经有一组自动注入依赖项是有用的在实现几个场景。参考现有的CRUDController操作的例子如何得到最好的。 在你的重载CRUDController你也可以重载这些方法从SonataAdmin限制重复代码的数量:提前设定:从createActionpreEdit:从editActionpreDelete:从deleteActionpreShow:从showAction*preList:从listAction 这些方法被称为后检查访问权限和从数据库检索对象。您可以使用它们如果你需要在一定条件下将用户重定向到其他页面。 管理类定义哪些模型的字段可以在每个行动中定义CRUDController。所以,对于每一个行动,一个字段生成映射列表。这些列表是使用的实现FieldDescriptionCollection商店的实例的类FieldDescriptionInterface。在我们之前的回升PostAdmin类的例子: 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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 / / src / Admin / PostAdmin.php名称空间应用程序\管理;使用奏鸣曲\AdminBundle\管理\AbstractAdmin;使用奏鸣曲\AdminBundle\数据表格\ListMapper;使用奏鸣曲\AdminBundle\数据表格\DatagridMapper;使用奏鸣曲\AdminBundle\形式\FormMapper;使用奏鸣曲\AdminBundle\显示\ShowMapper;使用ob娱乐下载\桥\学说\形式\类型\EntityType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用应用程序\实体\用户;最后类PostAdmin扩展AbstractAdmin{/ /字段显示在创建/编辑表单受保护的函数configureFormFields(FormMapper美元形式):无效{美元形式- >add (“标题”TextType:类,['标签' = > '帖子标题'])- >添加('作者”,EntityType::类,['类' = >用户::类)/ /”privateNotes”场将是呈现只有如果的通过身份验证/ /用户是授予与的”ROLE_ADMIN_MODERATOR”角色- >添加('privateNotes”,零[],['角色' = > 'ROLE_ADMIN_MODERATOR/ / '])如果没有类型是指定的,SonataAdminBundle试来猜一猜它- >添加('身体)/ /有条件地添加”状态”场如果的主题已经存在/ / 'ifFalse()的是也可用来构建这类的条件- >ifTrue(美元)这- >hasSubject())- >添加('状态”)- >ifEnd()/ /……;}/ /字段来是所示在过滤器形式受保护的函数configureDatagridFilters(DatagridMapper美元数据表格):无效{美元数据表格- >add (“标题”)- >add (“作者”)- >add (“privateNotes”,零[],[“角色”= >“ROLE_ADMIN_MODERATOR”]);}/ /字段显示在列表受保护的函数configureListFields(ListMapper美元列表):无效{美元列表- >addIdentifier (“标题”)- >add (“鼻涕虫”)- >add (“作者”)- >add (“privateNotes”,零,(“角色”= >“ROLE_ADMIN_MODERATOR”]);}/ /字段显示在显示操作受保护的函数configureShowFields(ShowMapper美元显示):无效{美元显示- >add (“id”)- >add (“标题”)- >add (“鼻涕虫”)- >add (“作者”)- >add (“privateNotes”,零,(“角色”= >“ROLE_ADMIN_MODERATOR”]);}} 在内部,所提供的管理类将使用这三个函数来创建三个FieldDescriptionCollection实例: formFieldDescriptions美元包含四个(和有条件地五个)FieldDescriptionInterface实例的标题、作者、身体和privateNotes(和状态,如果条件满足) filterFieldDescriptions美元包含三个FieldDescriptionInterface标题、作者和privateNotes实例 listFieldDescriptions美元包含四个FieldDescriptionInterface标题、蛞蝓、作家和privateNotes实例 showFieldDescriptions美元,包含五个FieldDescriptionInterface实例的id、标题、蛞蝓、作者和privateNotes 实际的FieldDescription实现提供的存储抽象包,你选择在安装过程中,基于BaseFieldDescription抽象类提供的SonataAdminBundle。 每一个FieldDescription包含各种信息字段的映射。有些是独立使用,它们的行动的名字或类型只在具体行动,而另一些则使用。可以找到更多的信息BaseFieldDescription类文件。 在大多数情况下,您不需要处理FieldDescription你自己。然而,重要的是你知道它的存在,它是如何使用的,因为它的核心SonataAdminBundle。 CRUDController操作使用视图文件渲染输出。SonataAdminBundle提供了准备使用视图以及定制它们的方法。 当前的实现使用嫩枝模板引擎。所有模板都位于资源/观点包的目录。 有两个基础模板,其中之一就是最终用于每一个行动: @SonataAdmin / standard_layout.html.twig @SonataAdmin / ajax_layout.html.twig 就像名字说的,一个如果标准调用,另一个用于AJAX。 的子文件夹包括树枝文件的特定部分SonataAdminBundle: 布洛克: SonataBlockBundle块的观点。默认情况下,只有一个,它显示仪表盘上的所有映射的类 按钮: 按钮,如添加新或删除你可以看到在几个CRUD操作 杂质: 基本观点为每一个CRUD操作,为每个字段类型+几个字段视图 形式: 相关视图形式呈现 助手: 一个视图提供一个简短的描述对象,提供特定的表单字段类型的一部分SonataAdminBundle 寻呼机: 分页相关的视图文件 这些将在具体进行更详细的讨论模板节,你还会发现说明如何配置SonataAdminBundle使用你的模板,而不是默认的。 管理服务 你的管理服务定义解析Symfony加载时,处理的ob娱乐下载池类。这个类,可用sonata.admin.pool服务从DIC,处理管理类、延迟加载在需求(减少开销)和匹配他们每个人一组。它还负责处理顶层模板文件,管理面板标题和标志。 这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。