热门标签 | 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’表关联),并将其渲染到对应的视图文件。没有一个关联是已经被配置的,你可以根据自己的需要来创建。


推荐阅读
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • 关于extjs开发实战pdf的信息
    本文目录一览:1、extjs实用开发指南2、本 ... [详细]
  • 第一种<script>$(".eq").on(&qu ... [详细]
  • 前言对于从事技术的人员来说ajax是这好东西,都会使用,而且乐于使用。但对于新手,开发一个ajax实例,还有是难度的,必竟对于他们这是新东西。leo开发一个简单的ajax实例,用的是 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 我有使用googledrivepdf的共享链接,我必须使用angular7下载pdf文件。我已经完成了自欺 ... [详细]
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社区 版权所有