创建并运行 Phalcon 项目
什么是 Phalcon?
Phalcon 是一个高性能的 PHP 框架,以 C 扩展的形式实现,提供了极高的执行效率。它采用 MVC(模型-视图-控制器)架构,旨在为开发者提供快速、灵活的开发体验,同时保持高性能。
Phalcon 的主要特性和优势
- 高性能:由于 Phalcon 是以 C 扩展的形式实现的,它提供了卓越的性能表现。
- 丰富的功能:包括 ORM、模板引擎、路由、缓存、队列等功能,满足各种开发需求。
- 低内存消耗:由于其独特的实现方式,Phalcon 在运行时的内存消耗非常低。
- 易于使用:提供了简单易用的 API 和清晰的文档,帮助开发者快速上手。
- 模块化设计:可以根据需要选择和使用不同的组件,灵活性极高。
Phalcon 是构建高性能 Web 应用和 API 的理想选择,适用于从小型应用到大型企业级系统的各种项目。
使用 ServBay 创建并运行 Phalcon 项目
在这篇文章中,我们将使用 ServBay 提供的 PHP 环境来创建并运行一个 Phalcon 项目。我们将利用 ServBay 的『主机』功能来设置 Web 服务器,并通过简单的配置实现项目的访问。
注意:如果你曾经是 NGINX 或 Apache 的用户
ServBay 默认使用 Caddy 作为 Web 服务器。对于从 NGINX 和 Apache 迁移到 ServBay 的用户,有一些关键变动点需要注意:
Caddy 配置
ServBay 已经内置了 Caddy,并且默认配置已经优化和调试好。开发者只需通过 ServBay 的『主机』功能来管理站点,无需手动修改 Caddy 配置文件。
Rewrite 规则和 .htaccess
在 NGINX 和 Apache 中,开发者通常需要自己编写 Rewrite 规则和 .htaccess 文件来处理 URL 重写和其他配置。然而,ServBay 出厂时已经配置好了 Caddy 的规则,因此,除非有特殊需求,否则开发者无需自己编写这些规则。
了解更多
更多相关信息,请参阅Rewrite与htaccess、Apache网站如何迁移到ServBay、NGINX网站如何迁移到ServBay。
注意:启用 Phalcon 模块
ServBay 已经内置了 Phalcon 模块,用户需要先打开并重启 PHP。请参考 如何启用ServBay自带的Phalcon模块 这篇文章来启用 Phalcon 模块。
不同版本的 Phalcon 和 DevTools
根据不同的 PHP 版本,需要安装不同版本的 Phalcon DevTools:
- PHP 5.6、7.0、7.1:Phalcon 3.4.5
- 对应的 Phalcon DevTools 版本:
3.4.x
- 对应的 Phalcon DevTools 版本:
- PHP 7.2、7.3、7.4:Phalcon 4.1.2
- 对应的 Phalcon DevTools 版本:
4.3.x
- 对应的 Phalcon DevTools 版本:
- PHP 8.0、8.1、8.2、8.3、8.4:Phalcon 5.7.0
- 对应的 Phalcon DevTools 版本:
5.0.x
(由于官方 DevTools 对 PHP 8.x 支持不好,建议使用修复版)
- 对应的 Phalcon DevTools 版本:
创建 Phalcon 项目
TIP
ServBay 建议开发者把网站放置在/Applications/ServBay/www
目录下,以方便管理。
安装 Composer
ServBay 出厂时已经自带 Composer,无需单独安装。
创建项目目录
创建项目目录并进入:
bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3安装 Phalcon DevTools
根据 PHP 版本安装对应的 Phalcon DevTools:
PHP 5.6、7.0、7.1:
bashcomposer require phalcon/devtools:"^3.4"
1PHP 7.2、7.3、7.4:
bashcomposer require phalcon/devtools:"~4.1"
1PHP 8.0、8.1、8.2、8.3、8.4:
创建
composer.json
文件,输入以下内容
{
"repositories": [
{
"url": "https://github.com/daleffe/phalcon-devtools-5.x-fixed.git",
"type": "git"
}
],
"require": {
"phalcon/devtools": "dev-master"
},
"minimum-stability": "dev",
"prefer-stable": true
}
2
3
4
5
6
7
8
9
10
11
12
13
然后运行
composer update
创建 Phalcon 项目
使用 Phalcon DevTools 创建一个新的 Phalcon 项目:
bashvendor/bin/phalcon project servbay-phalcon-app
1进入项目目录
进入新创建的 Phalcon 项目目录:
bashcd servbay-phalcon-app
1
初始化配置
配置环境变量
在
app/config/config.php
文件中配置数据库连接信息和其他环境变量。确保以下配置已正确设置:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9
配置 Web 服务器
使用 ServBay 的『主机』功能,通过 Web 服务器来访问 Phalcon 项目。在 ServBay 的『主机』设置中,添加一个新的主机:
- 名字:
My First Phalcon Dev Site
- 域名:
servbay-phalcon-test.local
- 网站类型:
PHP
- PHP 版本:选择对应的 PHP 版本
- 网站根目录:
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
详细设置步骤请参考 添加第一个网站。
添加示例代码
在 app/config/routes.php
文件中添加以下代码,以输出 "Hello ServBay!":
$router->add(
'/',
[
'controller' => 'index',
'action' => 'index',
]
);
2
3
4
5
6
7
在 app/controllers/IndexController.php
文件中添加以下代码:
class IndexController extends ControllerBase
{
public function indexAction()
{
return 'Hello ServBay!';
}
}
2
3
4
5
6
7
访问网站
打开浏览器,访问 https://servbay-phalcon-test.local
,你会看到网页输出 Hello ServBay!
。
NoSQL数据库示例
Redis 示例
安装 Redis 扩展
在 ServBay 中,Redis 扩展已经预装好,无需额外安装。
配置 Redis
在
app/config/config.php
文件中添加 Redis 连接信息:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14配置路由
在
app/config/routes.php
文件中添加以下代码:php$router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] );
1
2
3
4
5
6
7使用 Redis
在控制器中使用缓存:
phpuse Phalcon\Cache\Adapter\Redis; use Phalcon\Storage\SerializerFactory; class IndexController extends Controller { public function redisAction() { $serializerFactory = new SerializerFactory(); $options = [ 'defaultSerializer' => 'Json', 'lifetime' => 7200, 'host' => '127.0.0.1', 'port' => 6379, 'index' => 1, ]; $cache = new Redis($serializerFactory, $options); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Redis!'; $cache->set($cacheKey, $cachedData); } return $cachedData; } }
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打开浏览器,访问
https://servbay-phalcon-test.local/redis
关系型数据库示例
创建数据库结构和迁移文件
创建迁移文件
使用 Phalcon DevTools 创建迁移文件:
bashvendor/bin/phalcon migration generate --directory=servbay-phalcon-app
1编辑迁移文件
在
migrations
目录下创建一个新的迁移文件,并编辑它以定义数据库表结构:phpuse Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; class UsersMigration_100 extends Migration { public function morph() { $this->morphTable('users', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'autoIncrement' => true, 'notNull' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, ] ), new Column( 'email', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, 'unique' => true, ] ), ], 'indexes' => [ new Index('PRIMARY', ['id'], 'PRIMARY'), new Index('email_UNIQUE', ['email'], 'UNIQUE'), ], ]); } }
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运行迁移
使用 Phalcon DevTools 命令运行迁移,创建数据库表:
bashvendor/bin/phalcon migration run --directory=servbay-phalcon-app
1
MySQL 示例
配置 MySQL
在
app/config/config.php
文件中配置 MySQL 连接信息:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9配置路由
在
app/config/routes.php
文件中添加以下代码:php$router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15写入用户数据
在控制器中写入用户数据:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; class IndexController extends Controller { public function mysqlAddAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added' : 'Failed to add user'; } public function mysqlAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $users = $connection->fetchAll('SELECT * FROM users', \Phalcon\Db\Enum::FETCH_ASSOC); echo json_encode($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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39打开浏览器,访问
https://servbay-phalcon-test.local/mysql-add
和https://servbay-phalcon-test.local/mysql
通过以上步骤,您成功创建并运行了一个 Phalcon 项目,并使用 ServBay 提供的功能来管理和访问您的项目,同时连接了多种数据库并调用数据。