脚手架

应用程序脚手架是一种允许程序定义和创建具有建立、查询、更新和删除对象的应用程序的技巧。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 中文版 第五章 控制器 之 脚手架相关推荐

  1. CakePHP 2.x CookBook 中文版 第五章 控制器 之 页面控制器

    页面控制器 CakePHP 提供了一个默认的控制器 PagesController.php.这是提供静态内容的简单的可靠的控制器.你在安装完看到的主页就是使用这个控制器实现的. 如果你生成了视图文件  ...

  2. CakePHP 2.x CookBook 中文版 第五章 控制器 之 组件

    为什么80%的码农都做不了架构师?>>>    组件 组件是在多个控制器中共享的逻辑包.如果你发现自己想要在控制器间复制粘贴某些东西时,你就应该考虑将一些功能包装在一个组件中了. C ...

  3. CakePHP 2.x CookBook 中文版 第五章 控制器 之 请求和响应对象

    请求和响应对象 在 CakePHP 2.0 中请求和响应对象是新的.在之前的版本中,这些对象是用数组来表示的,相关的方法分散在RequestHandlerComponent.Router. Dispa ...

  4. CakePHP 2.x CookBook 中文版 第五章 控制器

    控制器 控制器是 MVC 中的 'C' .在应用了路由且正确的控制器被找到之后,控制器的动作(action)被调用.控制器将处理解释请求数据,确保正确的模型被调用,确保正确的输出或视图被渲染.控制器可 ...

  5. CakePHP 2.x CookBook 中文版 第七章 模型 之 保存数据

    保存数据 CakePHP 会为保存模型数据制作快照.准备保存的数据使用如下基本格式传递给模型的 save() 方法: 1 Array 2 ( 3 [ModelName] => Array 4 ( ...

  6. CakePHP 2.x CookBook 中文版 第三章 入门(三)

    为什么80%的码农都做不了架构师?>>>    路由 多数情况下,CakePHP 的默认路由都能够很好地工作.对用户体验和搜索引擎兼容敏感的程序员将注意到 CakePHP 的 URL ...

  7. CakePHP 2.x CookBook 中文版 第六章 视图 之二

    主题 主题可以使你快捷地切换页面的外观. 要使用主题,只需在控制器中指定主题名称: 1 class ExampleController extends AppController { 2 public ...

  8. CakePHP 2.x CookBook 中文版 第六章 视图

    视图 视图是 MVC 中的 V. 视图负责为请求生成指定的输出.常用的格式有 HTML.XML 或者 JSON,不过用户可以下载的流文件和 PDF 文件也可以由视图层提供. CakePHP 为多数常用 ...

  9. CakePHP 2.x CookBook 中文版 第四章 CakePHP 概述

    CakePHP 概述 欢迎来到 CakePHP Cookbook,这是一本使用 CakePHP web 应用程序框架开发一块蛋糕的的手册! 本手册假定你了解 PHP,并且有面向对象编程(OOP)方面的 ...

最新文章

  1. 第十六届全国大学生智能车竞赛赛题规划
  2. LVS集群---做前端调度器搭建使用
  3. Docker (3)核心概念
  4. 设置activity不可返回
  5. moxy json介绍_MOXy的对象图和动态JAXB
  6. java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 关键字
  7. 【SpringClould】SpringClould eureka 单机 案例实验
  8. Eclipse自定义文档注释和方法注释
  9. java 反转二叉树 非递归_【刷算法】翻转二叉树的递归和非递归解法
  10. React-Native开发App,修改图标和名字
  11. orcadcapture安装_OrCad Capture
  12. Java并发编程实践-总结
  13. IT眼界--- 十亿美金之盛大盒子
  14. 超炫酷的Bat脚本入门教程
  15. CSDN 空间:“迷你博客”很迷人(2)
  16. 2022年医院三基考试肿瘤相关训练题及答案
  17. 【周志华机器学习】十四、概率图模型
  18. HCIE 面试资料-IPv6
  19. 海明校验码简析与举例
  20. 用matlab跳动的心,[ 教程 ] 用Arduino制作一个跳动的心

热门文章

  1. java调用打印机 兼容各种驱动版
  2. 玩转CSS中块元素、内联元素、内联块元素
  3. 【NLP】第 8 章:使用基于注意力的神经网络构建聊天机器人
  4. vue中app.use()做了什么?
  5. 移动端Web适配单位rem的坑,oppo r9手机出现错位bug
  6. mouseout、mouseover和mouseleave、mouseenter的区别
  7. 2021年茶艺师(中级)试题及解析及茶艺师(中级)模拟考试题库
  8. Trimble RealWorks处理点云数据(五)之点云裁剪盒模式
  9. ChatGPT 又整活了,从零开始设计并实现一个类似数独的游戏 Sumplete
  10. CSS 强制不换行,文字溢出显示省略号~