Yii 面试题

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

以下是最受欢迎和最有用的 Yii 框架面试题及答案,适用于初级和有经验的候选人。这些问题旨在让您熟悉面试中可能遇到的问题类型。根据我们的经验,好的面试官很少会计划在面试中问任何特定主题。取而,提问通常从对主题的基本理解开始,并根据您的回答进行进一步讨论。

1) 什么是 Yii?

Yii 是一个开源、高性能、基于组件、面向对象的 PHP Web 应用程序框架。Yii 遵循 MVC(模型-视图-控制器)架构模式。这个 PHP 框架最适合 Web 2.0 开发。

Yii 实现了最大的编程可重用性,并显著加快了 Web 应用程序的开发速度。


2) Yii 有哪些版本?

Yii 框架目前有两个主要版本,一个是 1.1,另一个是 2.0。版本 1.0 已过时,版本 2.0 是对 Yii 1.0 的完全重写。


3) 为什么 Yii 速度这么快?

Yii 之所以如此之快,是因为它广泛使用了惰性加载技术。例如,它在类第一次使用之前不会包含类文件。并且在对象第一次被访问之前不会创建对象。其他框架在性能上会受到影响,因为它们会启用功能(例如数据库连接、用户会话),而不管在请求期间是否使用。


4) Yii 最适合做什么?

Yii 是一个通用的 Web 编程框架,可用于开发几乎任何类型的 Web 应用程序。因为它轻量级且配备了复杂的缓存机制,所以它特别适合高流量应用程序,例如门户网站、论坛、内容管理系统 (CMS)、电子商务系统等。


5) 为什么使用 Yii 2.0 框架?

Yii 2.0 框架有助于快速创建现代 Web 应用程序并确保它们运行良好。Yii 2.0 框架具备:

  • 易于安装
  • 利用现代技术
  • 高度可扩展
  • 鼓励测试
  • 简化安全性
  • 缩短开发时间
  • 易于优化以获得更好性能

6) Yii 框架的主要功能有哪些?

Yii 框架具有以下主要功能,例如:

  • 模型-视图-控制器 (MVC) 设计模式
  • 数据库访问对象 (DAO)、查询生成器、活动记录和数据库迁移
  • 表单输入和验证
  • 支持 AJAX 的小部件
  • Yii 提供皮肤和主题机制
  • Web 服务适用于 Android 等应用
  • 多语言国际化和本地化翻译
  • 缓存以加快应用程序速度
  • 错误处理和日志记录以进行跟踪
  • 它提供跨站脚本 (XSS)、跨站请求伪造 (CSRF) 保护。
  • PHPUnit 和 Selenium 用于测试
  • 自动代码生成有助于我们快速开发
  • 身份验证和授权
  • 对第三方代码友好
  • 扩展库

7) Yii 2.0 版本有什么新内容?

Yii 2.0 版本新增了以下内容:

  • Yii 2.0 框架支持 PSR-4 类自动加载、更简单的命名空间、更快的加载以及改进的开发人员可用性。
  • Yii 2.0 框架增加了性能和安全方面的改进。
  • Yii 2.0 框架增加了 RESTful API 集成。
  • Yii 2.0 框架在 URL 处理和路由方面有所改进。
  • 现在 Yii 2.0 框架支持 26 种语言的核心消息翻译。

8) Yii 中的组件是什么?

组件是独立的代码集合,用于在控制器中执行特定任务。Yii 应用程序基于组件构建,而组件是按照规范编写的对象。

组件是 CComponent 或其派生类的实例。使用组件主要涉及访问其属性以及触发/处理其事件。基类 CComponent 定义了如何定义属性和事件。


9) Yii 的核心组件有哪些?

以下是 Yii 的核心组件,例如:

  • db - 数据库连接。
  • assetManager - 管理私有资源文件的发布
  • authManager - 管理基于角色的访问控制
  • cache - 管理缓存功能
  • clientScript - 管理 javascript 和 CSS
  • coreMessages - 提供翻译后的核心消息
  • errorHandler - 管理错误处理。
  • themeManager - 管理主题
  • urlManager - URL 解析和生成功能
  • statePersister - 持久化全局状态的机制
  • session - 会话管理
  • securityManager - 安全管理

10) 安装 Yii 需要哪些服务器要求?

Yii 框架需要以下条件,例如:

  • PHP 5.4 或更高版本
  • mbstring 扩展
  • PCRE 支持

