Scaffolding(脚手架)
第1节
Cake的Scaffolding非常酷
非常酷,以至于你想在产品中使用它。现在,我们认为它酷,但是请意识到scaffolding是好,但也仅是scaffolding而已。在一个项目的初期,为了开始进行,它是一捆你真正想快点丢弃的材料。这并不意味着它十分灵活。因此,如果你发现你自己真正想定制你的逻辑和视图的话,是时候将你的scaffolding收起来,然后去写代码。
在开始着手开发一个Web应用程序的早期,Scaffolding是一种好的方法。早期的数据库schema不确定,而且一直在变,在设计过程的初期,这也是非常正常的。它有一个不足:一个web开发人员痛恨创建那些永远得不到真正使用的表单。为了降低开发人员的难度,scaffolding已经在Cake里包含。Scaffolding会分析你的数据库表,并会为之创建标准的增加(add),删除(delete),编辑(Edit)按钮,和标准的表单来进行编辑,也提供标准的视图来检查数据库的一个单项。为了在程序中增加scaffolding,在controller加入$scaffold变量:
<?php |
对Scaffolding需要注意的一件重要事情是:它期望任何以_id结尾的字段都是某个表的外键,此表的表明有一个下划线的前缀。因此,如果你有一个嵌套的目录,你很有可能会有一个parent_id列。在本发行版本中,称它为parentid可能是最好的。同时,当在你的表中(例如标题表有category_id)有一个外键,并且你已经恰当的关联到model(参看理解关联,6.2),在显示/编辑/新建的视图里,一个选择框会自动出现,此选择框包含来自外表(category)的某些行。为了选择那个外表的字段需要显示,设置外模型(Foreign model)的$displayField 字段。
<?php |
第2节
定制Scaffold 视图
如果你正在在你的scaffold视图里寻找一些不同点,你可以自己创建他们。我们仍不建议在产品中使用这项技术,但是对原型迭代来说,这样的定制可能会非常有用。
如果你想修改scaffolding视图,你需要提供你自己的:
单个Controller的Custom Scaffolding View
PostsController的Custom scaffolding view可以如下:
/app/views/posts/scaffold/index.scaffold.thtml /app/views/posts/scaffold/show.scaffold.thtml /app/views/posts/scaffold/edit.scaffold.thtml /app/views/posts/scaffold/new.scaffold.thtml
|
整个应用程序的Custom Scaffolding View
所有controller的Custom scaffolding view可以如下:
/app/views/scaffold/index.scaffold.thtml /app/views/scaffold/show.scaffold.thtml /app/views/scaffold/edit.scaffold.thtml /app/views/scaffold/new.scaffold.thtml
|
如果你发现自己此时想修改controller逻辑,那么是时候从你的应用程序中去掉scaffolding,并开始构建它。
你可能发现一个有用的特性,这个特性就是Cake的代码生成器:Bake。Bake允许你生成一个版本的scaffold代码,你可以将代码移走,以便你可以修改和定制应用程序需要的(功能)。