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

CakePHP学习笔记-Part1CakePHP基本原则

component(组件),controller公用的业务逻辑,比如说发邮件,可以调用EmailComponent来发送邮件,而不需要在单个的controller里面添加发邮件的代码。

1.       CakePHP的基本结构

 

1.1         component(组件),controller公用的业务逻辑,比如说发邮件,可以调用EmailComponent来发送邮件,而不需要在单个的controller里面添加发邮件的代码。

1.2         Helper(助手类),与组件类似,主要用来帮助展示视图,比如用AjaxHelper来发Ajax请求,用HtmlHelper创建页面表单等。

1.3         Behavior(行为),是用来在模型之间加入共享功能。比如说系统使用LDAP来存储用户信息,那可以给user添加操作树形结构的behaviorCakePHP内置有TranslateTree等行为。行为是通过模块类变量$actsAs来追加到模块里的。

1.4         路由 (Route),尽管不是类或文件,但它在 CakePHP 中扮演请求回应的角色。路由定义 CakePHP 如何对映 URL 与控制器动作之间的关系。默认的路由行为将 "/controller/action/var1/var2" 对映至 Controller::action($var1, $var2),但是你可以使用路由来自定 URL 以及它们如何对应你的应用。

 

2.       CakePHP请求图

展示了一个典型的CakePHP请求的流程图

3.       CakePHP目录结构

在你下载并且解压缩之后,在CakePHP目录下会看到这样一些文件和目录:

app

cake

vendors

.htaccess

index.php

README

 

你可以看到有三个主要的目录:

app目录将是你施展你的魔术之处:这是你放置你应用程式的地方。

cake资料夹是CakePHP核心模块,一般不要修改这个资料夹里的所有档案。

vendors资料夹是可以放置需要使用在你应用程式的第三方PHP函式库

 

CakePHPapp目录将是开发应用程式时最常使用的一个。就让我们来更仔细的看app资料夹里面有些什么

config

拥有一些CakePHP使用的设定。资料库连结的详细资料、启动组态、核心设定档案及许多应该被储存在这里的档案。

controllers

包含你的应用程式控制器及它们的组件。

locale

储存用来国际化的字元档案。

models

包含你的应用程式模型、行为和资料来源。

plugins

包含插件包裹。

tmp

这是用来储存CakePHP暂存资料的。实际上储存的资料是看你如何设定CakePHP,但这个资料夹通常用来储存模型描述、记录档和会谈资讯。

vendors

所有的第三方类别或函式库应该被放置在这个资料夹。可以简单的以App::import('vendor', 'name')使用它们。也许你会觉得多馀或困惑于此处有vendors而上一层目录内也有vendors资料夹,这其中的差异是当我们讨论到管理多应用程式和较为复杂的系统设定时,可以使用不同的配置。

views

展示层的档案被放置在此处:元素、错误页面、小帮手、布局和视图档案。

webroot

在产品安装模式下,这个资料夹应该是应用程式的根目录。包含了样式表、影像和Javascript档案可放置的资料夹。

 

 

 

