ThinkPHP
框架目前已經到了 6
,與 5
相比,目錄結構有所改變, 5
的核心框架在根目錄 thinkphp
下,而 6
放在了 vendor
的 topthink
。6
改進了中介軟體, ORM
元件獨立等等。但是他們的基本框架原理是一致的,比如支援 MVC
開發模式,都採用了路由、容器、控制反轉、依賴注入功能,使用 composer
實現類的自動載入等等。熟悉 ThinkPHP
框架原理對使用 5
或者 6
乃至以後的 7
都會更得心應手。
什麼是 MVC
?
MVC
是一種使用MVC
(Model View Controller
模型-檢視-控制器)設計建立Web
應用程式的模式。Model
(模型)是應用程式中用於處理應用程式資料邏輯的部分。通常模型物件負責在資料庫中存取資料。View
(檢視)是應用程式中處理資料顯示的部分。通常檢視是依據模型資料建立的。Controller
(控制器)是應用程式中處理使用者互動的部分。通常控制器負責從檢視讀取資料,控制使用者輸入,並向模型傳送資料。
搭建 LNMP
具體如何搭建 LNMP
平臺可以參考 Linux 開發環境 。本實驗環境引數為
CentOS Linux release 7.8
PHP 7.4.0
Nginx/1.18.0
Mysql Ver 14.14 Distrib 5.7.31
Xhell 5
Navicat premium 15
VS code 1.48.1
Phpstorm 2020.1
建立虛擬主機
server {
listen 80;
server_name diy.tp;
access_log logs/diy.tp..access.log main;
error_log logs/diy.tp..error.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location \ {
try_files $uri $uri/ /index.html index.php;
}
location ~ ^(.+\.php)(.*)$ {
# 實驗根目錄所在路徑,起始測試檔案放於此
root /home/web/mytp/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# 設定 PATH_INFO 獲取 url 中的模組、控制器和方法
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
建立測試資料
// 建立資料庫
CREATE DATABASE tp;
// 建立資料表
CREATE TABLE `employees` (
`empNum` int(10) unsigned PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '員工 id',
`name` varchar(10) NOT NULL DEFAULT ' ' COMMENT '姓名',
`gender` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '性別',
`mobile` varchar(20) NOT NULL DEFAULT ' ' COMMENT '手機號',
`email` varchar(40) NOT NULL DEFAULT ' ' COMMENT '郵箱',
) ENGINE=InnoDB DEFAULT CHARSET=utf8
// 插入測試資料
INSERT INTO `employees` VALUES (5000, 'Bob', 1, '12345678900', 'bob@thinkphp.demo');
INSERT INTO `employees` VALUES (5001, 'David', 1, '12345678901', 'david@thinkphp.demo');
INSERT INTO `employees` VALUES (5002, 'Michael', 1, '12345678902', 'michael@thinkphp.demo');
INSERT INTO `employees` VALUES (5003, 'Lily', 0, '12345678903', 'lily@thinkphp.demo');
INSERT INTO `employees` VALUES (5004, 'Lucy', 0, '12345678904', 'lucy@thinkphp.demo');
INSERT INTO `employees` VALUES (5005, 'Rose', 0, '12345678905', 'rose@thinkphp.demo');
INSERT INTO `employees` VALUES (5006, 'Merry', 0, '12345678906', 'merry@thinkphp.demo');
建立檢視 employee.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<table border="2" cellpadding="1" cellspacing="9">
<tr><th>員工編號</th><th>姓名</th><th>性別</th><th>手機號</th><th>郵箱</th></tr>
// 可以直接使用控制器中的變數 $data
<?php foreach ($data as $row): ?>
<tr>
<td><?=$row['empNum'] ?></td>
<td><?=$row['name'] ?></td>
<td><?=['女', '男'][$row['gender']] ?></td>
<td><?=$row['mobile'] ?></td>
<td><?=$row['email'] ?></td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
建立模型 EmployeeModel.php
class EmployeeModel
{
protected $link;
// 連線資料庫
public function __construct()
{
$this->link = new mysqli('127.0.0.1', 'root', '123456', 'tp');
$this->link->set_charset('utf8');
}
// 獲取資料
public function getAll()
{
$sql = "SELECT * FROM employees";
$res = $this->link->query($sql);
return $res->fetch_all(MYSQLI_ASSOC);
}
}
建立控制器 EmployeeController.php
class EmployeeController
{
public function index()
{
require 'EmployeeModel.php';
$model = new EmployeeModel();
// 此資料將被用於檢視 <table> 表格中
</table>
$data = $model->getAll();
require 'employee.html';
}
}
建立 index.php
require 'EmployeeController.php';
$employee = new EmployeeController();
$employee->index();
此時目錄結構
/home/web/mytp/public/
EmployeeController.php
employee.html
EmployeeModel.php
index.php
訪問 http://diy.tp/index.php
,執行結果為
本作品採用《CC 協議》,轉載必須註明作者和本文連結