CakePHP

1.简介

CakePHP是一个开源的MVC框架。 它使应用程序的开发,部署和维护变得更加容易。 CakePHP具有多个库来减少大多数常见任务的过载。

本文介绍 CakePHP 该如何连接使用瀚高数据库。

2.加载驱动

具体操作步骤请参考 php_pdo_pgsql 接口说明文档。

3.数据库连接

3.1.数据库准备

create database cakephp;

CREATE TABLE public.student (
stu_no character varying NOT NULL,
stu_name character varying
);

INSERT INTO public.student VALUES ('1', 'zhangsan');
INSERT INTO public.student VALUES ('2', 'lisi');

3.2.数据库配置

CakePHP有一个用来保存数据库配置的文件(用户名,密码,数据库名等),配置文件 config/app.php

'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Postgres',
'persistent' => false,
'host' => '192.168.100.101',
'username' => 'sysdba',
'password' => 'Qwer@1234',
'database' => 'cakephp',
'schema' => 'public',
'port' => 5866,
'encoding' => 'utf8',
'timezone' => 'UTC',
],

3.3.路由配置示例

路由规则定义在 config/routes.php 文件中。

$builder->connect('/student', ['controller' => 'Student', 'action' => 'list']);

3.4.Model 代码示例

在 **src/Model/Table/ 新建文件 StudentTable.php **,代码如下:

<?php
namespace App\Model\Table;
use Cake\ORM\Table;
class StudentTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config): void
{
parent::initialize($config);

$this->setTable('student');
$this->setPrimaryKey('id');
}
}

?>

3.5.控制层代码示例

在** src/controllers/ **新建文件 StudentController.php , 代码如下:

<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;
use Cake\Auth\DefaultPasswordHasher;

class StudentController extends AppController{

public function list(){
$student = TableRegistry::get('student');
$query = $student->find();
$this->set('results',$query);
}

}
?>

3.6.View 代码示例

templates/ 下新建目录 Student,新建文件 **list.php **,代码如下:

<table>
<tr>
<td>StuNo</td>
<td>StuName</td>
</tr>

<?php
foreach ($results as $row):
echo "<tr><td>".$row->stu_no."</td>";
echo "<td>".$row->stu_name."</td>";
endforeach;
?>
</table>

3.7.访问测试

浏览器访问 http://localhost:8765/student

image

4.常见问题

1) Database driver Cake\Database\Driver\Postgres cannot be used due to a missing PHP extension or unmet dependency.

问题原因:php未成功加载pdo_pgsql扩展

解决方案:php.ini 文件,检查pdo_pgsql是否加载成功

2) Connection to Postgres could not be established: SQLSTATE[08006] [7] authentication method 13 not supported

问题原因:瀚高数据库支持的认证密码加密方式包括 md5, sm3 和 scram-sha-256 ,报错是因为使用了sm3,驱动不支持国密算法

解决方案一:数据库密码认证方式修改为 md5 或 scram-sha-256

解决方案二:下载替换对应版本的驱动,具体操作方法请参考 php_pdo_pgsql 接口说明