11) 如何安装 Yii 框架?

您可以通过 Composer 运行以下命令来安装 Yii2:


12) Yii 框架的目录结构是什么样的?


13) Yii 框架中的 Controller 是什么?

控制器是将模型、视图和其他组件绑定在一起形成可运行应用程序的粘合剂。控制器负责直接处理最终用户的请求。因此,

  • 控制器可以访问 $_GET、$_POST 和其他代表用户请求的 PHP 变量。
  • 它可以创建模型实例并管理它们的生命周期。请注意,保存模型的实际实现应位于模型中,而不是控制器中。
  • 它应避免包含嵌入式 SQL 语句,这些语句最好保留在模型中。
  • 它应避免包含任何 HTML 或任何其他表示性标记,这些最好保留在视图中。

14) Yii 中的 Model 是什么?

模型代表 Web 应用程序的底层数据结构。模型通常在 Web 应用程序的不同子应用程序之间共享。例如,LoginForm 模型可能同时被应用程序的前端和后端使用。New 模型可能被控制台命令、Web API 以及应用程序的前端或后端使用。因此,

  • 模型应包含表示特定数据的属性。
  • 它应包含业务逻辑(例如,验证规则),以确保表示的数据符合设计要求。
  • 它可能包含处理数据的代码。

15) Yii 中的 Views 是什么?

视图负责以最终用户期望的格式呈现模型。通常,

  • 视图应主要包含表示性代码,例如 HTML 和简单的 PHP 代码来遍历、格式化和渲染数据。
  • 它应避免包含执行显式数据库查询的代码。此类代码最好放在模型中。
  • 这是控制器的任务。它应避免直接访问 $_GET、$_POST 或其他类似的代表最终用户请求的变量。视图应专注于由控制器或模型提供给它的数据的显示和布局,但不应尝试直接访问请求变量或数据库。
  • 它可以直接访问控制器和模型的属性和方法。但是,这仅用于表示。

16) 什么是 Yii 助手 (Helpers)?

助手是 Yii 中的静态类,它们简化了常见的编码任务,例如字符串或数组操作、HTML 代码生成等。在 Yii 中,所有助手都保留在 yii\helpers 命名空间下。

您可以通过直接调用其静态方法来使用 Yii 中的助手类,如下所示:


17) 什么是 Yii 中的 Formatter?

Formatter 是一个 Yii 应用程序组件,用于将视图数据格式化为用户可读的格式。默认情况下,formatter 由 yii\i18n\Formatter 实现,它提供了一组用于将数据格式化为日期/时间、数字、货币和其他常用格式的方法。您可以按如下方式使用 formatter:


18) Yii 中什么是 Active Record (AR)?

Active Record 提供了一个面向对象的接口,用于访问和操作存储在数据库中的数据。Active Record 类与数据库表相关联,Active Record 实例对应于该表的行,Active Record 实例的属性代表该行中特定列的值。

您不需要编写原始 SQL 语句,而是通过访问 Active Record 属性并调用 Active Record 方法来访问和操作存储在数据库表中的数据。


19) Yii2 中的 Gii 是什么?

Gii 是 Yii 框架提供的基于 Web 的代码生成器模块。它有助于创建和生成完全自定义的表单、模型、数据库 CRUD 等。

我们可以通过在应用程序的 modules 属性中配置 Gii 来启用它。取决于我们如何创建应用程序。您可能会在 config/web.php 配置文件中找到已提供的以下代码:


20) 与其他框架相比,Yii 有哪些优势?

与其他 PHP 框架相比,Yii 具有以下优势:

  • Yii 框架是一个通用的 Web 编程框架,用于使用 PHP 快速开发各种 Web 应用程序。它也非常适合开发大型应用程序。
  • Yii 或 Yii 2.0 框架的主要目标是:高性能。
  • Yii 框架是一个全栈框架,为关系型数据库和 NoSQL 数据库提供现成的功能。
  • Yii 框架实现了 MVC(模型-视图-控制器)架构模式。
  • Yii 框架具有极强的可扩展性。
  • Yii 框架拥有庞大的社区,并购买了漂亮的基于 Web 的富文本编辑器 Redactor 的无限许可证。

21) 运行 Yii 应用程序时加载的第一个文件是什么?

index.php 是运行 Yii 应用程序时加载的第一个文件。它将创建一个新的 yii\web\Application 对象并启动应用程序。


