CakePHP 的设计是为了让共通的网络开发变得更加轻松,简单。通过提供给您一个全能工具箱来让 您很好地整体或者单独地使用它。

这篇概要的目的是介绍CakePHP的一般概念,并且为您介绍这些概念是如何在CakePHP中得到实现 的。如果你急于开始一个项目,你可以 开始教程, 或者 直接参考文档.

规约来替代设定

CakePHP提供的基本构造包括class名,文件名,数据库table名。尽管这些规约需要花一些时间 学习,遵从这些CakePHP为您提供的规约可以让您避免不必要的设定并且拥有一个使各种项目都能 简单使用的应用结构。在 规约章节 囊括了CakePHP需要的各种规约.

模型(Model)层

模型层为您的应用程序提供了实现业务逻辑的部分。他负责检索数据并且将其转换成对于应用程序有意义的形 式。包括了处理、验证、表结合以及其它操作数据的任务。

拿社交网络来举例子,Model层将负责像保存用户数据、保存朋友们的关联、存储和检索用户相片、 寻找关于新朋友的建议等等。这些Model对象可以被当作“朋友(Friend)”、“用户(User)”、 “评论(Comment)”、或者是“照片(Photo)”。如果你想要从我们的``users``表中读取一些数据, 我们可以:

use Cake\ORM\TableRegistry;$users = TableRegistry::get('Users');
$query = $users->find();
foreach ($query as $row) {echo $row->username;
}

您也许注意到了我们在使用我们的数据之前并不需要写任何代码。通过使用规约,CakePHP将会使用 我们还没有定义的table和entity类(classes)的标准类。

如果我们想要造一个新的User并且将其保存(通过验证),我们可以像如下:

use Cake\ORM\TableRegistry;$users = TableRegistry::get('Users');
$user = $users->newEntity(['email' => 'mark@example.com']);
$users->save($user);

视图(View)层

View层会渲染来自Model的数据。通过与Model对象的分离,它能够使用合适的信息来产生你的应 用程序需要的表示界面。

举个例子,View(视图)可以使用model数据来渲染一个View template(视图模板)包含的HTML,或者在 其它地方使用的XML形式的返回值:

// In a view template file, we'll render an 'element' for each user.
<?php foreach ($users as $user): ?><li class="user"><?= $this->element('user', ['user' => $user]) ?></li>
<?php endforeach; ?>

View层提供了很多像 section_view-templates , section_view-elements 和 View Cells 的扩展功能来让您重复利用你的表示逻辑。

View层不仅仅限制于呈现数据的HTML或者文本。它还可以用于传递像JSON、XML、以及任何可通 过插件追加的你需要的结构,比方说CSV。

控制器(Controller)层

Controller层用于处理来自用户的请求。它能够在Model层和View层的帮助下渲染一个响应。

一个Controller可以被看成是一个管理者,它确保完成一个任务的所有资源被正确分配到员工手中。 它等待来自客户的请求,通过身份认证和权限检查来验证它们的合法性,委托Model取得和处理数据, 选择客户所接受的表示数据类型,最后委托View层来完成渲染过程。一个用户注册Controller的例子 将会是:

public function add()
{$user = $this->Users->newEntity();if ($this->request->is('post')) {$user = $this->Users->patchEntity($user, $this->request->getData());if ($this->Users->save($user, ['validate' => 'registration'])) {$this->Flash->success(__('You are now registered.'));} else {$this->Flash->error(__('There were some problems.'));}}$this->set('user', $user);
}

你也许注意到了我们从来没有明示地渲染一个视图(view)。CakePHP的规约将负责选择正确的视 图,并且用我们准备的``set()``方法来渲染它。

CakePHP请求周期

现在你已经对不同的层有了一定的熟悉,让我回顾一下一个请求周期是如何在CakePHP中运作的:

典型的CakePHP请求周期开始于用户请求在你应用程序中的页面或者资源。在一个很高的层级上各 自的请求都经过以下的步骤:

  1. 网页服务器重写导向**webroot/index.php**请求路径的规则。
  2. 你的应用程序被加载和绑定到一个``HttpServer``。
  3. 你的应用程序的中间件被初始化。
  4. 请求和请求结果通过你的应用程序使用的PSR-7中间件进行分配。这通常包括错误捕获和路径导向(路由)。
  5. 如果中间件没有返回响应并且请求中包含路由信息,那么表明一个Controller&Action被指定。
  6. Controller的Action被调用并且Controller与请求的Models和Components(部件)发生反应。
  7. Controller分配给视图(view)一个创建的响应来生成Model数据输出的结果。
  8. 视图(view)使用Helpers和Cells来生成响应的头部(headers)和身体(body)内容。
  9. 响应结果通过 Middleware 被送回。
  10. HttpServer 向网页服务器放出响应结果。

让我们开始吧

