没有合适的资源?快使用搜索试试~ 我知道了~
第14章 生成器1
需积分: 0 0 下载量 111 浏览量
2022-08-03
23:42:31
上传
评论
收藏 517KB PDF 举报
温馨提示
试读
38页
第 14 章 - 生成器很多程序基于存储在数据库里的数据并提供访问这些数据的界面。symfony 能够自动完成根据 Propel 对象生成数据处理模块这样的重复
资源详情
资源评论
资源推荐
第 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 生成的代码以及它们的作
用。所以建议你跟我们一起从刚才的这个例子做起,在一个数据库里面建立
blog_article 和 blog_comment 两个表,输入一些测试用的数据。
脚手架
脚手架在开发初期很有用。只要一条简单的命令,symfony 就能根据某个表的
信息建立整个模块。
生成脚手架
根据 Article 模型类生成 article 模块,输入下面的命令:
> symfony propel-generate-crud myapp article Article
symfony 会读取 schema.yml 里 Article 类的定义并根据这些定义在
myapp/modules/article/目录建立一些模板和动作(action)。
生成的模块包括三个视图。list 视图,它是默认的视图,在浏览
http://localhost/myapp_dev.php/article_dev.php/article 的时候会显示
blog_article 表的记录,如图 14-2 所示。
图 14-2 - article 模块的 list 视图
点击文章 id 会显示 show 视图。这个页面显示的是这个记录的详细情况,如图
14-3。
图 14-3 - article 模块的 show 视图
点击 edit 链接可以修改这篇文章,或者在 list 视图点击 create 链接新增一篇
文章,会显示 edit 视图,如图 14-4 所示。
用这个模块,你可以新增文章,也可以修改或者删除已有的文章。生成的代码
是未来开发的良好基础。例 14-2 列出了生成的新模块的动作(action)和模板
代码
图 14-4 - article 模块的 edit 视图
例 14-2 - 生成的 CRUD 元素,在 myapp/modules/article/目录下
// 在 actions/actions.class.php 文件里
index // 转到下面的 list 动作
list // 显示表里面的所有记录
show // 显示一个记录的所有字段
edit // 显示一个修改一条记录的表单
update // 被 edit 动作调用的动作
delete // 删除一条记录
create // 新增一条记录
// 在 templates/ 目录下
editSuccess.php // 记录修改表单(edit 视图)
listSuccess.php // 显示所有的记录 (list 视图)
showSuccess.php // 记录详情 (show 视图)
这些动作和模板的逻辑很简单明白,把它们列出来就能说明一切。 例 14-3 里
是一部分生成的动作类的代码。
例 14-3 - 生成的动作类, 位于
myapp/modules/article/actions/actions.class.php
class articleActions extends sfActions
{
public function executeIndex()
{
return $this->forward('article', 'list');
}
public function executeList()
{
$this->articles = ArticlePeer::doSelect(new Criteria());
}
public function executeShow()
{
$this->article = ArticlePeer::retrieveByPk($this-
>getRequestParameter('id'));
$this->forward404Unless($this->article);
}
...
按照你的需求修改生成的代码,重复对所有需要交互的表进行 CRUD 生成,这样
你就有了一个可以工作的基本的应用程序了。 生成脚手架大大加快了开发速度,
让 symfony 来为你干脏活,你只要专注与界面还有细节。
初始化脚手架
剩余37页未读,继续阅读
点墨楼
- 粉丝: 34
- 资源: 279
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0