CakePHP 2.x CookBook 中文版 第五章 控制器 之 脚手架

脚手架

应用程序脚手架是一种允许程序定义和创建具有建立、查询、更新和删除对象的应用程序的技巧。CakePHP的脚手架还允许程序员定义对象如何与其它对象交互,建立或断开它们的连接。

脚手架用于建立一个模型和它的控制器。一旦你在控制器中设置了 $scaffold 变量,就可以运行了。

CakePHP 的脚手架非常酷。它使你可以在几分种内就完成一个基本的 CRUD 应用程序。它甚至酷到你想在产品应用中使用它。是的,我们也认为它很酷,但是请记住它 仅仅 是脚手架。

它 是快速开始项目的随时可以被抛弃的松散结构。 它不完整也不灵活,只是启动和进行的临时方案。如果你发现你想要自定义逻辑或视图,那就是拆下脚手架,开始写自己的代码的时候了。CakePHP 的 Bake 控制台(见下一节)是下一步的好选择:它生成了与当前脚手架结果(或更多功能的)相同的代码。

脚 手架是开始编写一个 web 应用程序的早期代码的好方法。早期的数据库结构随时会变更,这在设计过程的初期是完全正常的。其负面影响是:web 程序员痛恨编写一个看起来永远用不到的表单。为了减少程序员的这种无谓的劳动,CakePHP 中加入了脚手架。 脚手架分析数据库表,并且建立 1. 标准的带有添加、删除和编辑按钮的列表; 2. 标准的编辑表单; 3 与数据库的单个成员交互的标准视图。

要将脚手架添加到应用程序中,只要在控制器中加入 $scaffold 变量:

1 class CategoriesController extends AppController { 2 public $scaffold; 3 }

假设你已经建立了更多基本 Category 模型类文件(在 /app/Model/Category.php),访问http://example.com/categories 去查看你的新脚手架。

注解

在用脚手架构造的控制器中新建方法可能带来非预期的结果。例如,如果你在脚手架控制器中建立了 index() 方法,你的 index 方法将在脚手架功能渲染之前,优先被渲染。

脚 手架了解模型关系,所以如果你的 Category 模型属于(belongsTo)一个 User 模型,你将会在 Category 列表中看到关联的 User ID。虽然脚手架 “知道” 模型间的关系,你还是无法在脚手架视图中看到任何关联的记录,直到你在模型中手动添加关联代码。例如,如果 Group hasMany User,并且 User blongsTo Group,你必须在 User 和 Group 模型中手动添加如下代码。在你添加这些代码之前,视图将在 New User 表单中显示空的 Group 下拉列表框。在你加入这些代码之后,视图将在 New User 表单中显示来自 Group 表的 ID 或者名字构成的下拉列表:

1 // In Group.php 2 public $hasMany = 'User'; 3 // In User.php 4 public $belongsTo = 'Group';

如 果你想在一个 ID 内看到更多东西(例如用户的姓),你可以在模型中设置 $displayField 变量。让我们在我们的 User 类中设置 $displayField 变量,以便在脚手架中显示关联到 categories 的 用户的姓名,而不是 ID。这个特点使脚手架在许多实例中可读性更强:

1 class User extends AppModel { 2 public $displayField = 'first_name'; 3 }

使用脚手架建立一个简单的管理界面

如果你在 app/Config/core.php 中设置了允许 admin 的路由,就可以使用带有Configure::write('Routing.prefixes', array('admin')); 的脚手架建立一个管理界面。

一旦你允许了 admin 路由,只要将 admin 前缀赋给脚手架变量:

1 public $scaffold = 'admin';

就能访问 admin 脚手架动作:

http://example.com/admin/controller/index http://example.com/admin/controller/view http://example.com/admin/controller/edit http://example.com/admin/controller/add http://example.com/admin/controller/delete

这种方法能够很快的建立一个简单的后台界面。 不能在脚手架中,同时使用 admin 和 non-admin 两类方法。 在正常脚手架中,你可以用自己的方法覆盖或者替换个别方法:

1 public function admin_view($id = null) { 2 // custom code here 3 }

一旦你替换了脚手架的动作,你还需要建立这个动作的视图文件。

自定义脚手架视图

如果你想在你的脚手架视图中旋转一些不同的东西,可以建立一个模板。我们虽然不推荐使用这种技术构建应用程序,但是在原型迭代阶段这种自定义功能还是有用的。

自定义指定控制器的脚手架视图(例如 PostsController),文件位置和命名类似于:

/app/View/Posts/scaffold.index.ctp /app/View/Posts/scaffold.form.ctp /app/View/Posts/scaffold.view.ctp

如果要在所有的控制器中自定义脚手架视图,文件位置和命名类似于:

/app/View/Scaffolds/index.ctp /app/View/Scaffolds/form.ctp /app/View/Scaffolds/view.ctp

你可能感兴趣的:(CakePHP 2.x CookBook 中文版 第五章 控制器 之 脚手架)