CakePHP 访谈问题

2025年3月17日 | 阅读 12 分钟

以下是针对初学者和经验丰富的候选人最受欢迎和最有用的 CakePHP 访谈问题及答案。这些问题旨在帮助您熟悉面试中可能遇到的问题类型。

1) 什么是 CakePHP?

CakePHP 是一个用 PHP 脚本语言编写的开源免费 Web 框架,用于快速开发 Web 应用程序和 API。CakePHP 遵循模型-视图-控制器 (MVC) 方法。CakePHP 受到 Ruby on Rails 框架的启发,并根据 MIT 许可证分发。


2) CakePHP 是何时开发的?

CakePHP 于 2005 年 4 月由 Michal Tatarynowicz 开发。作为一名波兰程序员,他用 PHP 编写了一个最小化的快速应用程序框架版本,并将其命名为 Cake。CakePHP 1.0 版本于 2006 年 5 月发布。


3) CakePHP 用于什么?

CakePHP 用于 PHP Web 应用程序等的快速开发。


4) 安装 CakePHP 的系统要求是什么?

CakePHP 的系统要求是

  • PHP 5.4.16 或更高版本
  • mbstring 扩展库
  • intl 扩展
  • MySQL 最低版本为 5.5.3
  • MariaDB 最低版本为 5.5
  • PostgreSQL
  • SQLite 3
  • Microsoft SQL Server 最低版本为 2008

5) 安装 CakePHP 的服务器要求是什么?

以下是安装 CakePHP 所需的服务器要求

  • HTTP 服务器,如 Apache 或 Microsoft IIS。
  • PHP 最低版本为 5.6。
  • 需要 intl、mbstring、simplexml、PDO PHO 扩展。

6) CakePHP 的数据库配置文件在哪里?

CakePHP 将配置文件存储在:/app/config/database.php.default


7) CakePHP 的特点是什么?

CakePHP 提供了各种重要的功能,例如

  • 它遵循 MVC 架构。
  • 内置验证
  • 缓存
  • 脚手架
  • Auth & ACL
  • 通过 Security Component 等实现的 CSRF 防护。
  • 快速开发
  • 安全、可扩展、稳定

8) 解释 CakePHP 的层?

CakePHP 基于 MVC 结构。MVC 代表模型-视图-控制器。MVC 是一种架构模式,它描述了组织应用程序的方式,并解释了该结构中每个部分的职责和交互。

  • 模型层:该层实现了应用程序的业务逻辑,例如检索数据、转换或处理数据、验证属于该层的数据。
  • 视图层:该层负责根据模型提供的信息渲染前端界面。
  • 控制器层:该层用于处理用户的请求。它接收客户端的请求,检查其有效性,相应地获取数据,分配资源,相应地选择表示数据,最后委派渲染过程。

9) 什么是 CakePHP 中的控制器?

控制器充当模型和视图之间的层。控制器处理来自路由的传入请求数据,并确保调用 Web 应用程序数据的正确模型以及调用正确的视图。

CakePHP Interview Questions

您可以创建自己的控制器来处理模型和视图。每个手动创建的控制器都继承自 AppController 类。AppController 又继承自 Controller 类。CakePHP 应用程序使用约定根据请求的参数将其转换为要在浏览器中显示的视图。


10) 解释 CakePHP 中的钩子?

CakePHP 中的钩子是回调函数,可以在数据库相关操作(如访问、修改、删除或保存数据库中的数据)之前或之后调用。此方法用于在数据库操作之前或之后执行逻辑。

其他一些钩子包括 afterFind()、beforeValidate()、afterValidate()、beforeSave()、afterSave()、beforeDelete()、afterDelete() 和 onError()。


11) 如何检查 CakePHP 版本?

有两种方法可以查找 CakePHP 版本

或者,转到以下路径在 VERSION.txt 文件中查找版本

 


12) 什么是 CakePHP 中的脚手架?

CakePHP 中的脚手架是一种应用程序创建技术,用于创建执行数据操作(如创建读取更新删除)的基本应用程序。

它用于创建临时快速应用程序,该应用程序在任何方面都不够灵活。通过脚手架,您还可以创建或断开对象之间的链接。要创建脚手架,您需要定义模型和控制器。然后,通过控制器中的$scaffold变量,您可以快速创建应用程序。


