使用 ServBay 在 macOS 上创建并运行 PHPixie 项目
PHPixie 是一个轻量级且高性能的 PHP 框架,专为快速开发 Web 应用程序而设计。它遵循 HMVC(Hierarchical Model-View-Controller)设计模式,提供简洁的代码结构和高效的处理能力。PHPixie 以其简单、灵活和高性能而受到许多开发者的青睐。
PHPixie 的主要特性和优势
- 轻量级: PHPixie 的核心系统非常精简,仅包含构建应用所需的必要组件,启动和运行速度快。
- 高性能: 框架设计注重效率,能够有效处理并发请求,适用于对性能要求较高的应用。
- 易于学习: 提供清晰简洁的 API 和详尽的文档,开发者可以相对快速地掌握其用法。
- 灵活性: 框架结构松散耦合,允许开发者根据项目需求自由选择和集成第三方库及组件。
- 活跃的社区支持: 拥有一个积极的开发者社区,提供了丰富的第三方扩展和支持资源。
PHPixie 能够帮助开发者高效构建高性能、高质量的 Web 应用,适用于从小型项目到大型企业级应用的各种场景。
使用 ServBay 创建并运行 PHPixie 项目
本文将指导您如何利用 ServBay 提供的本地 Web 开发环境来创建并运行一个 PHPixie 项目。我们将使用 ServBay 集成的 PHP 环境、Composer 依赖管理器以及“网站”功能来配置 Web 服务器,并通过简单的步骤实现项目的本地访问和数据库/缓存集成。
前提条件
- 已在 macOS 上安装并运行 ServBay。ServBay 集成了 PHP、Composer、各种数据库(MySQL, PostgreSQL, MongoDB, Redis 等)以及 Caddy Web 服务器。
- 了解基本的命令行操作。
创建 PHPixie 项目
建议的网站存放路径
ServBay 建议将您的本地网站项目统一放置在 /Applications/ServBay/www
目录下,以便于管理和ServBay的访问权限控制。
- 确认 Composer 已安装: ServBay 出厂时已自带 Composer,无需额外安装。您可以打开终端,输入
composer --version
来验证。 - 创建项目目录: 在 ServBay 建议的网站根目录下创建一个新目录用于存放您的 PHPixie 项目,并进入该目录:bash
cd /Applications/ServBay/www mkdir servbay-phpixie-app cd servbay-phpixie-app
1
2
3 - 使用 Composer 创建 PHPixie 项目: 在项目目录下运行 Composer 命令来拉取 PHPixie 项目模板:bashComposer 将会下载 PHPixie 及其依赖到当前目录。
composer create-project phpixie/project .
1
配置 Web 服务器
使用 ServBay 的网站功能来设置 Caddy Web 服务器,使其能够正确指向并运行您的 PHPixie 项目。
打开 ServBay 应用界面。
导航到 网站 (Websites) 列表。
点击添加新的网站。
填写网站配置信息:
- 名字: 例如
My First PHPixie Dev Site
(这是一个 ServBay 内部标识名称)。 - 域名: 例如
servbay-phpixie-test.local
(您将在浏览器中访问的本地开发域名)。 - 网站类型: 选择
PHP
。 - PHP 版本: 选择您希望使用的 PHP 版本,例如
8.3
。 - 网站根目录 (Document Root): 指向您项目的
web
目录:/Applications/ServBay/www/servbay-phpixie-app/web
。
为什么是
/web
目录?PHPixie 项目的入口文件是
web/index.php
。为了安全和最佳实践,Web 服务器的根目录应该直接指向包含此入口文件的web
目录,而不是项目的顶层目录。这样可以防止通过 Web 直接访问到项目中的敏感文件(如配置文件、vendor 目录等)。- 名字: 例如
保存配置。ServBay 会自动配置 Caddy 并更新您的本地 hosts 文件(如果需要),使
servbay-phpixie-test.local
指向您的本地 ServBay 服务器。
详细设置步骤请参考 添加第一个网站。
添加示例代码
为了验证项目是否正确运行并演示数据库及缓存集成,我们在项目中添加一些示例代码。
创建示例控制器: 在
src/App/HTTP/Controller/Home.php
文件中添加以下代码。如果文件或目录不存在,请手动创建。php<?php namespace App\HTTP\Controller; use PHPixie\HTTP\Request; use PHPixie\Template; use PHPixie\Database\Query; // 引入 Query 类 class Home extends \PHPixie\Controller { protected $template; public function __construct(Template $template) { $this->template = $template; } // 默认首页 action public function action_index(Request $request) { // 渲染 assets/templates/app/home.php 模板 return $this->template->render('app:home'); } // Memcached 示例 action public function action_memcached(Request $request) { $cache = $this->components->cache(); $cache->set('key', 'Hello Memcached from ServBay!', 60); // 存储数据,有效期 60 秒 $value = $cache->get('key'); // 获取数据 return $this->response()->string($value); // 返回字符串响应 } // Redis 示例 action public function action_redis(Request $request) { $redis = $this->components->redis(); $redis->set('key', 'Hello Redis from ServBay!'); // 存储数据 $value = $redis->get('key'); // 获取数据 return $this->response()->string($value); // 返回字符串响应 } // MySQL/PostgreSQL 添加用户示例 action public function action_add_user(Request $request) { // 使用数据库组件获取查询构建器 $query = $this->components->database()->query(); // 向 'users' 表插入新用户数据 $query->insert('users')->data([ 'name' => 'ServBay Demo User', 'email' => 'demo-' . uniqid() . '@servbay.test', // 使用唯一邮箱 ])->execute(); // 执行插入操作 return $this->response()->string('User added successfully.'); // 返回成功消息 } // MySQL/PostgreSQL 获取用户列表示例 action public function action_list_users(Request $request) { // 使用数据库组件获取查询构建器 $query = $this->components->database()->query(); // 查询 'users' 表中的所有用户 $users = $query->select('*')->from('users')->execute()->fetchAll(); // 执行查询并获取所有结果 return $this->response()->json($users); // 返回 JSON 格式的用户列表 } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67创建示例模板: 在
assets/templates/app/home.php
文件中添加以下代码。如果文件或目录不存在,请手动创建。php<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Welcome to PHPixie on ServBay</title> <style> body { font-family: sans-serif; line-height: 1.6; margin: 20px; } h1 { color: #333; } p { margin-bottom: 15px; } code { background-color: #f4f4f4; padding: 2px 5px; border-radius: 4px; } ul { list-style: none; padding: 0; } li { margin-bottom: 10px; } li a { text-decoration: none; color: #007bff; } li a:hover { text-decoration: underline; } </style> </head> <body> <h1>Welcome to PHPixie on ServBay</h1> <p>This page is being generated dynamically by your PHPixie application running on ServBay.</p> <h2>示例功能链接:</h2> <ul> <li><a href="/home/memcached">测试 Memcached</a></li> <li><a href="/home/redis">测试 Redis</a></li> <li><a href="/home/add_user">向数据库添加用户</a></li> <li><a href="/home/list_users">列出数据库中的用户</a></li> </ul> <p>请确保您已完成相应的数据库和缓存配置步骤。</p> </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
访问基本网站
完成 ServBay 网站配置并添加示例代码后,您现在可以在浏览器中访问您设置的域名:
- 打开浏览器,访问
https://servbay-phpixie-test.local
。 - 您应该能看到显示 "Welcome to PHPixie on ServBay" 的页面,以及一些示例功能链接。
如果无法访问,请检查:
- ServBay 是否正在运行。
- ServBay 中该网站的配置是否正确,特别是域名、网站类型和网站根目录。
- 您的本地 hosts 文件是否正确解析了
servbay-phpixie-test.local
(ServBay 通常会自动处理)。 - ServBay 中的 PHP 版本是否已启用。
数据库与缓存集成示例
PHPixie 内置了对多种数据库和缓存系统的支持。ServBay 提供了 MySQL、PostgreSQL、Redis、Memcached 等软件包,您可以轻松地将它们集成到 PHPixie 项目中。
重要提示: 在进行数据库操作之前,请确保您已经在 ServBay 中启动了相应的数据库服务(如 MySQL 或 PostgreSQL),并且创建了用于本项目的数据库。例如,本示例中使用的数据库名为 servbay_phpixie_app
。您可以使用 ServBay 提供的数据库管理工具(如 Sequel Ace, Postico, TablePlus 等)或命令行客户端来创建数据库。ServBay 的默认数据库用户通常是 root
,密码是 password
(请根据您的 ServBay 设置确认)。
配置数据库连接
根据您使用的数据库类型(MySQL 或 PostgreSQL),编辑项目根目录下的 assets/config/database.php
文件。ServBay 默认的数据库地址通常是 127.0.0.1
。
MySQL 配置示例 (assets/config/database.php
):
<?php
return [
'default' => [
'driver' => 'pdo',
// connection 字符串根据您的数据库类型和 ServBay 配置调整
'connection' => 'mysql:host=127.0.0.1;dbname=servbay_phpixie_app',
'user' => 'root', // ServBay 默认用户
'password' => 'password', // ServBay 默认密码 (请根据您的实际设置修改)
'options' => []
]
];
2
3
4
5
6
7
8
9
10
11
12
PostgreSQL 配置示例 (assets/config/database.php
):
<?php
return [
'default' => [
'driver' => 'pdo',
// connection 字符串根据您的数据库类型和 ServBay 配置调整
'connection' => 'pgsql:host=127.0.0.1;dbname=servbay_phpixie_app',
'user' => 'root', // ServBay 默认用户
'password' => 'password', // ServBay 默认密码 (请根据您的实际设置修改)
'options' => []
]
];
2
3
4
5
6
7
8
9
10
11
12
创建数据库表 (使用迁移)
PHPixie 提供了命令行工具来管理数据库迁移,这是一种版本控制数据库结构的方式。
- 打开终端: 切换到您的 PHPixie 项目根目录:bash
cd /Applications/ServBay/www/servbay-phpixie-app
1 - 创建迁移文件: 运行 PHPixie 的 CLI 工具生成一个新的迁移文件。我们将创建一个用于创建
users
表的迁移:bash这会在php pixie generate:migration create_users_table
1assets/migrations
目录下生成一个新的 PHP 文件,文件名包含时间戳。 - 编辑迁移文件: 打开
assets/migrations
目录下新生成的迁移文件(例如YYYY_MM_DD_HHMMSS_create_users_table.php
),编辑up()
和down()
方法来定义users
表的结构:php<?php use PHPixie\Database\Migration; use PHPixie\Database\Schema\Table; class CreateUsersTable extends Migration { public function up() { // 使用 schema 构建器创建 'users' 表 $this->schema->create('users', function(Table $table) { $table->increments('id'); // 自增主键 $table->string('name'); // 姓名列 $table->string('email')->unique(); // 邮箱列,唯一 $table->timestamps(); // created_at 和 updated_at 时间戳列 }); } public function down() { // 使用 schema 构建器删除 'users' 表 $this->schema->drop('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 - 运行迁移: 在项目根目录下的终端中,运行以下命令来执行迁移,创建
users
表:bash如果一切顺利,您将在终端看到迁移成功的提示。您也可以通过数据库管理工具确认php pixie migrate
1servbay_phpixie_app
数据库中已经创建了users
表。
使用关系型数据库 (MySQL/PostgreSQL)
在上面的示例控制器 src/App/HTTP/Controller/Home.php
中,我们已经添加了 action_add_user
和 action_list_users
方法来演示如何使用 PHPixie 的数据库组件与 MySQL 或 PostgreSQL 进行交互。
- 添加用户: 访问
https://servbay-phpixie-test.local/home/add_user
将向users
表中插入一条新的用户记录。 - 列出用户: 访问
https://servbay-phpixie-test.local/home/list_users
将查询users
表中的所有用户记录,并以 JSON 格式返回结果。
配置和使用 NoSQL 数据库 (Memcached/Redis)
ServBay 预装了 Memcached 和 Redis 软件包及其 PHP 扩展。您只需要在 PHPixie 项目中进行相应的配置即可使用。
Memcached 配置 (assets/config/cache.php
):
编辑或创建 assets/config/cache.php
文件,添加 Memcached 配置:
<?php
return [
'default' => [
'driver' => 'memcached',
'servers' => [
[
'host' => '127.0.0.1', // ServBay Memcached 默认地址
'port' => 11211, // ServBay Memcached 默认端口
'weight' => 100,
],
],
],
];
2
3
4
5
6
7
8
9
10
11
12
13
14
Redis 配置 (assets/config/redis.php
):
编辑或创建 assets/config/redis.php
文件,添加 Redis 配置:
<?php
return [
'default' => [
'hostname' => '127.0.0.1', // ServBay Redis 默认地址
'port' => 6379, // ServBay Redis 默认端口
'timeout' => 0,
'database' => 0, // Redis 数据库索引
],
];
2
3
4
5
6
7
8
9
10
使用 Memcached/Redis:
在上面的示例控制器 src/App/HTTP/Controller/Home.php
中,我们已经添加了 action_memcached
和 action_redis
方法来演示如何使用 PHPixie 的缓存组件(底层可通过配置使用 Memcached 或 Redis)。
- 测试 Memcached: 访问
https://servbay-phpixie-test.local/home/memcached
将会向 Memcached 写入一个键值对,然后再读取并显示该值。 - 测试 Redis: 访问
https://servbay-phpixie-test.local/home/redis
将会向 Redis 写入一个键值对,然后再读取并显示该值。
请确保 ServBay 中相应的软件包(Memcached 和 Redis)已启动。
总结
通过以上步骤,您已经成功地使用 ServBay 在 macOS 本地环境上创建、配置并运行了一个 PHPixie 项目。您学会了如何使用 Composer 创建项目、如何通过 ServBay 的网站功能配置 Web 服务器、如何进行基本的数据库和缓存集成配置,并验证了这些功能的可用性。
ServBay 提供的集成环境极大地简化了 PHP 开发环境的搭建过程,让您可以更专注于代码开发本身。希望这篇指南能帮助您快速开始使用 PHPixie 构建您的下一个 Web 项目!