测试环境¶
概览¶
历史上,Phalcon 以其相对较小的开发社区和有限的拉取请求为特征,由于开发者对框架最初编写的语言 C 的不熟悉而面临挑战。为了鼓励贡献,我们引入了Zephir,一种与 PHP 和 Javascript 语法非常相似的语言。在2003年,我们揭开了这一计划,并随后发布了该语言,将所有 Phalcon 代码迁移到 Zephir。从那时起,Zephir 成为了 Phalcon 开发的核心部分。
挑战¶
构建一个功能丰富的框架需要全面的支持各种功能和相关服务的开发环境。例如,验证不同数据库适配器(如,MySQL, Postgresql, Sqlite)上的 ORM 功能需要安装相关的 PHP 扩展和数据库。同样地,要执行涵盖 Phalcon 广泛功能的测试套件,开发者必须安装诸如 Redis 和 Memcached 等多个扩展和服务。
考虑到不同的 PHP 版本(如,PHP 8.0, 8.1),这些先决条件使 Phalcon 的开发变得复杂。
解决方案¶
过去依赖于现已停止维护的 `nanobox`,我们加大了努力,采用 Docker 来简化开发需求。只需几个命令,开发者就可以无缝地为 Phalcon 做出贡献并迅速执行测试。
这种基于 Docker 的方法简化了设置过程,确保 Phalcon 的开发更加便捷和高效。
安装¶
在开始之前,请确保您的机器上已安装 docker。如果尚未安装,请按照说明进行操作点击这里。此外,您还需要docker compose- 安装详情可以在这里找到点击这里.
启动开发环境¶
-  
叉取仓库 首先将cphalcon仓库叉取到您的 GitHub 账户中。如果您还没有这样做,请在浏览器中导航至cphalcon页面并点击位于屏幕右上角的 Fork 按钮。
 -  
克隆叉取的仓库 将叉取的仓库克隆到您选择的目录中。下面的例子假定 GitHub 账户是
niden;将其替换为您的账户。 
- 构建环境 进入 cphalcon 文件夹(或您选择的仓库位置),并使用以下命令构建容器:
 
此过程可能需要一些时间,具体取决于您的机器规格。它不需要频繁运行,仅当 Dockerfile 发生变化或您选择重新构建容器时才需要。
启动环境¶
构建完所有容器后,使用以下命令启动环境:
上述命令利用存储库中的docker-compose.yml文件在后台运行环境,允许您重复使用终端。要停止环境,请按下Ctrl-C如果没有使用-d标志。如果使用了-d,请通知 Docker 您希望停止环境:
环境配置¶
暴露端口¶
使用上述命令后,服务容器会将端口暴露给主机,如下表所示:
| 服务 | 端口 | 
|---|---|
mysql |  3306 | 
postgres |  5432 | 
redis |  6379 | 
这种设置对大多数开发者来说都很方便。但是,对于同时在多个使用相同服务的项目上工作的开发者(如,mysql),这种配置可能会阻碍第二个环境的功能,因为主机上的端口已被占用。
隔离配置¶
或者,使用docker-compose-local.yml文件,该文件不会将服务容器的端口暴露给主机,从而确保隔离:
在这种情况下,您需要确定特定服务容器的 IP 地址以连接到它。例如,要连接到 mysql 容器:
确定正确的 IP 地址并相应连接:
进入环境¶
要进入环境,请指定所需的 PHP 版本环境。有三个环境可供选择:
cphalcon-8.0 cphalcon-8.1 cphalcon-8.2
例如,要进入 PHP 8.1 环境:
您将看到提示:
现在您已经在环境中,具备所有必要的扩展和服务。要退出,请输入exit并按 Enter:
别名¶
开发环境在.bashrc文件中位于docker/文件夹及其对应的 PHP 版本子文件夹中定义了一些预设别名。一些值得注意的别名包括:
| 别名 | 命令 | 
|---|---|
g |  git | 
h |  history | 
l |  ls -lF ${colorflag} | 
ll |  LC_ALL="C.UTF-8" ls -alF | 
zephir |  ./zephir | 
zf |  ./zephir fullclean | 
zg |  ./zephir generate | 
zs |  ./zephir stubs | 
cpl |  zf && zg && cd ext/ && ./install && .. | 
codecept |  php -d extension=ext/modules/phalcon.so ./vendor/bin/codecept | 
Composer¶
在继续之前,请更新 Composer:
Composer 命令¶
Composer 已配置以辅助测试。请按以下方式执行命令:
示例:
| 命令 | 描述 | 
|---|---|
analyze |  运行 Psalm (psalm) |  
cs |  运行 CodeSniffer (phpcs) |  
cs-fix |  运行 CodeSniffer fix (phpcbf) |  
test-unit |  运行单元测试 | 
test-cli |  运行 CLI 测试 | 
test-integration |  运行集成测试 | 
test-db-common |  运行通用数据库测试 | 
test-db-mysql |  运行 MySQL 数据库测试 | 
test-db-pgsql |  运行 pgsql 数据库测试 | 
test-db-sqlite |  运行 sqlite 测试 | 
test-db |  运行所有数据库测试 | 
test-all |  运行所有测试 | 
检查 Zephir¶
Zephir是否通过composer安装。确保通过执行以下命令安装最新版本:
编译 Phalcon¶
使用 Zephir 编译 Phalcon:
检查扩展¶
通过输入以下内容来验证扩展是否正确安装:
检查已安装模块列表中是否存在 phalcon。
设置数据库¶
在项目根目录创建一个.env文件:
运行测试¶
单元¶
在运行单元测试之前,构建Codeception基础类:
运行单元测试:
从特定文件夹执行测试: 执行单个测试:数据库¶
使用别名运行与数据库相关的测试:
root@cphalcon-81:/srv# test-db-common
root@cphalcon-81:/srv# test-db-mysql
root@cphalcon-81:/srv# test-db-pgsql
root@cphalcon-81:/srv# test-db-sqlite
root@cphalcon-81:/srv# test-db       
开发¶
打开你常用的编辑器,并开始用Zephir进行开发。对于任何更改.zep文件(在phalcon文件夹内),重新编译扩展:
服务¶
可用的服务包括:
- Memcached
 - MySQL
 - PostgreSQL
 - Redis
 
已启用的PHP扩展包括:
- apcu
 - ctype
 - curl
 - dom
 - fileinfo
 - gd
 - gmp
 - gettext
 - imagick
 - iconv
 - igbinary
 - intl
 - json
 - memcached
 - mbstring
 - mongodb
 - opcache
 - phar
 - pdo
 - pdo_mysql
 - pdo_pgsql
 - pdo_sqlite
 - redis
 - session
 - simplexml
 - sqlite3
 - tokenizer
 - yaml
 - zephir_parser
 - xdebug
 - xml
 - xmlwriter
 - zip
 - zlib
 
数据库备份位于tests/_data/assets/schemas
<3 Phalcon 团队