22) 从 Controller 加载的第一个函数是什么?

index: 是从控制器加载的第一个函数。


23) Yii 框架中的命名约定是什么?

在最新版本的 Yii 框架中,使用简单的标准来设置名称。

  • 使用 Gii 时,您可以定义表前缀。在这种情况下,您需要将其设置为 tbl_。然后它应该生成 UserController 而不是 TblUserController。
  • Yii 框架采用类命名约定,其中类名直接映射到它们存储的目录。Yii 框架的根目录是 "framework/" 目录,所有类都以分层结构存储在该目录中。
  • 类名只能包含字母数字字符。数字允许在类名中使用,但不鼓励使用。点 (.) 仅允许用作路径分隔符。

分别指向模块、控制器和请求操作的路由的格式如下:

ModuleID/ControllerID/ActionID

  • ModuleID 是可选的。ModuleID 必须在模块的配置属性中以相同的名称指定。
  • ControllerID 和 ActionID 应仅包含小写英文字符、数字、下划线、连字符和斜杠。
  • URL 约定:默认情况下,Yii 识别以下格式的 URL:

r 指的是路由。


24) Yii 中的 CModel 类是什么?

Yii CModel 是基类,它提供了数据模型对象所需的通用功能。CModel 为需要验证的数据模型定义了基本框架。Yii 中的所有模型都继承自 CModel 类。


25) 解释 Yii2 框架中的请求生命周期?

Yii2 框架中的请求生命周期按以下阶段解释:

Yii Interview Questions
  1. 通过 CApplication::preinit(); 预初始化应用程序;
  2. 设置错误处理;
  3. 注册核心应用程序组件;
  4. 加载应用程序配置;
  5. 通过 CApplication::init() 初始化应用程序;
    • 注册应用程序行为;
    • 加载静态应用程序组件;
  6. 触发 onBeginRequest 事件;
  7. 处理用户请求。
    • 收集有关请求的信息;
    • 创建控制器;
    • 运行控制器;
  8. 触发 onEndRequest 事件;

26) Yii 框架中的 render、renderPartial 和 renderFile 有什么区别?

Render()renderPartial()renderFile()
render() 通常用于渲染视图,对应于用户在应用程序中看到的“页面”。
它首先渲染您指定的视图,然后渲染当前控制器操作的布局(如果适用),将第一个渲染的结果放入布局中。然后它执行输出处理,最后输出结果。例如:render 带主题。
renderPartial() 通常用于渲染页面的“一部分”。与 render() 的主要区别在于此方法不会将渲染结果放入布局中。
默认情况下,它也不会执行输出处理,但您可以使用 $processOutput 参数覆盖此行为。例如:render 不带主题。
renderFile() 是一个底层方法,负责渲染工作:它提取当前范围的数据变量,然后运行视图代码。
其他两个方法在内部调用此方法,但您实际上永远不需要自己调用它。如果您这样做,请记住您需要传递文件路径(而不是视图路径)。

27) 如何在 Yii 中使用 Ajax?

可以在 Yii 框架中调用 Ajax。基本过程如下:

  • 将响应(处理)Ajax 调用并将此代码作为控制器中的一个 action 来编写。
  • 在 jQuery 方法中使用(Yii-framework)适当的 URL 调用该 action。

28) habtm 是什么意思?

Habtm 指的是 HasAndBelongsToMany。这是一种在模型中定义的关联,用于检索不同实体之间的相关数据。


29) 什么是 Yiibase?

YiiBase 是一个辅助类,它提供通用框架的功能。最好不要直接使用 YiiBase。相反,您需要使用它的子类,在那里我们可以自定义 YiiBase 的方法。


30) 如何生成 CRUD 代码?

创建模型类文件后,我们将生成实现用户数据 CRUD 操作的代码。我们在 Gii 中选择 Crud Generator。在 Model Class 字段中,我们输入 'User'。在 Controller ID 字段中,我们输入小写 'user'。然后按预览按钮,接着按生成按钮。这样我们就完成了 CRUD 代码生成。


31) 如何配置 Yii 应用程序与数据库连接?

在 Yii 的默认应用程序中,打开位于 protected/config/main.php 的 main.php 文件,搜索名为 db 的参数,在那里您可以添加数据库服务器的主机名、数据库名、用户名和密码。


32) 如何创建和使用 Yii 中的不同模块?

