Phalcon 框架 Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的 PHP 框架。 开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式呈现出来,可以直接使用。 Phalcon 也是松耦合的,可以根据项目的需要任意使用其他对象。
Phalcon 是一套实现MVC架构的高性能PHP应用程序框架。初始版本发布于2012年11月,开放源代码并基于BSD授权条款。与其他大部分的PHP框架不同,Phalcon是以扩展的方式以C语言所编写,因此Phalcon的执行速度高过其他PHP框架,并且消耗更少的资源,根据官方的测试,Phalcon是世界上速度最快的PHP框架, 没有之一。
具体的介绍参见技术文档
下面着重介绍数据库连接部分
数据库抽象层(Database Abstraction Layer)
Phalcon\Db
是Phalcon\Mvc\Model
底层组件,由它驱动框架中的模型层。它完全由C语言编写,是一个独立的数据库高级抽象层。
与传统模型相比,该组件允许更底层的数据库操作。
数据库适配器(Database Adapters)
该组件使用适配器来封装特定的数据库操作。Phalcon使用PDO连接数据库,支持下列数据库引擎:
类
说明
Phalcon\Db\Adapter\Pdo\Mysql
世界上最流行的关系型数据库系统(RDBMS),作为服务器运行,支持多用户、多数据库访问
Phalcon\Db\Adapter\Pdo\Postgresql
Postgresql是一个强大的开源关系数据库系统,超过15年的发展和通过验证的架构,为其赢得了正确、可靠、数据完整的良好声誉
Phalcon\Db\Adapter\Pdo\Sqlite
SQLite是一个实现自包含、无服务、零配置的事务型数据库
数据库语言(Database Dialects)
phalcon语言封装了每个数据库的具体操作,为适配器提供通用方法和SQL生成器。
类
说明
Phalcon\Db\Dialect\Mysql
MySQL特定语言
Phalcon\Db\Dialect\Postgresql
Postgresql特定语言
Phalcon\Db\Dialect\Sqlite
SQLite特定语言
工厂类(Factory)
使用适配器选项加载PDO:
<?php use Phalcon\Db\Adapter\Pdo\Factory; $options = [ 'host' => 'localhost', 'dbname' => 'blog', 'port' => 3306, 'username' => 'sigma', 'password' => 'secret', 'adapter' => 'postgresql', ]; $db = Factory::load($options);
连接数据库(Connection to Databases)
建立数据库连接,必须实例化适配器类,它只接收一个包含连接参数的数组。下面例子展示了如何传递必选参数和可选参数来建立数据库连接:
<?php // 必选参数 $config = [ 'host' => 'localhost', 'username' => 'postgres', 'password' => 'secret1', 'dbname' => 'template', ]; // 可选参数 $config['schema'] = 'public'; // 建立连接 $connection = new \Phalcon\Db\Adapter\Pdo\Postgresql($config);
使用工厂类连接数据库(Connecting using Factory)
使用一个简单的ini文件来配置 / 连接数据库。
[database] host = TEST_DB_MYSQL_HOST username = TEST_DB_MYSQL_USER password = TEST_DB_MYSQL_PASSWD dbname = TEST_DB_MYSQL_NAME port = TEST_DB_MYSQL_PORT charset = TEST_DB_MYSQL_CHARSET adapter = mysql
<?php use Phalcon\Config\Adapter\Ini; use Phalcon\Db\Adapter\Pdo\Factory; use Phalcon\Di; $di = new Di(); $config = new Ini('config.ini'); $di->set('config', $config); $di->set( 'db', function () { return Factory::load($this->config->database); } );
配置扩展
注意:phalcond和PHP的版本要对应;安装phalcon拓展必须先安装psr拓展;如果是windows下安装phalcon一定要注意nts和非nts版本,查看如下图:
示例代码 结构图如下:
主要文件介绍
config.php
配置对象,位于app/config
return new \Phalcon\Config([ 'database' => [ 'adapter' => 'Postgresql', 'host' => 'localhost', 'username' => 'test', 'password' => 'test', 'dbname' => 'test', 'charset' => 'utf8' ], 'application' => [ 'appDir' => APP_PATH . '/', 'controllersDir' => APP_PATH . '/controllers/', 'modelsDir' => APP_PATH . '/models/', 'migrationsDir' => APP_PATH . '/migrations/', 'viewsDir' => APP_PATH . '/views/', 'pluginsDir' => APP_PATH . '/plugins/', 'libraryDir' => APP_PATH . '/library/', 'cacheDir' => BASE_PATH . '/cache/', //'baseUri' => '/', 'baseUri' => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]) ] ]);
services.php
配置对象,位于app/config
/** * Database connection is created based in the parameters defined in the configuration file */ $di->setShared('db', function () { $config = $this->getConfig(); $class = 'Phalcon\Db\Adapter\Pdo\\' . $config->database->adapter; $params = [ 'host' => $config->database->host, 'username' => $config->database->username, 'password' => $config->database->password, 'dbname' => $config->database->dbname, 'charset' => $config->database->charset ]; if ($config->database->adapter == 'Postgresql') { unset($params['charset']); } return new $class($params); });
User.php
model类对象 ,位于app/models
<?php use Phalcon\Mvc\Model; class User extends Model{ public $id; public $name; public $age; }
IndexController.php
controller控制器对象,位于app/controllers
<?php declare(strict_types=1); class IndexController extends ControllerBase { public function indexAction() { } public function testAction(){ $res=User::find("id = 1"); return json_encode($res,JSON_UNESCAPED_UNICODE); } }
执行结果:
注意事项 1、提示:could not find driver
解决方案如下:检查是否启用pdo_pgsql插件