13) CakePHP 支持多少种缓存类型?

在 CakePHP 中,缓存通过存储复杂查询结果以加快访问速度来使应用程序运行得更快。CakePHP 支持的缓存类型包括,

  • 文件缓存:这是最简单但也是最慢的用于存储大型元素的缓存。
  • APCu 缓存:这是一种快速缓存,使用共享内存来存储元素。它提供基本的读写功能。
  • Wincache:这与 APCu 缓存相同,但针对 Windows 进行了优化。
  • Redis:它提供快速且持久的缓存。
  • 数组:这是一种运行时存储缓存,用于按顺序存储元素。

14) 如何在 CakePHP 中获取当前 URL?

要从主机名获取完整 URL,请编写以下命令,

在这里,我们将 full 选项设置为 true。因此,我们获取了完整的方案、主机名和项目路径。假设上面的命令产生以下结果,


15) CakePHP 中的会话是什么?

PHP 会话允许您在请求之间识别唯一用户,并为特定用户存储持久数据,这些数据与唯一的会话 ID相关联。它用于在页面请求之间保持状态信息。

会话 ID 通常通过会话 Cookie 发送到浏览器,然后使用该 ID 来检索现有的会话数据。

您可以在有权访问请求对象的任何地方访问会话数据。这意味着会话可从

  • 控制器
  • 视图
  • 助手
  • 单元格
  • 组成部分

16) 列出 CakePHP 中的一些数据库相关函数?

CakePHP 数据库层有助于处理关系数据库,例如建立连接、构建查询、更改结构、防止 SQL 注入等。以下是一些 CakePHP 提供的基本数据库函数,

  • 验证数据:使用验证器对象,您可以在将数据转换为实体之前检查数据的类型、形状和大小。
  • 保存数据:加载并更改数据后,您可以使用 save() 函数将数据插入或更新到数据库中。
  • 删除数据:使用 delete() 函数,您可以执行级联删除、批量删除、严格删除等不同类型的删除。
  • 检索数据和结果集:借助 get() 或 find() 函数,您可以检索数据。使用 first() 函数,您可以检索结果集。
  • 关联:在 CakePHP 中,有各种关联类型可用。借助它们,您可以链接两个或多个数据库。

CakePHP 支持多少种关联?

CakePHP 支持四种关联

  • hasOne:一对一关系
  • hasMany:一对多关系
  • belongsTo:多对一关系
  • hasAndBelongsToMany (HABTM):多对多关系

18) CakePHP 中的 "Security.salt" 和 "Security.cipherSeed" 是什么?

CakePHP 提供各种安全功能来保护数据或密码。

  • Security.salt 是一个哈希,用于在 CakePHP 中加密或解密文本消息。

在这里,$hmacSalt() 是用于 HMAC 过程的 salt。Null 用于定义使用 Security.salt

  • Security.cipherSeed 就是用于在 Security::cipher() 函数中加密或解密消息的密钥。

这里,$key 是 256 位/32 字节的加密密钥或 Security.cipherSeed


19) 什么是 CakePHP 中的组件?

在 CakePHP 中,组件是控制器之间共享的逻辑包。CakePHP 附带了一套出色的核心组件,您可以使用它们来协助执行各种常见任务。

在应用程序中使用组件可以使您的控制器代码更清晰,并允许您在不同控制器之间重用代码。以下是一些常用的 CakePHP 组件,例如

  • 认证
  • Cookie
  • 跨站请求伪造
  • 闪光灯
  • 安全性
  • 分页
  • 请求处理

20) 什么是 CakePHP 中的助手?

助手与应用程序的表示层相关。它包含表示逻辑,可以在多个视图、元素或布局之间共享。以下是一些常用的助手,例如

  • FormHelper
  • HtmlHelper
  • JsHelper
  • CacheHelper
  • NumberHelper
  • Paginator
  • RSS
  • SessionHelper
  • TextHelper
  • TimeHelper

21) 什么是 CakePHP 中的行为?

在 CakePHP 中,行为与模型相关。它用于组织和实现模型层逻辑的水平重用。它们类似于 traits。但是,行为实现为单独的类。这允许它们挂钩到模型发出的生命周期回调,同时提供类似 traits 的功能。

