亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 27
粉絲 0
評論 0
訪問量 23408
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
030-12月06日-MVC小框架
冇忉丼
原創(chuàng)
1433人瀏覽過

MVC小框架

MVC作為一種常用的設(shè)計(jì)模式,得到了如TP5、Laravel等框架的廣泛采用。
下面以電影表為例進(jìn)行實(shí)踐

目錄結(jié)構(gòu)

model控制器

連接數(shù)據(jù)庫

  1. <?php
  2. /**
  3. * 數(shù)據(jù)庫的基本操作
  4. */
  5. //7個方法實(shí)現(xiàn)兩類功能:1.創(chuàng)建當(dāng)前類的單一實(shí)例 2.創(chuàng)建數(shù)據(jù)庫的基本操作
  6. //use PDO;
  7. class Db
  8. {
  9. //單例模式--$instance本類的實(shí)例
  10. private static $instance = null;
  11. //連接數(shù)據(jù)庫
  12. private $pdo = null;
  13. //數(shù)據(jù)庫的默認(rèn)連接參數(shù)
  14. private $dbConfig=[
  15. 'db'=>'mysql',
  16. 'host'=>'localhost',
  17. 'port'=>'3306',
  18. 'dbname'=>'anguoguo',
  19. 'user'=>'root',
  20. 'password'=>'root',
  21. // 'charset'=>'utf8'//默認(rèn)字符集有無必要設(shè)置
  22. ];
  23. public $insertId = null;//新增主鍵id
  24. public $num = 0;//新增更改記錄
  25. private function __construct($params)
  26. {
  27. //初始化連接參數(shù)--因用戶可能有自定義的一些參數(shù)
  28. $this->dbConfig = array_merge($this->dbConfig,$params);//數(shù)組合并
  29. //連接數(shù)據(jù)庫
  30. $this->connect();
  31. }
  32. //禁止外部克隆
  33. private function __clone()
  34. {
  35. // TODO: Implement __clone() method.
  36. }
  37. public static function getInstance($params=[]){
  38. if(!self::$instance instanceof self){
  39. self::$instance = new self($params);
  40. }
  41. return self::$instance;//獲取類的單一實(shí)例
  42. }
  43. private function connect(){//連接數(shù)據(jù)庫還是在本類中使用,故使用private
  44. try {
  45. //數(shù)據(jù)源
  46. $dsn = "{$this->dbConfig['db']}:host={$this->dbConfig['host']};
  47. port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']}";
  48. //創(chuàng)建PDO對象
  49. $this->pdo = new PDO($dsn,$this->dbConfig['user'],$this->dbConfig['password']);
  50. // //設(shè)置客戶端默認(rèn)字符集 pdo中讀和寫分開,寫是exec,查詢是query
  51. // $this->pdo->query("SET NAMES {$this->dbConfig['charset']}");
  52. }catch (PDOException $error){
  53. die('數(shù)據(jù)庫連接失敗' . $error->getMessage());
  54. }
  55. }
  56. //數(shù)據(jù)表的寫操作:增、刪、改 && 返回受影響的記錄
  57. public function exec($sql){
  58. $num = $this->pdo->exec($sql);
  59. if($num>0){
  60. if(!empty($this->pdo->lastInsertId())){//null !==
  61. $this->insertId = $this->pdo->lastInsertId();
  62. }
  63. $this->num = $num;//返回受影響的記錄
  64. }else{
  65. $error = $this->pdo->errorInfo();//獲取最后操作的的錯誤信息數(shù)組
  66. print '操作失敗'.$error[0].':'.$error[1].':'.$error[2];
  67. }
  68. }
  69. //獲取單條查詢結(jié)果
  70. public function fetch($sql){
  71. return $this->pdo->query($sql)->fetch(PDO::FETCH_ASSOC);
  72. }
  73. //獲取多條查詢結(jié)果
  74. public function fetchAll($sql){
  75. return $this->pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  76. }
  77. }

Model.php公共模型類—完成數(shù)據(jù)庫連接及一些公共方法

  1. <?php
  2. class Model
  3. {
  4. protected $db = null;//只給子類調(diào)用,數(shù)據(jù)庫連接對象
  5. public $data = null;
  6. public function __construct()
  7. {
  8. $this->init();//初始化的方法,完成數(shù)據(jù)庫鏈接
  9. }
  10. private function init(){
  11. $dbConfig = [
  12. 'dbname'=>'anguoguo',
  13. 'user'=>'root',
  14. 'password'=>'root',
  15. ];//Db.php中已經(jīng)定義了---這里是用戶的自定義參數(shù),即params
  16. //自定義鏈接配置覆蓋默認(rèn)參數(shù)
  17. $this->db = Db::getInstance($dbConfig);
  18. }
  19. //獲取單條數(shù)據(jù)
  20. public function get($id){
  21. $sql = "SELECT * FROM movies WHERE id={$id}";
  22. return $this->data = $this->db->fetch($sql);
  23. }
  24. //獲取全部數(shù)據(jù)
  25. public function getAll(){
  26. $sql = "SELECT * FROM movies";
  27. return $this->data = $this->db->fetchAll($sql);
  28. }
  29. }

