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 中文版 第五章 控制器 之 脚手架相关推荐
- CakePHP 2.x CookBook 中文版 第五章 控制器 之 页面控制器
页面控制器 CakePHP 提供了一个默认的控制器 PagesController.php.这是提供静态内容的简单的可靠的控制器.你在安装完看到的主页就是使用这个控制器实现的. 如果你生成了视图文件 ...
- CakePHP 2.x CookBook 中文版 第五章 控制器 之 组件
为什么80%的码农都做不了架构师?>>> 组件 组件是在多个控制器中共享的逻辑包.如果你发现自己想要在控制器间复制粘贴某些东西时,你就应该考虑将一些功能包装在一个组件中了. C ...
- CakePHP 2.x CookBook 中文版 第五章 控制器 之 请求和响应对象
请求和响应对象 在 CakePHP 2.0 中请求和响应对象是新的.在之前的版本中,这些对象是用数组来表示的,相关的方法分散在RequestHandlerComponent.Router. Dispa ...
- CakePHP 2.x CookBook 中文版 第五章 控制器
控制器 控制器是 MVC 中的 'C' .在应用了路由且正确的控制器被找到之后,控制器的动作(action)被调用.控制器将处理解释请求数据,确保正确的模型被调用,确保正确的输出或视图被渲染.控制器可 ...
- CakePHP 2.x CookBook 中文版 第七章 模型 之 保存数据
保存数据 CakePHP 会为保存模型数据制作快照.准备保存的数据使用如下基本格式传递给模型的 save() 方法: 1 Array 2 ( 3 [ModelName] => Array 4 ( ...
- CakePHP 2.x CookBook 中文版 第三章 入门(三)
为什么80%的码农都做不了架构师?>>> 路由 多数情况下,CakePHP 的默认路由都能够很好地工作.对用户体验和搜索引擎兼容敏感的程序员将注意到 CakePHP 的 URL ...
- CakePHP 2.x CookBook 中文版 第六章 视图 之二
主题 主题可以使你快捷地切换页面的外观. 要使用主题,只需在控制器中指定主题名称: 1 class ExampleController extends AppController { 2 public ...
- CakePHP 2.x CookBook 中文版 第六章 视图
视图 视图是 MVC 中的 V. 视图负责为请求生成指定的输出.常用的格式有 HTML.XML 或者 JSON,不过用户可以下载的流文件和 PDF 文件也可以由视图层提供. CakePHP 为多数常用 ...
- CakePHP 2.x CookBook 中文版 第四章 CakePHP 概述
CakePHP 概述 欢迎来到 CakePHP Cookbook,这是一本使用 CakePHP web 应用程序框架开发一块蛋糕的的手册! 本手册假定你了解 PHP,并且有面向对象编程(OOP)方面的 ...
最新文章
- 第十六届全国大学生智能车竞赛赛题规划
- LVS集群---做前端调度器搭建使用
- Docker (3)核心概念
- 设置activity不可返回
- moxy json介绍_MOXy的对象图和动态JAXB
- java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 关键字
- 【SpringClould】SpringClould eureka 单机 案例实验
- Eclipse自定义文档注释和方法注释
- java 反转二叉树 非递归_【刷算法】翻转二叉树的递归和非递归解法
- React-Native开发App,修改图标和名字
- orcadcapture安装_OrCad Capture
- Java并发编程实践-总结
- IT眼界--- 十亿美金之盛大盒子
- 超炫酷的Bat脚本入门教程
- CSDN 空间:“迷你博客”很迷人(2)
- 2022年医院三基考试肿瘤相关训练题及答案
- 【周志华机器学习】十四、概率图模型
- HCIE 面试资料-IPv6
- 海明校验码简析与举例
- 用matlab跳动的心,[ 教程 ] 用Arduino制作一个跳动的心
热门文章
- java调用打印机 兼容各种驱动版
- 玩转CSS中块元素、内联元素、内联块元素
- 【NLP】第 8 章:使用基于注意力的神经网络构建聊天机器人
- vue中app.use()做了什么?
- 移动端Web适配单位rem的坑,oppo r9手机出现错位bug
- mouseout、mouseover和mouseleave、mouseenter的区别
- 2021年茶艺师(中级)试题及解析及茶艺师(中级)模拟考试题库
- Trimble RealWorks处理点云数据(五)之点云裁剪盒模式
- ChatGPT 又整活了,从零开始设计并实现一个类似数独的游戏 Sumplete
- CSS 强制不换行,文字溢出显示省略号~