行为提供了一种便捷的方式来打包跨多个模型共有的行为。


22) 为什么 CakePHP 有两个 vendor 文件夹?

CakePHP 中有两个 vendor 文件夹,一个文件夹在根目录,另一个在 "app" 文件夹中。

  • 根目录是全局 vendor 文件夹。它用于放置供多个应用程序使用的第三方库。多个应用程序共享同一个根目录(Cake + 插件 + vendor)。
  • APP 文件夹是特定于应用程序的,并且具有优先权。它用于放置特定于应用程序的第三方库。

23) 解释 CakePHP 中的应用程序功能。

CakePHP 的应用程序功能控制应用程序的配置方式以及包含哪些插件、中间件、控制台命令和路由。

  • 引导:用于加载配置文件、定义常量和其他全局函数。
  • 路由:用于加载路由。
  • 中间件:用于将中间件添加到应用程序。
  • 控制台:用于将控制台命令添加到应用程序。
  • 事件:用于将事件监听器添加到应用程序事件管理器。

24) CakePHP 数据库配置文件叫什么名字?

在 CakePHP 中,database.php.default 文件用于数据库配置。它位于 CakePHP 的 /app/config/ 目录中。


25) $this->set() 在 CakePHP 中的作用是什么?

在 CakePHP 中,此方法用于在视图文件中创建变量。

Set 与 compact 函数结合使用,用于将多个变量传递给视图。

然后,该变量将可用于该操作的视图模板文件。


26) 在控制器中的每个操作之前执行哪个函数?

beforeFilter() 函数在控制器中的每个操作之前执行。


27) 如何在 CakePHP 中读取、写入和删除会话?

  • Session::read($key)函数用于在 CakePHP 中读取特定的会话数据。
  • Session::write($key, $value)函数用于在 CakePHP 中写入会话数据。
  • Session::delete($key)函数用于在 CakePHP 中删除特定的会话数据。

28) 电子邮件配置传输的类名是什么?

电子邮件配置传输有各种类名

  • Mail:用于通过 PHP mail 函数发送邮件。
  • SMTP:使用 SMTP 发送
  • Debug:不发送电子邮件,只返回结果

29) CakePHP 中有哪些可用的日志记录级别?

在 CakePHP 中,可以使用 log() 函数轻松进行日志记录。CakePHP 提供了各种日志记录函数级别,例如

  • Emergency:表示系统不稳定。
  • Critical:用于宣告危急状况。
  • Notice:用于宣告重要状况。
  • Error:用于宣告错误状况。
  • Alert:用于宣告警报状况并采取行动。
  • Debug:用于宣告调试消息。
  • Info:用于宣告信息性消息。

30) 如何在 CakePHP 中显示模型的架构?

您可以使用以下代码获取模型的架构。

通过提供 ModelName,您可以获得结构。


31) 如何在 CakePHP 中创建 Cookie?

CakePHP 提供了一种简单安全的方式来管理 Cookie。在 CakePHP 中,CookieComponent 类用于管理 Cookie。它设置 Cookie 路径、过期时间、域、键、加密等。要配置 Cookie,您需要使用 config() 方法。

上述函数用于创建和配置 Cookie。配置 Cookie 后,您可以使用 CookieComponent 类提供的各种方法来读取、写入、删除和检查 Cookie 数据。


32) CakePHP 中的分页是什么?

在 CakePHP 中,控制器 Pagination 组件用于构建分页查询。PaginatorHelper 用于在视图中生成分页链接和按钮。


33) 什么是 Composer?如何使用 Composer 创建 CakePHP 项目?

Composer 是一个用于管理项目依赖关系的工具。您可以通过在终端上运行以下命令来使用 Composer 创建 CakePHP 项目。


34) 视图文件的默认扩展名是什么?如何更改它?

.ctp 是视图文件的默认扩展名。您可以通过在 AppController 中编写 public $ext = '.yourextension' 来更改默认扩展名。如果您想为特定控制器更改它,请仅将其添加到该特定控制器中。

您也可以通过仅将它放在控制器操作中来为该控制器的特定操作更改它。


35) CakePHP 框架中的元素是什么?

