建立並運行 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
文件中添加以下代碼:
namespace App\Controllers;
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
echo 'Hello ServBay!';
}
}
2
3
4
5
6
7
8
9
10
11
訪問網站
打開瀏覽器,訪問 https://servbay-phalcon-test.local
,你會看到網頁輸出 Hello ServBay!
。
NoSQL資料庫示例
Memcached 示例
安裝 Memcached 擴展
在 ServBay 中,Memcached 擴展已經預裝好,無需額外安裝。
配置 Memcached
在
app/config/config.php
文件中添加 Memcached 連接信息:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Memcached', 'host' => '127.0.0.1', 'port' => 11211, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14配置路由
在
app/config/routes.php
文件中添加以下代碼:php$router->add( '/memcached', [ 'controller' => 'index', 'action' => 'memcached', ] );
1
2
3
4
5
6
7使用 Memcached
在控制器中使用緩存:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Memcached; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function memcachedAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Memcached($frontCache, [ 'host' => '127.0.0.1', 'port' => 11211, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Memcached!'; $cache->save($cacheKey, $cachedData); } echo $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/memcached
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
在控制器中使用緩存:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Redis; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function redisAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Redis($frontCache, [ 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Redis!'; $cache->save($cacheKey, $cachedData); } echo $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
PostgreSQL 示例
配置 PostgreSQL
在
app/config/config.php
文件中配置 PostgreSQL 連接信息:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Postgresql', '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( '/pgsql-add', [ 'controller' => 'index', 'action' => 'pgsqlAdd', ] ); $router->add( '/pgsql', [ 'controller' => 'index', 'action' => 'pgsql', ] );
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\Postgresql; class IndexController extends Controller { public function pgsqlAddAction() { $connection = new Postgresql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay',
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19