MoviesModel.php放用戶自定義的方法

  1. <?php
  2. //用戶自定義模型
  3. class MoviesModel extends Model
  4. {
  5. //可以擴(kuò)展功能
  6. }

用戶自定義模型的控制器

MoviesController.php用戶自定義模型對應(yīng)的控制器

  1. <?php
  2. /**
  3. * 電影模塊控制器類通常包括:查詢,更新,添加,刪除
  4. * 模型根據(jù)數(shù)據(jù)表建立,控制器根據(jù)模塊創(chuàng)建
  5. * 所以一個控制器要完成一個模塊的功能,這里完成的查詢功能
  6. */
  7. //一張表對應(yīng)一個模型 控制器中的方法大多是模型操作的具體實(shí)現(xiàn) 大多數(shù)控制器類的方法都有對應(yīng)視圖文件
  8. class MoviesController//用戶自定義控制器,加Controller方便自動加載和明確操作
  9. {
  10. public function listAll(){
  11. //實(shí)例化模型,獲取數(shù)據(jù)
  12. $mov = new MoviesModel();
  13. $data = $mov->getAll();//來自父類Model中的方法
  14. // echo '<pre>';//格式化方便查看
  15. // print_r($data);
  16. // 有了視圖文件后取代上面的打印
  17. require "H:/Programfile/phpstudy_pro/WWW/html/lecture/easymvc/mvc/view/movies_list.php";
  18. //用相對路徑會出錯
  19. }
  20. //獲取單條數(shù)據(jù)
  21. public function info($id=1){
  22. $id = isset($_GET['mov_id'])? $_GET['mov_id']:$id;
  23. $mov = new MoviesModel();
  24. $data = $mov->get($id);//來自父類Model中的方法
  25. echo '<pre>';
  26. print_r($data);
  27. }
  28. }

請求分發(fā)器(整個項(xiàng)目controller控制器)

index.php項(xiàng)目的入口文件

  1. <?php
  2. //前端控制器--請求分發(fā)器,入口文件功能
  3. //加載模型類
  4. require 'model/Db.php';
  5. require 'model/Model.php';
  6. require 'model/MoviesModel.php';
  7. //加載控制器 路由 控制器及控制器中方法
  8. $controller = isset($_GET['c']) ? $_GET['c'] : 'Movies';//判斷當(dāng)前url中是否有c--controller
  9. $controller .= 'Controller';//給控制器添加后綴名
  10. //require 'controller/MoviesController.php';//加載控制器類,方便調(diào)用方法
  11. require 'controller/' . $controller . '.php';//加載控制器類,方便調(diào)用方法
  12. $action = isset($_GET['a']) ? $_GET['c'] : 'listAll';//獲取方法
  13. $mov = new $controller();//實(shí)例化自定義控制器類
  14. $mov->$action();//根據(jù)電影id,默認(rèn)為1

視圖

用fetch的數(shù)據(jù)渲染html頁面

  1. <!--視圖一般用模板引擎來寫-->
  2. <!doctype html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport"
  7. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  8. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  9. <title>MVC示例</title>
  10. </head>
  11. <body>
  12. <h2 align="center">電影目錄</h2>
  13. <table border="1" cellpadding="5" cellspacing="0" align="center" width="70%">
  14. <tr bgcolor="#6495ed">
  15. <th>ID</th>
  16. <th>片名</th>
  17. <th>圖片</th>
  18. <th>詳情</th>
  19. <th>分類</th>
  20. </tr>
  21. <?php foreach ($data as $mov): ?>
  22. <!-- MoviesController賦的變量為$data-->
  23. <tr align="center">
  24. <td><?php echo $mov['mov_id']; ?></td>
  25. <td><?php echo $mov['name']; ?></td>
  26. <td><?php echo $mov['image']; ?></td>
  27. <td><?php echo $mov['detail']; ?></td>
  28. <td><?php echo $mov['cate_id']; ?></td>
  29. </tr>
  30. <?php endforeach;?>
  31. </table>
  32. <p align="center">共計(jì):<?php echo count($data); ?>條記錄</p>
  33. </body>
  34. </html>

渲染后效果如下:

批改老師:天蓬老師天蓬老師

批改狀態(tài):合格

老師批語:有二點(diǎn)澄清一下: 1. MVC是編程思想,并非設(shè)計(jì)模式,類似的還是MVVM 2. MVC并非只在TP,Laravel中應(yīng)用, 只要涉及前后端合作開發(fā), 都可以使用它
本博文版權(quán)歸博主所有,轉(zhuǎn)載請注明地址!如有侵權(quán)、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務(wù)協(xié)議
0條評論
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)