希望这个快速的概览能够激起你的兴趣。一些其它的CakePHP的显著特征是:

  • 一个由Memcached, Redis 和其它后端所集成的 缓存 框架
  • 强力的 代码生成工具 让你可以迅速地开始
  • 结合测试框架 可以让你确保你的代码完美运行

下一步明显要做的是 下载 CakePHP, 阅读 教程并且制作些很棒的东西.

CakePHP 概览相关推荐

  1. CakePHP中出现persistent is not writable等Warning的解决方法

    在新部署CakePHP项目或者从SVN中重新Update项目的时候,有时候会出现下面的警告: Warning (512): D:\xampp\htdocs\xxxx\app\tmp\cache\ is ...

  2. Intel Optane PMEM 概览

    文章目录 前言 基本架构 编程模型 PMDK 接口架构 接口概览 pmdk 安装 开发文档汇总 PMEM性能 官方性能 实测性能 前言 随着以PCM 为存储单元的3D XPoint 非易失存储介质 不 ...

  3. 操作系统学习2:操作系统的发展和概览

    操作系统的发展和概览 手工阶段(电子管时代) 特点: 用户独占全机 用户独占计算机所有资源,资源利用率低 CPU等待用户 计算前,手工装入纸带或卡片:计算完成后,手工卸取纸带或卡片:CPU利用率低. ...

  4. Windows 消息循环(1) - 概览

    本文从消息循环是如何驱动程序的这个角度,对 Windows 消息循环进行概览性介绍. 使用 EN5 课件获得更好的阅读体验: [希沃白板5]课件分享 : <Windows培训 - 消息循环> ...

  5. flutter ios启动白屏_Flutter技术架构概览

    前言 最近在整理各种技术架构,给自己的列了个TODO list,希望能在几个月的时间内,研究完各种前端技术架构,包括移动端技术架构.今天分享一下自己整理的flutter技术架构.完整的技术架构TODO ...

  6. RESTful之视图概览和视图说明

    一.视图概览 REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写. 视图的继承关系: 视图的方法与属性: 二.视图说明 1. 两个基类 1)APIView rest_fr ...

  7. 热点:3个故事概览突飞猛进的肠道病毒组研究

    编者按: 提到病毒可能很多人就会想到疾病和死亡,尤其是在当下这个特殊的时期. 过去 4 个月,新冠肺炎(COVID-19)在全世界范围内大流行,截至 5 月 23 日 11:00,中国累计确诊人数达到 ...

  8. emc celerra(一)--界面概览

    1.EMC celerra打开http://IP地址即可看到如下界面,可以看到此时灰色部分功能为未授权license 2.激活以上灰色部分的功能 3.下图显示都已激活 4.可以看到网络接口的IP地址 ...

  9. Apache Beam的架构概览

    不多说,直接上干货! Apache Beam是一个开源的数据处理编程库,由Google贡献给Apache的项目,前不久刚刚成为Apache TLP项目.它提供了一个高级的.统一的编程模型,允许我们通过 ...

最新文章

  1. .NET控件名称缩写一览表 zz
  2. MySql隔离级别多线程并发读取数据时的正确性
  3. Java编程中值得注意的对象引用现象
  4. js console 输出到文件_Node.js核心入门
  5. 获取机器安装.NET版本的几种方式
  6. 计算机表格中如何计算数据透视表,[Excel]这才是在数据透视表中进行计算的正确操作!...
  7. Linux内核源代码 学习笔记
  8. 推推:产品的规划和商业化分析
  9. 苹果账号的分类以及注册免费苹果账号
  10. 超级压缩,将3D压缩成一种图片
  11. 全球问题—废旧电子废弃物的回收
  12. gc buffer busy的优化
  13. 02 LED的闪烁、模拟交通灯
  14. C# OPC类库 升级版本 OPCAutomation.dll
  15. AVFormatContext、AV_read_frame、av_seek_frame
  16. GBase8s数据库REFERENCES 子句
  17. Java反射底层原理以及应用
  18. linux与 win上装pyhive
  19. JavaScript实现输入数值判断是否为质数、合数的代码
  20. 一文搞懂PMO如何推动流程规范的落地及常见问题如何解决?【管理有度4】

热门文章

  1. Jmeter安装教程(windows)
  2. mysql数据库监控程序_mysql数据库监控利器lepus天兔工具安装和部署
  3. 简述计算机地图制图的主要阶段,计算机地图制图原理、特点及发展趋势
  4. 路由器wan口接入方式
  5. 代码 - 多张图片合并成PDF(每页宽高即是当前页面图片的宽高)- itextpdf
  6. Cesium 无法加载出地球
  7. 翻转组织——通用医疗敏捷转型案例
  8. 麦克纳姆小车底盘跟随云台
  9. 职场5大潜规则不可不知
  10. LTE下行物理层传输机制(1)-天线端口Antenna Port和小区特定参考信号CRS