CakePHP 概述

CakePHP 的设计初衷是简化常见的网页开发任务。通过提供一个一站式工具箱来帮助您开始使用,CakePHP 的各个部分可以很好地协同工作或独立使用。

本概述旨在介绍 CakePHP 中的通用概念,并简要概述这些概念在 CakePHP 中是如何实现的。如果您迫不及待地想要开始一个项目,您可以 从教程开始,或者 深入了解文档.

约定优于配置

CakePHP 提供了一个基本的组织结构,涵盖了类名、文件名、数据库表名和其他约定。虽然约定需要一些时间来学习,但通过遵循 CakePHP 提供的约定,您可以避免不必要的配置,并创建一致的应用程序结构,使处理各种项目变得简单。 约定章节 涵盖了 CakePHP 使用的各种约定。

模型层

模型层代表应用程序中实现业务逻辑的部分。它负责检索数据并将其转换为应用程序中的主要有意义的概念。这包括处理、验证、关联或其他与处理数据相关的任务。

以社交网络为例,模型层将负责处理诸如保存用户数据、保存朋友关联、存储和检索用户照片、查找新朋友建议等任务。模型对象可以被认为是“朋友”、“用户”、“评论”或“照片”。如果我们想从我们的 users 表中加载一些数据,我们可以这样做

use Cake\ORM\Locator\LocatorAwareTrait;

$users = $this->fetchTable('Users');
$resultset = $users->find()->all();
foreach ($resultset as $row) {
    echo $row->username;
}

您可能会注意到,在我们开始处理数据之前,我们不必编写任何代码。通过使用约定,CakePHP 将使用标准类来表示尚未定义的表和实体类。

如果我们想创建一个新用户并保存它(包含验证),我们可以执行以下操作

use Cake\ORM\Locator\LocatorAwareTrait;

$users = $this->fetchTable('Users');
$user = $users->newEntity(['email' => '[email protected]']);
$users->save($user);

视图层

视图层呈现模型数据的表示。它与模型对象分离,负责使用可用的信息来生成应用程序可能需要的任何呈现界面。

例如,视图可以使用模型数据来呈现包含它的 HTML 视图模板,或呈现供其他人使用的 XML 格式结果

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

视图层提供了许多扩展点,如 视图模板元素视图单元,让您能够重复使用呈现逻辑。

视图层不仅仅局限于 HTML 或数据的文本表示。它可以用来传递常见的格式,如 JSON、XML,并通过可插拔的架构来传递您可能需要的任何其他格式,如 CSV。

控制器层

控制器层处理来自用户的请求。它负责在模型层和视图层的帮助下渲染响应。

控制器可以被视为一个管理者,它确保完成任务所需的所有资源都被委托给正确的工人。它等待来自客户端的请求,根据身份验证或授权规则检查其有效性,将数据获取或处理委托给模型,选择客户端接受的呈现数据类型,最后将呈现过程委托给视图层。用户注册控制器的示例如下

public function add()
{
    $user = $this->Users->newEmptyEntity();
    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);
}

您可能会注意到,我们从未明确地渲染视图。CakePHP 的约定将负责选择正确的视图,并使用我们在 set() 中准备的视图数据来渲染它。

CakePHP 请求周期

现在您已经熟悉了 CakePHP 中的不同层,让我们回顾一下 CakePHP 中的请求周期是如何工作的

Flow diagram showing a typical CakePHP request

典型的 CakePHP 请求周期从用户请求应用程序中的页面或资源开始。从总体上讲,每个请求都将经历以下步骤

  1. Web 服务器重写规则将请求重定向到 webroot/index.php

  2. 加载您的应用程序并将其绑定到 HttpServer

  3. 初始化应用程序的中间件。

  4. 请求和响应通过应用程序使用的 PSR-7 中间件进行分发。通常,这包括错误捕获和路由。

  5. 如果中间件没有返回响应,并且请求包含路由信息,则会选择控制器和操作。

  6. 调用控制器的操作,控制器与所需的模型和组件进行交互。

  7. 控制器将响应创建委托给视图,以生成模型数据产生的输出。

  8. 视图使用助手和单元来生成响应主体和标题。

  9. 响应通过 中间件 发送出去。

  10. HttpServer 将响应发送到 Web 服务器。

仅仅是开始

希望这个快速概述能够激发您的兴趣。CakePHP 中的其他一些很棒的功能包括

接下来的明显步骤是 下载 CakePHP,阅读 教程并构建一些很棒的东西.

补充阅读