热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CakePHP2.xCookBook中文版第五章控制器之脚手架

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

脚手架

应用程序脚手架是一种允许程序定义和创建具有建立、查询、更新和删除对象的应用程序的技巧。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


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
author-avatar
yuhao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有