Yii 2 开发起步指南:开始学习框架之前必须掌握的 PHP、OOP 与 Composer 前置知识
【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址: https://gitcode.com/gh_mirrors/yi/yii2
本文是 Yii 2 官方指南「入门(Başlarken / Getting Started)」系列的第一站,对应仓库中的 docs/guide-tr/start-prerequisites.md(土耳其语版)及其英文原文 docs/guide/start-prerequisites.md。Yii 2 的学习曲线虽然不像其他 PHP 框架那样陡峭,但作为一款以“快、安全、专业”著称的完整 MVC 框架,动手之前仍有一些前置知识需要夯实。读完本文,你将明确学习 Yii 2 前需要掌握的三大块技能——PHP 语言基础、面向对象编程(OOP)以及命令行与 Composer 工具链,并能对照仓库源码理解这些前置知识在实际框架中的具体落点,从而以最短的弯路进入 安装 Yii 的实操环节。
一、PHP:Yii 的语言地基
Yii 首先是一个 PHP 框架(其 framework/composer.json 中"name": "yiisoft/yii2"、"type": "library"明确表明了这一点),因此扎实的 PHP 语言功底是使用它的前提。原文档开门见山的第一条建议就是:通读并理解 PHP 官方手册中的语言参考(Language Reference)。
1.1 语言参考:不只是“会写”而是“读懂”
原文档建议你完整阅读 PHP 官方手册的语言参考部分。之所以强调“阅读并理解”而不是“会用”,是因为 Yii 2 的日常开发会大量触及 PHP 语言的中高阶特性,包括但不限于:
- 类、对象、继承、接口等面向对象语法;
- 命名空间(namespace)与
use导入机制; - 魔术方法(
__construct、__get、__set等)与动态特性; - 闭包与匿名函数(Yii 的事件、行为、回调大量依赖它们);
- 类型声明(参数类型、返回类型、
strict_types)与 trait 复用机制。
这些特性在 Yii 2 框架源码中俯拾皆是。仅以命名空间为例,框架的核心基类 framework/BaseYii.php 第 9 行就以namespace yii;声明了全局命名空间,整个框架数以百计的类(yii\base\*、yii\web\*、yii\db\*等)都严格遵循统一的命名空间规划。不理解命名空间,你就无法读懂任何一行 Yii 源码的use语句,也无法在业务代码中正确组织自己的类。
1.2 版本要求:先确认你的 PHP 环境
虽然原文档没有列出具体版本号,但仓库的依赖声明给出了硬性约束。在 framework/composer.json 的require段中可以看到:
"require": { "php": ">=7.4.0", "ext-mbstring": "*", "ext-ctype": "*", "lib-pcre": "*", "yiisoft/yii2-composer": "~2.0.4", "ezyang/htmlpurifier": "^4.17", "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", ... }仓库根目录的 composer.json(开发包yiisoft/yii2-dev)同样声明了"php": ">=7.4.0"。这意味着:
- PHP 版本:至少 7.4,且官方推荐使用更新稳定版本以获取性能与安全收益;
- 必需扩展:
ext-mbstring(多字节字符串处理)、ext-ctype(字符类型检查)、lib-pcre(正则表达式库)是框架运行的基础依赖; - 核心依赖包:
yiisoft/yii2-composer(Composer 安装器插件)、ezyang/htmlpurifier(HTML 净化,用于安全输出)、cebe/markdown(Markdown 解析)等。
如果你计划开发数据库应用,安装文档 docs/guide/start-installation.md 还提醒你安装 PDO 扩展及对应的数据库驱动(如 MySQL 的pdo_mysql)。这些前置条件都可以通过框架自带的requirements.php脚本一键检测,详见下文第四节。
1.3 面向对象地写 PHP:类、对象与命名空间
原文档特别强调:用 Yii 开发时,你将以面向对象的方式编写代码,因此必须熟悉“类与对象”以及“命名空间”。这不是一句泛泛之谈,而是由框架的运行机制决定的。
以命名空间与自动加载为例,看框架入口 framework/Yii.php 的核心逻辑:
require __DIR__ . '/BaseYii.php'; class Yii extends \yii\BaseYii { } spl_autoload_register(['Yii', 'autoload'], true, true); Yii::$classMap = require __DIR__ . '/classes.php'; Yii::$container = new yii\di\Container();这里发生了三件与 PHP 语言知识直接相关的事:
- 类继承:
class Yii extends \yii\BaseYii—— 通过继承把框架的全部静态能力暴露给开发者,这是 OOP 继承机制的典型应用; - 自动加载:通过
spl_autoload_register注册自定义自动加载函数,配合 framework/classes.php 中的类映射表('yii\base\Action' => YII2_PATH . '/base/Action.php'这样的键值对)完成“类名 → 文件路径”的解析; - 命名空间解析:
new yii\di\Container()中的完整限定类名(FQCN)依赖对命名空间规则的理解。
此外,仓库根目录的 composer.json 还声明了 PSR-4 自动加载规则"yii\\": "framework/",即命名空间yii\下的类都从framework/目录加载。这套“PSR-4 + 类映射”双轨自动加载机制,正是你学习 PHP 自动加载规范(Autoloading Standards)的最佳实战样本。
二、面向对象编程(OOP):驾驭复杂度的必修课
原文档第二条前置知识是面向对象编程的基础概念,并明确指出:应用越复杂,就越需要学习更高级的 OOP 概念来成功管理这种复杂度。这条建议在 Yii 2 中体现得淋漓尽致——框架的整个体系就是建立在 OOP 之上的。
2.1 为什么 OOP 对 Yii 是硬性要求
Yii 2 中几乎一切皆是对象:应用(Application)、控制器(Controller)、模型(Model)、组件(Component)、行为(Behavior)、事件(Event)、过滤器(Filter)……如果你不具备 OOP 基础,将无法理解:
- 继承体系:例如
yii\web\Application和yii\console\Application都继承自yii\base\Application,开发者通过继承和重写来定制应用行为; - 接口与多态:如
yii\base\Configurable、Arrayable等接口定义了统一的契约,让不同实现可以互换; - 封装与属性:Yii 的“属性(Property)”机制就是封装思想的极致体现。
2.2 Yii 里的 OOP 实践:从 BaseObject 到 Component
框架核心基类 framework/base/BaseObject.php 是实现“属性(Property)”特性的基石,它的注释把 Yii 的 OOP 设计讲得非常透彻:
// 属性由 getter/setter 方法定义,例如: private $_label; public function getLabel() { return $this->_label; } public function setLabel($value) { $this->_label = $value; }通过这套约定,开发者可以用$object->label的方式读写属性,PHP 会自动调用对应的getLabel()/setLabel()方法——这正是 OOP 中**封装(Encapsulation)**的实战形态。同时,BaseObject还规定了一套对象初始化生命周期:
- 调用类构造函数;
- 根据传入的配置数组初始化对象属性;
- 调用
init()方法完成初始化。
这意味着你在 Yii 中重写构造函数时,必须把$config数组作为最后一个参数并在结尾调用parent::__construct($config)。不理解 OOP 的构造函数、继承与方法重写,就无法正确书写 Yii 的类。
再向上看,yii\base\Component在BaseObject之上叠加了**事件(Event)与行为(Behavior)**两大特性,它们分别依赖接口、traits、魔术方法等进阶 OOP 知识。原文档中“应用越复杂,越需要高级 OOP 概念”的判断,在这里得到了完整印证。更详细的介绍可继续阅读 概念:组件 与 概念:行为。
2.3 从源码结构看 OOP 的层级组织
打开仓库的 framework/base 目录,可以看到 49 个 PHP 文件构成的清晰层级:BaseObject→Component→Controller/Model/Module/Application……framework/web 与 framework/console 目录则通过继承扩展出 Web 与控制台两套应用体系。学习 Yii 的 OOP 实践,最直观的方式就是顺着这条继承链逐层阅读源码。
三、命令行与 Composer:开发工作流的两大支柱
原文档第三条前置知识包含两个关联主题:命令行与Composer。前者是操作工具链的基础,后者是 PHP 事实标准的包管理器,而 Yii 2 对 Composer 的依赖是深入骨髓的。
3.1 命令行:现在就开始尝试
原文档直言:“如果你还不熟悉命令行,现在是时候开始尝试了。一旦掌握基础,你将再也不愿离开它。”这句话的背景是:Yii 2 的日常开发几乎离不开终端操作——通过 Composer 安装依赖、通过php yii控制台命令生成代码(Gii)、运行数据库迁移(Migration)、执行测试等。仓库中的 framework/yii 与 framework/yii.bat 就是 Yii 控制台应用的入口脚本(在 framework/composer.json 的"bin": ["yii"]中声明),安装后会软链到项目的vendor/bin/下供直接调用。
3.2 Composer:PHP 事实标准的包管理器
原文档建议你阅读并理解 Composer 官方文档的《基本用法》(Basic Usage)章节。从仓库证据看,Composer 深度融入了 Yii 的整个生命周期:
- 依赖声明:框架自身的依赖全部写在 framework/composer.json 的
require段; - 自动加载:通过
autoload段的 PSR-4 规则("yii\\": ""或开发包中的"yii\\": "framework/")实现类自动加载; - 可执行文件:通过
bin字段把yii控制台入口暴露给所有依赖方; - 资产(Assets)管理:Yii 通过 Composer 统一解析 jQuery、inputmask、punycode、yii2-pjax 等前端库(见
require段的bower-asset/*依赖),借助 asset-packagist 实现 PHP 包与前端包版本的同时解析。
3.3 用 Composer 安装 Yii
安装文档 docs/guide/start-installation.md 给出了标准安装命令(需在 Web 可访问目录下执行):
composer create-project --prefer-dist yiisoft/yii2-app-basic basic这条命令会拉取最新稳定版的 Yii基础项目模板(Basic Project Template)——一个开箱即用的完整 Web 应用,包含登录、联系表单等基础功能,代码组织方式即官方推荐范式。如果你尚未全局安装 Composer,在 Linux/macOS 上可按官方安装器脚本安装后将其移至PATH;已有旧版本则先执行composer self-update升级。若网络环境受限遇到 GitHub API 速率限制,可按 Composer 官方文档配置 OAuth token 后重试。
此外,docs/guide/start-installation.md 还提供了几个与 Composer 相关的补充要点:
- 安装失败时可进入项目目录执行
composer update续传; - 想安装开发版(不建议用于生产)可加
--stability=dev参数; - 若不想让 Composer 下载前端资产,可在
composer.json的replace段声明bower-asset/*包的版本以跳过安装,但此时需自行负责资产管理与版本冲突。
四、动手验证你的准备程度
读完理论部分,建议立刻动手验证自己的环境是否达标。安装完成后,docs/guide/start-installation.md 提供了两种检查方式:
- 将项目根目录的
requirements.php复制到web/下,用浏览器访问http://localhost/requirements.php; - 或在项目根目录直接运行:
php requirements.php该脚本会逐项核对 PHP 版本、必需扩展(mbstring、ctype、pcre、PDO 及对应数据库驱动)等条件并给出通过/失败结论。之后可以用 PHP 内置 Web 服务器快速启动应用:
php yii serve默认监听 8080 端口,若端口被占用可加--port参数指定,例如php yii serve --port=8888,然后通过浏览器访问http://localhost:8080/看到 “Congratulations!” 页面即代表环境与安装全部就绪。这一步本身也是对你命令行熟悉程度的第一次实战检验。
五、接下来学什么:Yii 入门路径
本文属于土耳其语文档 docs/guide-tr/README.md 所列“入门(Başlarken)”章节的起点。需要注意的是,土耳其语版目前只翻译了该章节的部分页面(intro-yii.md、start-prerequisites.md等),因此后续内容建议阅读仓库根目录下的英文权威版本,推荐的递进顺序为:
- Yii 2 是什么 —— 了解框架定位与特性;
- 安装 Yii —— 完成环境搭建(本文第四节已涉及其核心步骤);
- 运行应用 —— 理解请求如何被框架处理;
- 说声 “Hello” —— 写出第一个控制器与视图;
- 处理表单、使用数据库、用 Gii 生成代码 —— 逐步深入典型业务场景;
- 向前看 —— 了解后续要掌握的全部主题地图。
若你是从 Yii 1.1 迁移过来的老用户,还可直接参考 从 1.1 升级。
小结
用一句话总结本文的核心:在打开 Yii 2 文档写第一行代码之前,请先确保自己拥有扎实的 PHP 语言基础(尤其是类、对象与命名空间)、面向对象编程思维,以及命令行与 Composer 的日常操作能力。这三项前置知识并非 Yii 独有,而是现代 PHP 开发的通用素质,但 Yii 2 恰好是检验它们的绝佳战场——框架源码(framework/Yii.php、framework/BaseYii.php、framework/base/BaseObject.php)中的继承体系、自动加载、属性机制与依赖管理,处处都是这三项知识的实战注脚。准备就绪之后,下一步就是 安装 Yii,开启你的第一个 Yii 2 应用。
【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址: https://gitcode.com/gh_mirrors/yi/yii2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考