CakePHP

1.簡(jiǎn)介

CakePHP是一個(gè)開(kāi)源的MVC框架。 它使應(yīng)用程序的開(kāi)發(fā),部署和維護(hù)變得更加容易。 CakePHP具有多個(gè)庫(kù)來(lái)減少大多數(shù)常見(jiàn)任務(wù)的過(guò)載。

本文介紹 CakePHP 該如何連接使用瀚高數(shù)據(jù)庫(kù)。

2.加載驅(qū)動(dòng)

具體操作步驟請(qǐng)參考 php_pdo_pgsql 接口說(shuō)明文檔。

3.數(shù)據(jù)庫(kù)連接

3.1.數(shù)據(jù)庫(kù)準(zhǔn)備

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.數(shù)據(jù)庫(kù)配置

CakePHP有一個(gè)用來(lái)保存數(shù)據(jù)庫(kù)配置的文件(用戶名,密碼,數(shù)據(jù)庫(kù)名等),配置文件 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.路由配置示例

路由規(guī)則定義在 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.訪問(wèn)測(cè)試

瀏覽器訪問(wèn) http://localhost:8765/student

image

4.常見(jiàn)問(wèn)題

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

問(wèn)題原因:php未成功加載pdo_pgsql擴(kuò)展

解決方案:php.ini 文件,檢查pdo_pgsql是否加載成功

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

問(wèn)題原因:瀚高數(shù)據(jù)庫(kù)支持的認(rèn)證密碼加密方式包括 md5, sm3 和 scram-sha-256 ,報(bào)錯(cuò)是因?yàn)槭褂昧藄m3,驅(qū)動(dòng)不支持國(guó)密算法

解決方案一:數(shù)據(jù)庫(kù)密碼認(rèn)證方式修改為 md5 或 scram-sha-256

解決方案二:下載替換對(duì)應(yīng)版本的驅(qū)動(dòng),具體操作方法請(qǐng)參考 php_pdo_pgsql 接口說(shuō)明