itf14条码生成器 第14章生成器
itf14条码生成器 第14章生成器
第 14 章 - 生成器
很多程序基于存储在数据库里的数据并提供访问这些数据的界面。symfony能够自动完成根据Propel对象生成数据处理模块这样的重复任务。 如果模型定义的好,symfony甚至可以自动生成整个网站后台。 本章将会介绍symfony的两种生成器:脚手架生成器和管理生成器。其中后者依赖于一个特别的语法复杂的配置文件,所以这一章的大部分篇幅会用来介绍管理生成器的各种用法。基于模型生成代码
在web应用程序里,数据访问操作可以归结为以下几类:
?
?
?
?新增(Creation)一条记录取得(Retrieval)记录更新(Update)一条记录(并且修改它的字段)删除(Deletion)一条记录
这些操作很常见,它们有一个专门的缩写:CRUD。很多页面都可以简化成其中之一。例如,在论坛程序里,最新帖子列表就是一个取得记录的过程,回帖子是一个新增过程。
针对一个表的CRUD操作制作基本的动作(action)和模板在web程序里会经常出现。在symfony里,模型层包含的信息足够生成CRUD操作代码的需要,这样可以加快早期的后台界面开发。
所有的基于模型的代码生成任务都会建立整个模块,只要通过类似下面的一行symfony命令就可以完成:
> symfony
代码生成任务包括propel-init-crud、propel-generate-crud和propel-init-admin。
脚手架与管理界面
开发应用程序的过程中,代码生成有两种不同的用途:
?脚手架是给定表CRUD操作所需的基本结构(动作与模板)。它的代码是最小化的,因为它需要成为后续开发的指导。它是起步的基础,经过修改后才能满足你的逻辑与表现的需求。脚手架大多用在开发阶段,用来提供数据库的web访问界面,建立一个原型,或者以此为基础制作一个与某个表相关的模块。
?管理界面是专门用于数据处理的界面,多用于后台管理。管理界面与脚手架的不同点是它的代码不是用来手动修改的。它们可以被定制,扩展或者通过配置或继承进行装配。它们的外观很重要,它需要有排序,分页,还有过滤功能。管理界面可以作为软件的成品交给客户。
symfony命令行用crud代表脚手架,用admin代表管理界面。
初始化或生成代码
symfony有两种生成代码的方式:通过继承(init)或者代码生成(generate)。你可以初始化一个模块,也就是建立空的继承自框架的类。这样可以避免动作(action)和模板的PHP代码被修改。如果你的数据结构还没最终确定或者你只需要一个快速的数据库接口来操作数据,这个功能很有用。运行时执行的代码不在你的应用程序里,而是在缓存里。这类生成任务的命令行任务名以 propel-init-开头。
初始化的动作(action)代码是空的。例如,一个初始化的article模块的代码可能会是这样:
class articleActions extends autoarticleActions
{
}
另一方面,你也可以生成动作(action)和模板的代码,这样可以修改它们。这样生成的模块不依赖于框架,并且不能被配置文件修改。这种生成任务的命令行任务名以propel-generate-开头。
由于脚手架是后续开发的基础,所以最好生成一个脚手架。另外,管理界面需要能够通过配置文件方便的修改,模型变化的情况下也要能够使用。所以管理界面只能够初始化。
数据模型的例子
本章的所有演示symfony生成器功能的例子都基于这个简单的例子,这个例子可能会让你回想起第8章。这就是那个有名的博客应用程序,包含Article和Comment两个类。例14-1是它的设计(schema)。
例 14-1 - 博客应用程序的schema.yml文件
propel:
blog_article:
_attributes: { phpName: Article }
id:
title: varchar(255)
content: longvarchar
created_at:
blog_comment:
_attributes: { phpName: Comment }
id:
article_id:
author: varchar(255)
content: longvarchar
created_at:
图
14-1 - 例子的数据模型
代码生成并不会对设计(schema)的建立有什么特别的要求。symfony会使用已有的设计(schema),解释它的属性并生成脚手架或管理界面。
TIP 学习本章要达到最好的效果,你需要跟着这些例子去做。如果你按照这些例子里的每一个步骤去做,你会更好的理解symfony生