热门标签 | 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


推荐阅读
  • 基于函数实现的进制转换工具
    本文介绍了一种利用函数实现不同进制数(二进制、八进制、十进制)之间转换的方法。包括了程序的运行效果展示、所使用的主要函数解析、以及如何验证用户输入的合法性。整个项目仅使用了两个全局变量来存储用户的选项和输入的数值。 ... [详细]
  • CSGO
    CSGOTimeLimit:40002000MS(JavaOthers)MemoryLimit:524288524288K(JavaOthers)ProblemDescriptio ... [详细]
  • 深入解析PHP Xdebug的安装与应用
    本文详细介绍了PHP Xdebug的安装步骤及其在PHP开发中的重要作用。Xdebug作为一款强大的调试工具,不仅能够帮助开发者追踪代码执行过程,还能有效提升代码质量和系统性能。 ... [详细]
  • CGroups: 资源管理和控制
    CGroups(Control Groups)是Linux内核提供的一个功能,旨在限制、记录和隔离进程组使用的物理资源,如CPU、内存和I/O等。它通过精细的资源管理,支持现代容器技术如Docker的资源限制需求。 ... [详细]
  • Kafka 示例项目中 Log4j 的配置与调试
    本文详细介绍了如何在 Kafka 源码中的示例项目配置 Log4j,以确保能够正确记录日志信息,帮助开发者更好地理解和调试代码。 ... [详细]
  • Django框架的使用教程mysql数据库[三]
    Django的数据库1.在Django_test下的view.py里面model定义模型fromdjango.dbimportmodels#Createyourmodelshere ... [详细]
  • 致信息安全爱好者的成长指南
    本文旨在为信息安全爱好者提供一份详尽的成长指南,涵盖从学习心态调整到具体技能提升的各个方面。 ... [详细]
  • 使用Adobe Illustrator打造独特的家族徽章:牡鹿图腾设计教程
    本文详细介绍了一种基于《权力的游戏》灵感,运用Adobe Illustrator创作独特家族图腾——牡鹿徽章的方法。本教程不仅展示了具体的步骤,还提供了多种技巧,帮助读者创作出既具个人特色又符合设计原则的作品。 ... [详细]
  • 深入理解FastDFS
    FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ... [详细]
  • 解析程序员与软件工程师的角色差异
    本文深入探讨了程序员与软件工程师之间的主要区别,包括它们的职业定位、技能要求以及工作内容等方面的不同,旨在帮助读者更好地理解这两个角色的特点。 ... [详细]
  • Android json字符串转Map
    Androidjson字符串转Map,Go语言社区,Golang程序员人脉社 ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • 解决CSS因MIME类型不匹配导致的加载失败问题
    本文详细介绍了在Web开发过程中,遇到CSS文件因MIME类型不匹配而无法正确加载的问题及其解决方案,适合前端开发者阅读。 ... [详细]
  • 深入浅出:Java面向对象编程
    本文详细介绍了Java语言的核心特性——面向对象编程。探讨了Java的基本概念、平台无关性、丰富的内置类库及安全性,同时深入解析了类加载器、垃圾回收机制以及基本数据类型和其包装类。 ... [详细]
  • 本文探讨了如何利用脚本文件高效管理Oracle数据库,包括脚本文件的创建、编辑及运行方法,旨在为数据库管理人员提供实用指导。 ... [详细]
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社区 版权所有