0%

[技能檢定]題組三 步驟3 建立Controller及共用函式檔

整理好素材及開完資料表後,接著我們會製作DB類別檔,把會用到的一些功能都封裝在DB類別中,再透過繼承去延伸各個需要的功能

建立各資料表的繼承類別

DB類別請參考先前關於DB class的解釋:
[技能檢定]網頁乙級檢定-前置作業-程式功能整合測試

controller 目錄下建立以下檔案,原則上是一張資料表對應一個檔案,其中 DB.php 是父類別:

接著在每個類別檔中引入DB.php,並且建立繼承的類別:

controller/Poster.php

1
2
3
4
5
6
7
8
include_once "DB.php";

class Poster extends DB{
function __construct()
{
parent::__construct('posters');
}
}

controller/Movie.php

1
2
3
4
5
6
7
include_once "DB.php";
class Movie extends DB{
function __construct()
{
parent::__construct("movies");
}
}

controller/Order.php

1
2
3
4
5
6
7
8
9
include_once "DB.php";

class Order extends DB{

function __construct()
{
parent::__construct('orders');
}
}

建完各個類別後,為了後續的操作方便,我們將這些類別都引入到一個檔案中,而這個檔案又會分別被 index.phpbackend.php 引入,相當於整個網站的所有頁面都可以引用到這個檔案的內容。

/base.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
session_start();       //啟用session功能
date_default_timezone_set("Asia/Taipei"); //設定網站的時區為亞洲台北

//將各個類別引入到這個共用檔中
include_once __DIR__ . "/controller/Poster.php";
include_once __DIR__ . "/controller/Movie.php";
include_once __DIR__ . "/controller/Order.php";

//簡易的自訂函式
/**
* 用來顯示陣列內容-除錯時使用
*/
function dd($array){
echo "<pre>";
print_r($array);
echo "</pre>";
}

/**
* 簡化header('location:')的使用
* 將請求導向其他檔案或頁面
*/
function to($url){
header("location:".$url);
}

/**
* 用來處理較複雜的sql語句,比如子查詢或聯表查詢
* 預設回傳的資料是2維陣列
*/
function q($sql){
$pdo=new PDO("mysql:host=localhost;charset=utf8;dbname=db13",'root','');
return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}

//宣告各個類別的物件變數
$Poster=new Poster;
$Movie=new Movie;
$Order=new Order;

接著將這個檔案引入到 index.phpbackend.php 中:

/index.php/backend.php

1
2
3
4
<?php include_once "base.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0039) -->
<html xmlns="http://www.w3.org/1999/xhtml">