在 CakePHP 中,元素是较小的、可重用的视图代码片段。元素通常在视图中渲染。


36) CakePHP 框架中的布局是什么?

在 CakePHP 中,布局用于显示包含表示代码的视图。简单来说,视图在布局中渲染。


37) 如何在控制器中设置布局?

您可以使用以下命令在控制器中设置布局

要为特定操作覆盖,请使用以下命令


38) 如何在控制器中包含助手?

您可以使用此命令在控制器中包含助手

在特定操作中使用以下代码


39) RequestAction 方法的作用是什么?

requestAction 方法用于从任何位置调用控制器的操作并返回该操作的数据。


40) 如何在控制器中包含组件?

您可以使用以下命令在控制器中包含组件


41) 如何在不修改整个代码的情况下更改应用程序中的 URL 结构?

以下代码用于更改应用程序中的 URL 结构。


42) 如何在 CakePHP 中加密和解密数据?

在 CakePHP 中,我们可以使用安全库方法来加密和解密数据。


43) 如何在控制器中创建验证器?

我们可以使用以下命令在控制器中创建验证器


44) 如何使用 Composer 安装 CakePHP?

在确认您具备 CakePHP 安装所需的要求后,您可以使用 Composer 进行安装。Composer 是 CakePHP 官方支持的依赖管理工具。

但是,首先您必须安装 Composer 才能创建 CakePHP 项目。要下载 Mac 或 Linux 上的 Composer

  • 在终端中运行以下命令,您将在当前目录中获得一个 phar 文件。
  • 上述命令将下载 composer 安装程序,验证 SHA-384,运行安装程序下载 Composer,并删除安装程序。
  • 安装 Composer 后,将其移动到您的工作目录。

要使用 Composer 创建您的第一个 CakePHP 项目,请键入以下命令。

此命令下载 CakePHP 应用程序所需的所有必要文件和库。


45) 列出 CakePHP 中的一些回调函数?

回调函数用于在执行与数据库相关的操作之前或之后执行某些逻辑。一些回调方法包括,

  • beforeFind(array $query):在执行 find 操作之前调用,以执行传递给函数的查询。
  • afterFind(array $results, boolean $primary = false):在执行 find 操作后调用,用于修改结果。
  • beforeValidate(array $options = array()):用于在数据验证之前进行修改。
  • afterValidate():用于在验证过程后进行数据清理。
  • beforeSave(array $options = array()):用于在保存操作之前执行任何逻辑。
  • beforeSave(array $options = array()):用于在保存操作之后执行逻辑。
  • beforeDelete(boolean $cascade = true):用于执行删除前逻辑。
  • afterDelete():用于在删除后执行逻辑。
  • onError():如果发生任何错误,则会调用此函数。

46) 您对 HABTM 有何理解?

CakePHP 中有许多类型的关联,用于链接不同的模型。HABTM (Has And Belongs To Many) 是 CakePHP 中一种模型关联类型。HABTM 用于以多种方式重复地关联两个模型。

HABTM 的独特之处在于模型之间的链接不是排他的。此外,HABTM 中的数据是一个完整集合。因此,每次添加新的数据关联时,HABTM 中的完整集合都会被删除并重新创建。


47) CakePHP 和 Yii 有什么区别?

以下是 CakePHP 和 Yii之间的一些主要区别,例如

CakePHPYii
数据库模型是面向对象-关系文档的。数据库模型是面向对象的关系型。
它使用 PHP 编程语言编写。它使用 PHP JavaScript 语言编写。
CakePHP 的编程范式是面向对象的、函数式的、事件驱动的。Yii 的编程范式是面向对象的、函数式的、事件驱动的。
其框架根据 MIT 许可证发布。其框架根据 BSD 许可证发布。

48) 如何在整个站点中包含 JavaScript 菜单?

将 JavaScript 文件添加到 webroot,并在需要随处调用的默认视图或仅在相关视图中调用它们。


49) 使用什么方法可以在运行时创建和销毁模型关联?

bindModel() 和 unbindModel() 模型方法用于在运行时创建和销毁模型关联。


50) CakePHP 的缺点是什么?

学习曲线陡峭,并且在开始任务之前会加载整个应用程序。由于其资源密集型结构,不建议用于小型项目。