4.       文件及类命名规则(重要

 

4.1 数据库表名为复数,所有的表必须有一个名为id的字段,并且id字段为主键(CakePHP识别数据更新还是插入依赖此ID,还有表之间的关联也依赖此ID)。外键在hasManybelongsTohasOne关系中随着相关模型在之后加上_id是被认可的。所以如果一个糕点师有许多饼乾,饼乾这个数据表透过baker_id外键将参考到糕点师这个数据表。多个字母的表名使用下划线分割并加上id。如category_type_id category_types的外键。结合数据表,使用hasAndBelongsToMany (HABTM)关系在模型之间的命名方式必需依照字母先后次序(apples_zebras而不是zebras_apples). CakePHP是不支持复合主键的,需要添加一个额外的id作为单一主键。

 

 

4.2 所有的model文件到放在app/models目录下面。并且文件名为数据表名的单数形式,注意文件名全是小写,如果有多个用下划线分割。类名也是单数,且类名首字母大写,如果多个则按照驼峰式命名。所有的models必须继承AppModel或者其子类。AppModel继承自Model,在Model类中定义了数据操作。在Model中一般会定义一个name的变量,其值为类名。这不是必须的,CakePHP会自动配置,不过手动添加会比较好,在应用的时候会比较明确。

 

4.3 所有的controller文件到放在app/controllers目录下面。并且文件名为数据表加下划线加controller,注意文件名全是小写,如果有多个用下划线分割。类名为表名加上Controller,且类名首字母大写,如果多个则按照驼峰式命名。所有的controller必须继承Controller或者其子类。和Model一样,在Controller中一般会定义一个name的变量,其值为表名。这不是必须的,CakePHP会自动配置,不过手动添加会比较好。Model名字是单数,controller名字是复数,不难理解,一个controller对应的是很多model。如果一个controller类名加了下划线则其之类内部使用,不能通过URL来访问。 对于多个字母的controller,最后用下划线分割的小写url来访问。如/red_apples/go_pick是正确命名格式去访问RedApplesController::go_pick action

 

4.4 所有的view都放在app/views目录下面,一个controller对应一个文件夹,文件夹的名字和控制器名字一样,只是不加controller,换句话说和数据表名字一样。如果有名字有多个单词,要用下划线来分隔。在此文件夹下面有controlleraction对应的文件,文件名和action一致,文件后缀为ctp,即cake template pages. 如果页面没有对应的action,只需要创建ctp文件并放在app/views/pages下面。 如果没有指定路由,CakePHP会把app/views/pages/home.ctp作为默认页面。对于多个字母的action,则使用下划线分割。如PeopleController getPeady() 函数将调用对应的视图文件 /app/views/people/get_ready.ctp

 

4.5 文件及类名称命名规则

一般来说,文件名是由下划线将单词分开,但是类名通常使用驼峰命名法。如下面例子。

控制器类KissesAndHugsController会被命名为 kisses_and_hugs_controller.php (注意文件名中的_controller)

组件类MyHandyComponent会被命名为 my_handy.php

模型类OptionValue会被命名为 option_value.php

行为类EspeciallyFunkableBehavior会被命名为 especially_funkable.php

视图类SuperSimpleView会被命名为 super_simple.php

助手类BestEverHelper会被命名为 best_ever.php

 

下面最后一个例子是关系约定:

数据库表: "people"

模型类: "Person",创建 /app/models/person.php控制器类: "PeopleController",创建 /app/controllers/people_controller.php

视图文件, 创建 /app/views/people/index.ctp

使用这些约定,CakPHP就知道 http://example.com/people/ 这个请求需要去调用PeopleController中的index()函数,Person的数据模型是自动有效的(自动与数据库中的 people’表关联),并将其渲染到对应的视图文件。没有一个关联是已经被配置的,你可以根据自己的需要来创建。


推荐阅读
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • 本文深入探讨了 Prototype.js 框架及其与 JavaScript 原生 toString() 方法之间的区别,适合对前端开发感兴趣的开发者阅读。文章将帮助读者理解两者在功能实现和应用场景上的不同,从而更好地利用这些工具进行高效编程。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 理解文档对象模型(DOM)
    本文介绍了文档对象模型(DOM)的基本概念,包括其作为HTML文档的节点树结构,以及如何通过JavaScript操作DOM来实现网页的动态交互。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 本文介绍了ThinkPHP框架的基本概念及其主要特性。作为一款遵循Apache许可证的开源框架,ThinkPHP不仅支持多种平台和Web服务器,还提供了丰富的功能以适应不同的开发需求。 ... [详细]
  • 我有这种ajax$.ajax({type:"POST",url:"bee_sesi_edit.php&# ... [详细]
  • 深入理解Django中的AJAX应用
    本文详细介绍了AJAX技术及其在Django框架中的应用。AJAX,即异步JavaScript和XML,允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页。 ... [详细]
author-avatar
王晓宁smile
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有