要创建模块,请访问 gii URL,在那里您可以创建模块。创建模块后,您需要将其添加到 Yii 应用程序的主配置文件中。


33) Yii 框架中的核心助手类有哪些?

以下是核心助手类:

  • ArrayHelper
  • Console
  • FileHelper
  • FormatConverter
  • Html
  • HtmlPurifier
  • Imagine
  • Inflector
  • Json
  • Markdown
  • StringHelper
  • Url
  • VarDumper

34) 如何自定义 Yii 框架中的助手类?

要自定义核心助手类,我们应该创建一个扩展助手基类的新类。例如:


35) 如何设置或更改 Yii 中的默认控制器?

您可以通过使用默认的 yii2 高级模板来设置或更改 Yii 中的默认控制器,该模板会将 URL 重定向到:

1) 在 backend main/config.php 用户组件中添加以下代码:

2) Yii2 高级模板的默认控制器是 controllers/siteController。您可以通过在 main/config.php 中放置以下配置来将其更改为您的模块或控制器名称:


36) Yii 框架中的 CFormModel 是什么?

在 Yii 中,CFormModel 代表一个数据模型,用于收集 HTML 表单输入。CFormModel 收集的数据仅存储在内存中,而不是数据库中。因此,要收集用户输入,您可以扩展 CFormModel 并定义其值从用户输入中收集的属性。


37) 如何在 Yii 中获取和设置会话?

要设置会话变量,您需要应用一个全局 PHP $_SESSION 变量。而在访问存储在会话中的数据时,您可以这样做:


38) 如何将 Yii 项目的调试模式转换为生产模式?

只需在入口脚本(root/index.php)中将 YII_DEBUG 定义为 false。


39) Yii 框架中的 CActiveRecord 是什么?

Active Record (AR) 是一种设计模式,用于以面向对象的方式抽象数据库访问。每个 AR 对象都是 CActiveRecord 或其子类的实例,代表数据库表中的一行。

行中的字段表示为 AR 对象的属性。所有 AR 详细信息都可以在 Active Record 中找到。


40) 如何获取 Yii 中的当前 URL?

Yii::app()->request->getUrl() 方法用于在 Yii 框架中获取当前 URL。


41) 如何在 Yii 中设置主页 URL?

您可以使用以下代码设置主页 URL:


42) Yii 支持多少种类型的表关系?

Yii 支持在其平台上使用的几乎所有类型的表关系。


43) renderFile() 函数在 Yii 中有什么用途?

在 Yii 中,renderFile() 函数通常用于响应 AJAX Web 请求。它以视图文件路径或别名的形式渲染指定的视图。


44) 如何获取当前控制器名称?


45) 如何获取当前操作名称?


46) Yii2 支持哪种 ORM?

Active Record 提供了一个面向对象的接口,用于访问和操作存储在数据库中的数据。


47) Yii 中还有其他控制器视图吗?

通过使用 renderPartial() 方法,您可以调用另一个控制器的视图。您可以重用视图文件。您可以调用视图和控制器文件中的函数。例如:


48) Yii 与 Yii2 有什么区别?

Yii 与 Yii2 之间的区别如下:

YiiYii2
Yii 需要 PHP 5.2。Yii 2.0 需要 PHP 5.4.0 或更高版本,它利用了 PHP 的最新功能。
在 Yii 中,使用了前缀 C,类位于全局命名空间中。在 Yii2 中,命名空间中不使用前缀 C。并且类基于目录结构。
Yii 使用 On-event 方法,不允许使用自定义事件名称。在 Yii 2.0 中,可以使用任何名称来处理事件,并将处理程序附加到该事件上,并且可以使用 J-query 来处理事件。
Yii 以 PHP 作为主要模板语言。Yii 2.0 配备了 PHP 和另外两种模板引擎:TWIG 和 SMARTY。

49) Yii 框架中的过滤器 (filter) 是什么?

过滤器是一段代码,配置为在控制器操作执行之前或之后执行。

一个操作可以有多个过滤器。过滤器按其在过滤器列表中的顺序执行。过滤器可以阻止操作的执行和其余未执行的过滤器的执行。

过滤器可以定义为控制器类方法。方法名称必须以 filter 开头。


50) Yii 框架中有哪些类型的模型?

Yii 实现两种模型。它们都继承自同一个基类 CModel。

  1. 表单模型
  2. 活动记录。