本文目的

本文目的主要是介绍Phalcon框架与瀚高数据库V9.0如何适配,以及如何在数据库进行业务操作。

Phalcon框架介绍

Phalcon,一个高性能的PHP框架,以其出色的执行速度和简洁的API设计,深受开发者喜爱。掌握Phalcon,意味着能够更高效地构建
稳定、安全且易扩展的Web应用程序。

Phalcon是一种独特的PHP框架,因为它是用C和C++编写的,因此与其他框架相比具有卓越的性能。Phalcon的低开销使其成为高性能应用程序的出色选择。有以下特点:

  • 模块化结构:该框架立足于一组松散耦合的模块,允许开发人员只使用所需的组件。这种模块化方法不仅使代码库变得轻量级,还提高了代码的可重用性和可维护性。
  • 高速度:Phalcon是作为C扩展实现的,与其他PHP框架相比,它提供了无与伦比的速度并减少了开销。这种速度优势使其成为关注性能的高性能应用程序的理想选择。

Phalcon 框架本身并不包含数据库抽象层,这意味着它不直接提供数据库连接的功能。相反,Phalcon鼓励开发者使用现有的数据库抽象库,如 Phalcon Phalcon-incubator 中的Phalcon-incubator-database 或其他流行的 PHP 数据库,如 PDO (PHP DataObjects) 或专门的 ORM(对象关系映射)库,如 Eloquent (Laravel ORM),Doctrine, 或 Phalcon 自带的 Phalcon\Mvc\Model。

本适配手册采用数据库连接方式是 Phalcon 自带的Phalcon\Mvc\Model,可以参阅瀚高技术文档

瀚高数据库V9.0介绍

瀚高数据库管理系统 V9(以下简称 HGDB-EEV9),是瀚高公司核心开发团队在深入研究和消化 PostgreSQL最新内核基础上,融合公司多年 Oracle数据库兼容特性研发及运维管理经验,为用户精心打造的一款面向核心 OLTP业务的企业级关系型数据库。

瀚高数据库管理系统 V9 不仅延续了 PostgreSQL最新的内核及功能,同时拓展了丰富的企业级功能。和 PostgreSQL社区版本相比,瀚高数据库管理系统 V9
在兼容性、高可用性、高可靠性、安全性、易用性方面都有不同程度的增强。

更多的数据库介绍请参阅 瀚高基础软件股份有限公司-国产基础软件先行者

环境部署

组件 部署工具
PHP Windows环境
appserv-x64-9.3.0.exe
(php7.3、phalcon4.1.2、Phalcon DevTools4.1.1)
瀚高数据库 Linux环境
V9.0
Vscode Windows环境
Vscode1.92.0

具体的环境部署请参数组件的部署手册。

  • Php部署成功

  • 数据库部署成功

注:本手册的数据库安装环境为麒麟服务器版V10-SP3+x86(瀚高数据库v9.0目前已全栈适配)

适配过程

安装Phalcon扩展

下载插件

启用插件

打开php版本安装目录的扩展文件夹,如D:\AppServ\php7\ext,将下载的php_psr.dllphp_phalcon.dll文件放入文件夹

  1. php.ini增加下面一行,因为phalcon框架以使用扩展的方式运行的
extension= php_phalcon.dll
extension=php_psr.dll

2、插件安装成功后如图

创建Phalcon项目

下载Phalcon-DevTools

Phalcon-DevTools是Phalcon框架的官方开发工具包,它提供了一组用于快速开发的命令行脚本。这些脚本可以帮助开发者快速生成项目结构、模型、视图、控制器等代码,极大地简化了Phalcon项目的初始化和开发流程。

DevTools提供了多个命令,可以快速生成代码:

  • model:根据数据库表结构生成模型文件。
  • controller:创建控制器文件,用于处理HTTP请求和返回HTTP响应。
  • view:生成视图文件,这些文件通常包含了与用户的交互逻辑。
  • scaffold:基于数据库表自动生成一整套模型、视图、控制器代码,适用于快速原型开发。
  • migration:用于数据库结构的版本控制,可以帮助开发者管理数据库的变更。
  • 更多命令请参阅帮助

下载地址:https://github.com/phalcon/phalcon-devtools

Phalcon-DevTools是基于Composer的,它依赖于Composer来管理其依赖项,如果未安装Composer,你可以从Composer官网下载并安装它。

工具安装成功后如图

创建Phalcon项目

C:\AppServ>cd C:\project\PHP
C:\project\PHP>phalcon project Phalcon_Demo --enable-webtools
Phalcon DevTools (4.1.1)
Success: Controller "index" was successfully created.
Info: C:\project\PHP\Phalcon_Demo\app\controllers\IndexController.php
Success: Project 'Phalcon_Demo' was successfully created.
Info: Please choose a password and username to use Database connection.
Info: Used default: 'root' without password.
C:\project\PHP>

在vscode中打开项目,结构如下

连接数据库

  1. 创建表
---创建表
create table student (id serial,name varchar(10),sex varchar(1),age int,grade int,address varchar(100));
--插入数据
insert into student
select t,getChnChar(3,2),
case when t%2=0 then '男' else '女' end,(random()*20)::INT,
(random()*20)::INT,'宁夏回族自治区银川市兴庆区牧兰公路附8号'||t||'栋'
from generate_series(1,10) as n(t);

数据如图

2、编辑config.app,添加postgresql连接信息

3、编辑services.app,增加对postgresql的处理

业务操作

  1. app\controller增加StudentController.php

  1. app\model增加Student.php

  1. app**views增加*student*

  • index.html
<div class="page-header">
<h1>Congratulations!</h1>
</div>
<p>You're now flying with Phalcon. Great things are about to happen!</p>
<p>This page is located at <code>views/student/index.phtml</code></p>
  • list.phtml
<link href="/css/style.css" rel="stylesheet">
<h2>学生信息列表</h2>
<a href="/student/new" class="add-btn">添加</a>
<?php if (count($students) > 0): ?>
<table class="custom-table">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>年级</th>
<th>住址</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<?php foreach ($students as $student): ?>
<tr>
<td><?php echo $student->id; ?></td>
<td><?php echo $student->name; ?></td>
<td><?php echo $student->sex; ?></td>
<td><?php echo $student->age; ?></td>
<td><?php echo $student->grade; ?></td>
<td><?php echo $student->address; ?></td>
<td class="action-buttons">
<a href="/student/edit/<?php echo $student->id; ?>" class="edit-btn">编辑</a>
<a href="/student/delete/<?php echo $student->id; ?>" class="delete-btn">删除</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php else: ?>
<p>数据为空。</p>
<?php endif; ?>
  1. public**css增加*style.css* 样式
.custom-table {
width: 100%;
border-collapse: collapse;
margin: 25px 0;
font-size: 0.9em;
font-family: sans-serif;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);
}
.custom-table thead tr {
background-color: #009879;
color: #ffffff;
text-align: left;
}
.custom-table th,
.custom-table td {
padding: 12px 15px;
}
.custom-table tbody tr {
border-bottom: 1px solid #dddddd;
}
.custom-table tbody tr:nth-of-type(even) {
background-color: #f3f3f3;
}
.custom-table tbody tr:last-of-type {
border-bottom: 2px solid #009879;
}
.custom-table tbody tr:hover {
background-color: #f1f1f1;
cursor: pointer;
}
.action-buttons a {
margin-right: 5px;
padding: 5px 10px;
text-decoration: none;
border-radius: 3px;
}
.edit-btn {
background-color: #4CAF50;
color: white;
}
.delete-btn {
background-color: #f44336;
color: white;
}

查看结果