章14 - Admin生成器< / h1 >
语言
许多应用程序都是基于数据存储在一个数据库,并提供一个接口来访问它。ob娱乐下载Symfony的重复性任务自动创建一个模块提供数据操作功能基于推动或教义对象。如果你的对象模型是正确定义,symfony甚至可以自动生成整个网站管理。ob娱乐下载这一章描述了政府生成器的使用,这是捆绑的推动和教义插件。它依赖于一个特殊的配置文件与一个完整的语法,所以大部分本章描述了政府发电机的各种可能性。
基于模型的代码生成
在web应用程序中,数据访问操作可以归类为以下之一:
- 创造一个记录
- 检索记录
- 更新的记录(和修改的列)
- 删除的记录
这些操作是如此常见,他们有专门的缩写:CRUD。许多页面可以简化为其中之一。例如,在论坛应用程序中,最新文章列表检索操作,和回复帖子对应于一个创建操作。
基本操作和模板实现CRUD操作对于一个给定的表反复中创建web应用程序。在syob娱乐下载mfony中,模型层包含足够的信息来允许生成CRUD操作代码,以便加快早期的后端接口的一部分。
示例数据模型
在这一章,上市公司将展示symfony的功能管理发生器基于一个简单的例子,这将提醒你第八章。ob娱乐下载这是著名的博客应用程序的例子,包含两个BlogArticle
和BlogComment
类。清单赔率显示模式,见图赔率。
清单赔率——推动模式的Weblog应用程序示例
推动:blog_category: id: ~名字:varchar (255) blog_author: id: ~名字:varchar (255) blog_article: id: ~标题:varchar(255)内容:用longvarchar blog_author_id: ~ blog_category_id: ~ is_published:布尔created_at: ~ blog_comment: id: ~ blog_article_id: ~作者:varchar(255)内容:用longvarchar created_at: ~
图赔率——示例数据模型
没有特定的规则遵循模式创建期间允许代码生成。ob娱乐下载Symfony将使用模式和解释其属性来生成一个政府。
提示
本章的,你需要做的例子。你会得到一个更好的理解什么symfony与生成的代码生成和能够做什么如果你有一个清单中描ob娱乐下载述的每一步。初始化模型调用一样简单推动:构建
任务:
php syob娱乐下载mfony推动美元:构建——都无法得到确认
因为生成的管理界面依赖一些神奇的方法来缓解你的任务,创建一个__toString ()
你的每个模型类的方法。
类BlogAuthor扩展BaseBlogAuthor{公共函数__toString(){返回这个美元- >getName();}}类BlogCategory扩展BaseBlogCategory{公共函数__toString(){返回这个美元- >getName();}}类BlogArticle扩展BaseBlogArticle{公共函数__toString(){返回这个美元- >getTitle();}}
政府
ob娱乐下载Symfony可以生成模块,基于模型的类定义schema.yml
文件,为您的应用程序的后端。您可以创建一个整个站点管理只有生成管理模块。这一节将描述的例子管理模块添加到后端
应用程序。如果你的项目没有后端
现在,通过调用应用程序,创建它的骨架生成:应用程序
任务:
美元php ob娱乐下载symfony生成:应用程序的后端
管理模块解释模型的一个特殊的配置文件generator.yml
,可以改变延长所有生成的组件和模块的外观和感觉。这样的模块通常受益于模块前面章节中描述机制(布局、路由、自定义配置,半自动的,等等)。你也可以覆盖生成的行动或模板,为了自己的功能集成到生成的管理,但是generator.yml
应该照顾最常见的需求和限制使用PHP代码只有非常具体。
请注意
即使最常见的需求了generator.yml
配置文件,您还可以配置一个管理模块通过一个配置类,我们将在本章后面。
启动一个管理模块
symfoob娱乐下载ny,你在每个模型的基础上建立一个政府。模块生成基于推动或教义对象使用推动:generate-admin
任务:
/ /推动美元php symfoob娱乐下载ny推动:generate-admin端BlogArticle——模块= / /条教义php symfony学说:美元generate-admin端BlogArticle——模块=
请注意
管理模块是基于REST架构。的推动:generate-admin
任务自动添加这样的路线routing.yml
配置文件:
#应用/后端/ config /路由。yml文章:类:sfPropelRouteCollection选项:模型:BlogArticle模块:with_wildcard_routes条:真的
您还可以创建自己的路线和名称作为参数传递给任务而不是模型类名称:
php syob娱乐下载mfony推动美元:generate-admin后台文章——模块=
这叫足以创建一个文章
模块的后端
应用程序的基础上BlogArticle
类定义,可以通过以下:
http://localhost/backend_dev.php/article
生成模块的外观和感觉,见图希望药厂和14,足够复杂,使其可用的商业应用。
提示
如果您没有看到预期的外观和感觉(没有样式表和图像),这是因为你需要安装在你的资产项目通过运行插件:发布资产
任务:
美元php ob娱乐下载symfony插件:发布资产
图——希望药厂列表
的观点文章
模块的后端
应用程序
图14 -编辑
的观点文章
模块的后端
应用程序
看看生成的代码
本文的代码管理模块,应用程序/后端/模块/文章/
目录,是空的,因为它仅仅是开始。最好的方法回顾这个模块的生成的代码是使用浏览器与它交互,然后检查的内容缓存/
文件夹中。清单列出了模板生成的行动和希望药厂在缓存中找到。
清单比分-管理元素,生成缓存/后端/ ENV /模块/ autoArticle /
/ / / actions.class行动行动。php指数/ /显示表的记录列表过滤/ /更新使用的过滤器列表新/ /显示表单来创建一个新的记录创建/ /创建一个新的记录编辑/ /显示一个表单修改字段的记录/ /更新现有的记录删除/更新/删除一批记录/ /执行一个动作的选择记录batchDelete / /执行删除操作的列表/ /模板/ _assets选中记录。php _filters。php _filters_field。php _flashes。php _form。php _form_actions。php _form_field。php _form_fieldset。php _form_footer。php _form_header。php _list。php _list_actions。php _list_batch_actions。php _list_field_boolean。php _list_footer。php _list_header。php _list_td_actions。php _list_td_batch_actions。php _list_td_stacked。php _list_td_tabular。php _list_th_stacked。php _list_th_tabular。php _pagination。php editSuccess。php indexSuccess。php 欧宝平台是合法的吗newSuccess。php
这表明生成管理模块主要由三个视图,列表
,新
,编辑
。如果你看一下代码,你会发现它非常模块化的,可读和可扩展的。
介绍了generator.yml
配置文件
生成的管理模块依赖于参数中发现的generator.yml
YAML配置文件。看到新创建的默认配置管理模块,打开generator.yml
文件,位于后端/模块/文章/ config / generator.yml
在清单14中目录和复制。
清单14 -默认发电机配置后端/模块/文章/ config / generator.yml
发电机:类:sfPropelGenerator参数:model_class: BlogArticle主题:管理non_verbose_templates:真正的with_show:虚假奇异:BlogArticle复数:BlogArticles route_prefix: blog_article with_propel_route: 1 actions_base_class: sfActions配置:行动:~:~列表:~过滤器:~形式:~编辑:~新:~
这个配置是足以产生的基本管理。任何自定义添加下配置
关键。支持清单显示了一个典型的定制generator.yml
。
清单替补球员——典型完整的发电机配置
发生器:类:sfPropelGenerator参数:model_class: BlogArticle主题:管理non_verbose_templates:真正的with_show:虚假奇异:BlogArticle复数:BlogArticles route_prefix: blog_article with_propel_route: 1 actions_base_class: sfActions配置:行动:_new:{标签:“创建一个新的文章”}:author_id:{标签:文章作者}published_on:}{凭证:编辑列表:标题:文章显示:[标题、blog_author blog_category]字段:published_on: {date_format: dd / MM / yy}布局:堆参数:| % % is_published % % <强> % % =标题% % < /强> < br / > < em >的% % blog_author % % % % blog_category % % (% % created_at % %) < / em > < p > % % % % < / p > max_per_page内容:2:[标题,asc]过滤器:显示:[标题、blog_category_id blog_author_id is_published]形式:显示:“Post”:[标题、blog_category_id内容]“工作流”:[blog_author_id、is_published created_at]字段:published_at:{帮助:“出版日期”}标题:{属性:{风格:“宽度:350 px”}}新:标题:新文章编辑:编辑文章标题:“% % % %”
在这个配置中,有六个部分。其中四个代表视图(列表
,过滤器
,新
,编辑
),其中两个是“虚拟”(字段
和形式
),只存在配置的目的。
下面的章节详细解释所有的参数,可以使用这个配置文件。
发电机的配置
发电机的配置文件是非常强大的,允许你改变生成的政府在很多方面。但这种能力有一个价格:整体语法描述长时间阅读和学习,使这一章书中最长的一个。
本节将调整的例子文章
管理模块,以及评论
管理模块,基于BlogComment
类定义。创建后者通过推出推动:generate-admin
任务:
php syob娱乐下载mfony推动美元:generate-admin端BlogComment——模块=发表评论
支持图——政府发电机备忘单
字段
默认情况下,列的列表
视图中定义的列schema.yml
。的字段新
和编辑
视图中定义的一个形式与模型(BlogArticleForm
)。与generator.yml
,您可以选择显示哪些字段,哪些是隐藏的,并添加自己的领域,即使他们没有直接对应的对象模型。
字段设置
政府生成器创建一个场
的每一列schema.yml
文件。下字段
键,您可以修改每个字段显示的方式,格式化,等。例如,清单中显示的字段设置第4类定义一个自定义标签和输入类型标题
的领域,一个标签和一个工具提示内容
字段。下面的部分将详细描述每个参数是如何工作的。
清单第4 -列设置一个自定义标签
配置:字段:标题:标签:文章标题属性:{foo类:}内容:{本文标签:身体,帮助:填写身体}
除了这个默认定义的视图,您可以重写字段设置为给定的视图(列表
,过滤器
,形式
,新
,编辑
),如清单14所示。
清单14 -覆盖全局设置视图/视图
配置:字段:标题:{标签:文章标题}内容:{标签:身体}:列表字段:标题:{标签:标题}形式:字段:内容:{文章的标签:身体}
这是一个一般原则:任何设置,设置为整个模块下字段
重点可以覆盖视图相关领域。最重要的规则是:
新
和编辑
继承自形式
它继承自字段
列表
继承自字段
过滤器
继承自字段
将字段添加到显示
你定义的字段字段
部分可以显示、隐藏命令,分组以各种方式为每个视图。的显示
关键是用于这一目的。例如,安排的字段评论
模块,使用清单数的代码。
清单数——选择要显示的字段模块/评论/ config / generator.yml
配置:字段:article_id:{标签:}条created_at:{标签:发表}内容:{标签:身体}列表:显示:[id、blog_article_id内容]形式:显示:没有:[blog_article_id]编辑:[作者、内容、created_at]
的列表
然后将显示三列,如图甚佳,和新
和编辑
表单将显示四个字段,聚集在两组,如图14所示。
图第4 -自定义列的设置列表
的观点评论
模块
图14 -分组字段编辑
的观点评论
模块
所以你可以使用显示
设置在两个方面:
- 为
列表
观点:把字段在一个简单的数组中选择显示的列,它们出现的顺序。 - 为
形式
,新
,编辑
观点:使用关联数组组与组名称作为关键字段,或没有一个
一群没有名字。命令列名称的价值仍然是一个数组。小心列出所有必需的字段在表单中引用类或你可能会有一些意想不到的验证错误(参见第十章)。
自定义字段
事实上,中配置的字段generator.yml
甚至不需要对应于实际的模式中定义的列。如果相关的类提供了一个定制的getter,它可以用作一个字段列表
视图;如果有一个getter或setter,它也可以使用的编辑
视图。例如,您可以扩展BlogArticle
模型与一个getNbComments ()
方法类似于一个清单。是每天奋斗
清单,在模型中添加一个自定义的Getter是每天奋斗lib /模型/ BlogArticle.php
公共函数getNbComments(){返回这个美元- >countBlogComments();}
然后nb_comments
可以作为字段生成模块(注意getter使用camelCase版本的字段名),见清单的战绩。
清单的战绩——自定义getter管理模块,提供额外的列后端/模块/文章/ config / generator.yml
配置:列表:显示:[标题、blog_author blog_category nb_comments]
由此产生的列表
的观点文章
模块如图14-07。
图14-07——自定义字段列表
的观点文章
模块
部分字段
必须独立于代码位于模型表示。的例子getArticleLink ()
方法早期不尊重这层分离的原则,因为一些视图代码出现在模型层。事实上,如果你尝试使用这个配置,你最终将被显示为一个链接<一>
标签是默认了。实现相同的目标在一个正确的方法,你最好把自定义字段的HTML代码,输出部分。幸运的是,政府生成器允许如果你声明一个字段名使用下划线前缀。在这种情况下,generator.yml
要修改文件的清单14-11如清单14-12所示。
清单14-12 -泛音可以用作附加列——使用_
前缀
配置:列表:显示:[id、_article_link created_at]
为此,一个_article_link.php
部分必须被创建模块/评论/模板/
目录,如清单14-13所示。
清单14-13——部分的示例列表
看来,在模块/评论/模板/ _article_link.php
< ? php回声link_to(BlogComment美元- >getBlogArticle()- >getTitle(),“blog_article_edit”,BlogComment美元- >getBlogArticle())? >
注意,部分领域的局部模板可以访问当前对象通过一个变量命名的类(BlogComment美元
在本例中)。
图14-08——部分字段列表
的观点文章
模块
层分离是尊重。如果你习惯尊重层分离,最终你会更易于维护的应用程序。
如果你需要定制的参数部分,做一样正常,下场
关键。只是不包括前导下划线(_
)——在清单14-14中看到一个例子的关键。
清单14-14 -部分下可以定制字段属性字段
关键
配置:字段:article_link:{文章标签:}
如果你的部分就挤满了逻辑,你可能想要把它换成一个组件。改变_
前缀~
,你可以定义一个组件,如清单14中可以看到。
清单14日至15日,组件可以被用作附加列——使用~
前缀
配置:列表:显示:[id、~ article_link created_at]
在生成的模板,这将调用的结果articleLink
当前模块的组件。
请注意
可用于自定义和部分字段列表
,新
,编辑
和过滤器
的观点。如果你使用相同的部分几个观点,上下文(列表
,新
,编辑
,或过滤器
)存储在美元的类型
变量。
视图定制
改变新
,编辑
和列表
视图的外观,你可以会改变模板。而是因为他们是自动生成的,这样做并不是一个很好的主意。相反,您应该使用generator.yml
配置文件,因为它几乎可以做所有你需要在不牺牲模块化。
改变视图的标题
除了一套自定义的字段列表
,新
,编辑
页面可以自定义页面标题。例如,如果你想要定制的标题文章
视图,如清单14所示。由此产生的编辑
视图如图14-09所示。
清单14 - 16 -设置一个自定义标题为每个视图后端/模块/文章/ config / generator.yml
配置:列表:标题:物品清单新:标题:新文章编辑:标题:编辑文章标题% % % % % % % % id)
图14-09——自定义标题编辑
的观点文章
模块
作为默认标题使用类名,他们通常足够好——前提是你的模型使用显式的类名。
提示
的字符串值generator.yml
,一个字段的值可以通过访问包围的名称字段% %
。
增加工具提示
在列表
,新
,编辑
,过滤器
视图,您可以添加帮助描述字段显示工具提示。例如,添加一个工具提示blog_article_id
场的编辑
的观点评论
模块,添加一个帮助
财产的字段
定义如清单14 - 17。结果如图14-10。
清单14 - 17 -设置工具提示编辑
看来,在模块/评论/ config / generator.yml
配置:编辑:字段:blog_article_id:{帮助:目前涉及到本文发表评论}
图14-10——工具提示编辑
的观点评论
模块
在列表
视图,工具提示显示在列标题;在新
,编辑
,过滤器
视图,它们出现在字段标签。
修改日期格式
可以使用自定义格式显示日期一旦你使用date_format
选项,如清单14 - 18所示。
清单14 - 18 -格式化的日期列表
视图
配置::列表字段:created_at:{标签:出版,date_format: dd / MM}
需要相同的格式参数format_date ()
前一章中描述的助手。
侧边栏
管理模板i18N准备好了
管理生成模块的接口字符串(默认动作名称、页码帮助消息,…)和自定义字符串(标题,列标签,帮助信息,错误消息,…)。
接口的翻译字符串与symfony绑定对很多语言。ob娱乐下载但是你也可以添加自己的或覆盖现有通过创建一个定制的XLIFF文件在你i18n
目录sf_admin
目录(应用程序/前端/ i18n / sf_admin.XX.xml
在哪里XX
ISO语言代码)。
所有自定义字符串中自动生成的模板也国际化(即。,封装在一个调用__ ()
助手)。这意味着您可以轻松地将生成的政府通过添加翻译短语的XLIFF文件,在你应用程序/前端/ i18n /
目录中,在前一章解释。
您可以更改默认的目录用于通过指定一个自定义的字符串i18n_catalogue
参数:
发电机:类:sfPropelGenerator参数:i18n_catalogue: admin
列表视图相关的定制
的列表
视图可以显示的细节记录表格的方式,和所有的细节在一行。它还包含过滤器、分页和排序功能。这些特性可以改变配置,接下来的部分将描述。
改变布局
默认情况下,之间的超链接列表
视图和编辑
视图是由主键列。如果你回头参照图14-08,你将会看到id
列在评论列表不仅显示了每个评论的主键,但也提供了一个超链接,允许用户访问编辑
视图。
如果你喜欢超链接的细节记录出现在另一个列,列名前缀由一个等号(=
)显示
关键。14 - 19清单显示了如何删除id
从显示的字段的评论列表
并把超链接内容
字段。检查图14-11截图。
14 - 19清单——移动的超链接编辑
视图的列表
看来,在模块/评论/ config / generator.yml
配置:列表:显示:[_article_link =内容)
图14-11 -移动的链接编辑
对另一个列,列表
的观点评论
模块
默认情况下,列表
视图使用表格
布局,字段显示为列,如图所示。但是您还可以使用堆放
布局和字段合并到一个字符串扩展完整的表。如果你选择堆放
布局,必须设置参数个数
关键的模式定义列表的每一行的值。例如,清单14到20定义了一堆评论模块的列表视图布局。结果如图14-12出现。
清单14到20 -使用堆放
布局的列表
看来,在模块/评论/ config / generator.yml
配置:列表:布局:堆参数:| % % % % =内容< br / >(派作者% % % % % % created_at % % % % _article_link % %)显示:(created_at、作者、内容)
图14-12 -堆布局列表
的观点评论
模块
请注意,一个表格
布局预计以下字段的数组显示
关键,但堆放
布局使用参数个数
为每个记录生成的HTML代码的关键。然而,显示
数组中仍在使用堆放
布局,以确定哪些列标题可用于交互式排序。
筛选结果
在一个列表
视图中,您可以添加一组过滤器交互。有了这些过滤器,用户可以显示更少的结果和获得他们想要的更快。配置下的过滤器过滤器
关键,字段名称的数组。例如,添加一个过滤器blog_article_id
,作者
,created_at
字段来评论列表
显示一个视图,如清单14号至21号过滤箱如图14-13相似。
在清单的程度——设置过滤器列表
看来,在模块/评论/ config / generator.yml
配置:列表:布局:堆参数:| % % % % =内容< br / >(派作者% % % % % % created_at % % % % _article_link % %)显示:[created_at、作者、内容]过滤器:显示:[blog_article_id、作者、created_at]
图14-13 -过滤器列表
的观点评论
模块
symfony的过滤器显示依赖于模式中定义的列类型ob娱乐下载,并且可以自定义过滤形式类:
- (如文本列
作者
字段评论
模块),过滤器是一个文本输入允许基于文本的搜索(自动添加通配符)。 - 外键(如
blog_article_id
字段评论
模块),过滤器是一个记录的相关表的下拉列表。默认情况下,选择的下拉列表的返回的__toString ()
相关的类的方法。 - 日期列(如
created_at
字段评论
模块),过滤器是一对富裕的日期标签,允许选择的时间间隔。 - 对于布尔列,过滤器是一个下拉列表
真正的
,假
,真或假
选项——最后一个值重新初始化过滤器。
就像新
和编辑
视图绑定到表单类,使用默认的过滤器过滤形式类相关模型(BlogArticleFormFilter
为BlogArticle
例如模型)。过滤形式通过定义一个自定义类,您可以自定义过滤领域利用的权力形式框架和利用所有可用的过滤部件。这是定义一个一样容易类
下过滤器
输入如清单14-22所示。
清单14-22——自定义表单类用于过滤
配置:过滤器:类:BackendArticleFormFilter
提示
完全禁用过滤器,您可以指定假
随着类
使用过滤器。
您还可以使用部分过滤器来实现自定义过滤逻辑。每个部分接收形式
和HTML属性
呈现表单元素时使用。清单5显示了一个示例实现模拟默认行为,但部分。
清单5 -使用部分过滤器
/ /定义部分,在模板/ _state.php< ? php回声美元的形式(美元的名字]- >渲染(美元的属性- >getRawValue())? >/ /添加部分过滤器在过滤器列表中,在配置/ generator.yml配置:过滤器:(created_at, _state]
排序的列表
在一个列表
看来,表头是超链接,可以用来重新排序列表,如图14 - 18。这些标题的显示表格
和堆放
布局。点击这些链接,重新加载页面排序
相应参数,重新订单列表。
图14-14 -表头列表
视图是控制
您可以重用的语法直接指向列表排序根据一列:
< ? php回声link_to(评论列表按日期的,“@blog_comment ? = created_at&sort_type = desc排序”)? >
您还可以定义一个默认的排序
订单的列表
视图中直接generator.yml
文件。语法遵循清单24中的例子。
清单14 - 24 -排序字段设置默认值列表
视图
配置:列表:排序:created_at #替代语法,指定一个排序顺序:[created_at, desc)
请注意
只有一个实际列对应的字段转换为控制——而不是自定义或部分字段进行排序。
自定义分页
生成的甚至政府有效地处理大型表,因为列表
默认视图使用分页。当实际的表中的行数超过最大的数量每页行数,分页控件出现在列表的底部。例如,14 - 19图显示了列表的评论与六个测试评论表但限制每页显示5个评论。分页确保良好的性能,因为只有显示行有效地从数据库检索,和良好的可用性,因为即使表数以百万计的行可以由一个管理模块。
图14日至15日,分页控件出现在长列表
你可以定制的数量记录在每个页面显示max_per_page
参数:
配置:列表:max_per_page: 5
使用页面加入加速交付
默认情况下,发电机使用一个简单的管理doSelect ()
检索记录的列表。,但如果你使用列表中的相关对象,所需要的数据库查询数显示列表可能会迅速增加。例如,如果您想要显示的名称列表中的条评论,需要额外的查询每个帖子列表中检索相关的BlogArticle
对象。所以你可能想要迫使寻呼机的使用doSelectJoinXXX ()
方法来优化查询的数量。这可以指定peer_method
参数。
配置:列表:peer_method: doSelectJoinBlogArticle
第18章解释了加入更广泛的概念。
新和编辑视图相关的定制
在一个新
或编辑
视图中,用户可以修改每个列的值为一个新记录或给定的记录。默认情况下,使用的形式管理发电机是与模型相关的形式:BlogArticleForm
为BlogArticle
模型。您可以自定义类来定义使用类
下形式
输入如清单14-25所示。
清单14-25 -定制类使用的形式新
和编辑
的观点
配置:形式:类:BackendBlogArticleForm
使用自定义表单类允许定制的小部件用于管理和验证器生成器。默认表单类可以使用和定制的专门为前端应用程序。
您还可以自定义标签,帮助信息,直接在的布局形式generator.yml
配置文件显示在清单14日至26日。
清单14日至26日-自定义表单显示
配置:形式:显示:没有:[article_id]编辑:[作者、内容、created_at]字段:内容:{标签:身体,帮助:“减记的内容可以格式”}
处理部分字段
可用于部分字段新
和编辑
观点就像在列表
的观点。
处理外键
如果您的模式定义表之间的关系,利用生成的管理模块,提供更多的自动化控制,从而极大地简化了关系管理。
一对多关系
其它表的关系是由政府照顾的发电机。之前是由图赔率的,blog_comment
桌子是相关的blog_article
表通过blog_article_id
字段。如果你发起的模块BlogComment
类管理发电机,编辑
视图将自动显示blog_article_id
作为一个下拉列表显示可用的记录的idblog_article
表(图的战绩再次检查了一个插图)。
同样如果你需要显示的列表相关的一篇文章的评论文章
模块(n - 1)的关系。
多对多关系
ob娱乐下载Symfony还负责开箱即用的n n表关系,如图14 - 16。
图14 - 16 -多对多关系
通过定制小部件用于呈现的关系,你可以调整字段的呈现(见图14 - 17):
图14 - 17 -可用控制多对多关系
添加交互
管理模块允许用户执行CRUD操作中常见的,但你也可以添加自己的观点或限制可能的交互的交互。例如,交互定义清单14-27提供访问所有默认的CRUD操作文章
模块。
清单14-27——为每个视图定义交互后端/模块/文章/ config / generator.yml
配置:列表:标题:物品清单object_actions: _edit: ~ _delete: ~ batch_actions: _delete: ~行动:_new: ~编辑:标题:文章标题% % % %的身体动作:_delete: ~ _list: ~ _save: ~ _save_and_add: ~
在一个列表
看来,有三个动作设置:每一个可用的操作对象(object_actions
),可供选择的行动的对象(batch_actions
),和行为可用于整个页面(行动
)。清单中定义的列表交互14-27呈现在图14 - 18。每一行显示一个按钮来编辑记录,删除它,再加上一个复选框每一行删除选择的记录。在列表的底部,一个按钮允许创建一个新的记录。
图14 - 18 -交互列表
视图
在一个新
和编辑
的观点,只有一个记录编辑一次,只有一个定义(在组操作行动
)。的编辑
交互定义在清单14-27呈现在图5。这两个保存
和save_and_add
保存当前编辑的操作记录,区别在于,保存
行动显示了编辑
对当前记录在保存视图,而save_and_add
操作显示新
添加另一个记录。的save_and_add
行动是一个快捷方式,你会发现非常有用当添加许多快速连续记录。的位置删除
行动,这是与其他按钮,以便用户不点击错误。
交互下划线开头的名称(_
)告诉symfob娱乐下载ony使用默认图标和行动对应于这些交互。政府发电机理解_edit
,_delete
,_new
,_list
,_save
,_save_and_add
,_create
。
14 - 19图,交互编辑
视图
但是你也可以添加一个自定义的交互,在这种情况下,您必须指定一个名字从没有下划线,和目标的行动在当前的模块,如清单14-28所示。
清单14-28 -定义一个自定义的交互
列表:标题:物品清单object_actions: _edit: - _delete: - addcomment:{标签:添加一个评论,行动:addcomment}
每一篇文章的列表将显示添加一个评论
链接,如图14到20。点击触发调用addComment
行动在当前模块。当前对象的主键自动添加到请求参数。
图14到20 -自定义交互的列表
视图
的addComment
行动可以实现如清单14-29所示。
清单14-29 -实现自定义交互动作,行动/ actions.class.php
公共函数executeAddComment(美元的请求){美元的评论=新BlogComment();美元的评论- >setArticleId(美元的请求- >getParameter(“id”));美元的评论- >保存();这个美元- >重定向(“blog_comment_edit”,美元的评论);}
批处理操作接受一个主键数组中的所选的记录id
请求参数。
关于行动的最后几句话:如果你想完全抑制一类的行为,使用一个空列表,如清单14-30。
清单14-30 -消除所有行动列表
视图
配置:列表:标题:物品清单行动:{}
表单验证
验证是照顾的形式使用新
和编辑
自动的观点。你可以通过编辑定制相应的形式类。
限制用户操作使用凭证
对于给定的管理模块,可以根据不同的可用字段和交互的凭证登录用户(参见第六章symfony的安全特性的描述)。ob娱乐下载
发电机可以的字段凭证
参数考虑进去,似乎只有用户适当的凭证。这适用于列表
条目。此外,发电机也可以隐藏交互根据凭证。清单14-31演示了这些特性。
清单14-31——使用凭证generator.yml
配置:# id列显示只对具有管理凭据的用户列表:标题:物品清单显示:[id =标题、内容、nb_comments]字段:id:{凭证:[管理]}# addcomment仅限于具有管理凭据的用户交互动作:addcomment:{凭证:[管理]}
修改生成模块的介绍
您可以修改表示生成的模块,使其匹配任何现有图形宪章,不仅通过自己的样式表,但也通过重写默认模板。
使用一个定制的样式表
因为生成的HTML是结构化内容,你可以做任何你喜欢的。
您可以定义另一个CSS用于一个管理模块,而不是一个通过添加一个默认css
发电机参数配置,如清单14-32所示。
清单14-32 -使用自定义样式表而不是默认的一个
发电机:类:sfPropelGenerator参数:model_class: BlogArticle主题:管理non_verbose_templates:真正的with_show:虚假奇异:BlogArticle复数:BlogArticles route_prefix: blog_article with_propel_route: 1 actions_base_class: sfActions css: mystylesheet
另外,您还可以使用提供的机制模块view.yml
覆盖的风格在阅览的基础上。
创建一个自定义页眉和页脚
的列表
,新
,编辑
系统包括一个页眉和页脚部分的看法。没有部分的默认模板/
目录的管理模块,但你只需要添加一个与下列名称之一它包括自动:
_list_header。php _list_footer。php _form_header。php _form_footer。php
例如,如果您想添加一个自订标头文章/编辑
看来,创建一个文件_form_header.php
如清单14-33所示。它将工作没有进一步配置。
清单14-33——示例编辑
头部分,模块/文章/模板/ _form_header.php
< ? php如果(blog_article美元- >getNbComments()>0):? >< h2 >这篇文章< ? php回声blog_article美元- >getNbComments()? >评论。< / h2 >< ? phpendif;? >
注意,一个编辑部分总是访问当前对象通过一个变量命名的类,这一个列表
部分总是访问当前通过寻呼机美元寻呼机
变量。
自定义主题
还有其他的泛音继承了框架,可以覆盖的模块模板/
文件夹以匹配您的定制需求。
生成器模板是切成小部件,可以独立覆盖,和行动也可以改变一个接一个。
然而,如果你想覆盖的几个模块以同样的方式,您应该创建一个可重用的主题。主题是一个子集的模板和动作,可以使用一个管理模块如果在主题中指定的值generator.yml
。使用默认主题,symfony使用文件中定义ob娱乐下载sfConfig: get (sf_ob娱乐下载symfony_lib_dir) /插件/ sfPropelPlugin /数据/发电机/ sfPropelModule / admin /
。
主题文件必须位于项目树状结构,在一个数据/发电机/ sfPropelModule / [theme_name] /
目录,你可以引导一个新的主题通过复制的文件你想覆盖从默认主题(位于sfConfig: get (sf_ob娱乐下载symfony_lib_dir) /插件/ sfPropelPlugin /数据/发电机/ sfPropelModule / admin /
目录):
/ /泛音,[theme_name] /模板/模板/ _assets。php _filters。php _filters_field。php _flashes。php _form。php _form_actions。php _form_field。php _form_fieldset。php _form_footer。php _form_header。php _list。php _list_actions。php _list_batch_actions。php _list_field_boolean。php _list_footer。php _list_header。php _list_td_actions。php _list_td_batch_actions。php _list_td_stacked。php _list_td_tabular。php _list_th_stacked。php _list_th_tabular。php _pagination。php editSuccess。php indexSuccess。php 欧宝平台是合法的吗newSuccess。php / /行动,在actionsConfiguration [theme_name] /部分。php batchAction。php configuration.php createAction.php deleteAction.php editAction.php fieldsConfiguration.php filterAction.php filtersAction.php filtersConfiguration.php indexAction.php newAction.php paginationAction.php paginationConfiguration.php processFormAction.php sortingAction.php sortingConfiguration.php updateAction.php
请注意模板文件实际上是模板的模板,即PHP文件将由一种特殊的实用程序来生成模板解析基于发电机设置(这被称为编译阶段)。生成的模板还必须包含PHP代码执行期间实际浏览,所以模板的模板使用另一种语法将PHP代码未实行的第一。清单14-34显示了提取模板的默认模板。
清单14-34 -模板的模板的语法
<标题>(php吗?回声< ? php回声这个美元- >getI18NString(“edit.title”)? >吗?]< / h1 >(php include_partial吗?(' < ?php echo $ this - > getModuleName() ? > /闪光的)吗?]
在这个清单中,PHP代码引入的< ?
立即执行(编译),引入了吗(?
只有在执行执行,但模板引擎终于改变了吗(?
标记为< ?
标签,这样生成的模板是这样的:
<标题> < ? php回声__(“所有文章列表”)? > < / h1 >< ? phpinclude_partial(文章/闪光的)? >
处理模板的模板是困难的,所以最好的建议如果你想创建自己的主题是开始的管理
主题,逐步修改和测试它广泛。
提示
你也可以包一个发电机主题插件,这使得它更可重用和易于部署到多个应用程序。更多信息请参考第17章。
侧边栏
建立你自己的发电机
symfony发电机使用一组管理内部组件,自动生成的行动和模板的创建缓存,使用主题和ob娱乐下载模板的模板的解析。
这意味着symfony提供了所有ob娱乐下载的工具来构建自己的发电机,可以像现有的或者是完全不同的。生成一个模块的管理生成()
的方法sfGeneratorManager
类。例如,生成一个政府,symfony调用以下内部:ob娱乐下载
美元的经理=新sfGeneratorManager();元数据=美元的经理- >生成(“sfPropelGenerator”,美元的参数);
如果你想建立自己的发电机,你应该看的API文档欧宝官网下载appsfGeneratorManager
和sfGenerator
类,并为例sfModelGenerator
和sfPropelGenerator
类。
总结
自动生成你的后端应用程序,是一个良好定义的模式和对象模型的基础。administration-generated的定制模块主要通过配置。
的generator.yml
文件的核心编程生成的后端。它允许完整的定制内容,功能,外观和感觉的列表
,新
,编辑
的观点。可以管理字段标签、工具提示、过滤器、排序顺序,页面大小,输入类型,外交关系,自定义交互,直接在YAML和凭证,没有一行PHP代码。
如果政府发电机本身不支持你所需要的功能,部分字段和覆盖能力行动提供完整的可扩展性。此外,您可以重用你的适应政府发电机机制由于主题机制。
这项工作是GFDL许可执照。