我的目标是通过创建3个文件(实体yml,列表树枝和编辑树枝)和编辑另外3个现有文件(services.yml,parameters.yml和routing.yml)来获得功能齐全的CRUD管理UI。
twigs将继承一个基本模板,确保上下文(标题,侧边栏,页脚,引导样式,javascripts等),而实体yml将需要doctriine:generate:entities命令,所以我可以将实体作为一个简单的php对象。
实体:
作业:
项目:
用户(继承FOSUserBundle实体):
由于我希望我的代码是干的,我想我应该使用一个服务控制器,它可以获得一些setter Injection来满足要求。其中一个注入的对象是用于定义控制器配置的类(例如,要查询的存储库,在该存储库中使用的方法,要呈现的模板等),称为Configurator。
基于上面的实体示例,为了获得功能性的Job列表,我想我需要以下服务:
在services.yml中,将为每个实体提供上述三种服务,这些服务都具有不同的名称。示例:admin.job.repository,admin.project.repository。乍一看,它不是很干,但只要您只需复制配置文件,我的幸运猜测是我仍然实现了我的主要目的。
示例:
Repository service: admin.job.repository: class: Doctrine\ORM\EntityRepository factory_service: doctrine.orm.default_entity_manager factory_method: getRepository arguments: - AppBundle\Entity\Job
配置器服务:
admin.job.config.list: class: AppBundle\Configurator\ListControllerConfigurator arguments: - @admin.job.repository - "AdminBundle:Job:list.html.twig" calls: - [ setRepoMethod, ["findJobsForTimeline"] ] - [ setPerPage, [%knp_paginator.page_range%]] - [ setParameters, [%admin.job.list.parameters%]]
在Configurator中,我使用强制注入和setter的参数作为可选参数,在PHP中具有硬编码的默认回退。 (例如,findAll for repo,10 for perPage等。)
Controller service: admin.job.controller.list: class: AdminBundle\ListController arguments: - @admin.job.config.list calls: - [setContainer, [@service_container] ]
路由配置:
admin_Job_list: path: /{page} defaults: { _controller: admin.job.controller.list:listAction, page: 1 } requirements: page: \d+
代码功能齐全,可以按预期呈现商品详情页面。
答案 0 :(得分:2)
您可以创建自己的DI扩展程序。它基本上允许您指定自己的YML配置树以及如何从中生成服务/参数。您只能在YML中指定相关项,并且动态生成所有存储库/配置程序/控制器服务:
my_superior_crud:
Job:
fields:
- Title
- Description
- From
# ...
template: 'AdminBundle:Job:list.html.twig'
route_path: '/{page}'
# ...
# ...
这些扩展名简要提及in the docs,但您可以找到一些体面的文章(like this one或this one)。另请参阅现有扩展(twig非常容易理解)。
对于你的第二个问题,是的,它很可能是缓存生成。