博主信息
Victor的博客
博文
35
粉絲
0
評論
0
訪問量
10030
積分:0
P豆:78

MVC模式的工作原理--2019年10月31日

2019年11月03日 21:40:29閱讀數:362博客 / Victor的博客 / laravel框架

1、下載安裝composer,并把源設置為中國區鏡像或阿里云鏡像。
2、根據課堂案例,練習一下mvc的實現原理

一、安裝compower,下載源設置為中國區鏡像或阿里云鏡像

Composer 是 PHP 的一個依賴管理工具。我們可以在項目中聲明所依賴的外部工具庫,Composer 會自動安裝這些依賴的庫文件。
Composer 默認情況下不是全局安裝,而是基于指定的項目的某個目錄中(例如 vendor)進行安裝。
Composer 需要 PHP 5.3.2+ 以上版本,且需要開啟 openssl。
Composer 可運行在 Windows 、 Linux 以及 OSX 平臺上。

默認情況下執行 composer 各種命令是從國外的 composer 官方鏡像源獲取需要安裝的具體軟件信息,所以在不使用代理、不***的情況下,從國內訪問國外服務器的速度相對比較慢。

composer可以通過設置國內鏡像來下載依賴庫,以阿里云鏡像為例:

阿里云鏡像與 Packagist 官方實時同步,推薦使用最新的 Composer 版本。最新版本: 1.9.0下載地址: https://mirrors.aliyun.com/composer/composer.phar

設置方法如下:

usecomposer.jpg



二、練習MVC的實現原理

【1】創建如下目錄結構、文件

    1. controller:控制器
             --- Home.php類文件:派發功能;

    2. model:模型(業務邏輯 or 數據庫功能模塊)
              ---checklogin.php:ajax登錄驗證模塊;
              ---Show.php:模擬展示文章詳情 模塊;

    3. view:視圖
              ---longin.html:登錄頁面;

    4. static:需加載的靜態資源
              ---jquery類庫;

    5. Autoloader.php:自動加載類文件;

    6. Router.php:路由解析類文件;

    7. index.php:入口文件;



【2】不同url的運行結果如下圖:

http://www.php.com/mytest/1031mvc/index.php -->進入 登錄頁面:(或者直接訪問http://www.php.com/mytest/1031mvc/index.php/home/login)

1denglu.jpg

http://www.php.com/mytest/1031mvc/index.php/home/index  -->登錄成功進入 默認頁面:

2index.jpg

http://www.php.com/mytest/1031mvc/index.php/show/details  --> 模擬文章詳情頁面:

3show.jpg


【3】代碼實例:

實例  ----- index.php入口文件
<?php
include 'Router.php';
//通過Router類 解析地址,找到指定控制器中對于的模塊方法;
Router::get();
// Router::get('abcd', function () {echo '我的abcd';});
?>
運行實例 ?點擊 "運行實例" 按鈕查看在線實例
實例 ----- Router.php 路由解析類文件
<?php
include 'Autoloader.php';
class Router {
	public static $controller = 'Home';
	public static $action = 'login';
	//取模塊名稱和方法名稱
	public static function getRouter() {
		$array = !empty($_SERVER['PATH_INFO']) ? explode('/', strtolower($_SERVER['PATH_INFO'])) : [null, 'Home', 'login'];
		self::$controller = ucfirst($array[1]);
		self::$action = end($array);
	}
	//根據模塊名稱自動加載創建類的實例,并執行對應的方法
	public static function get($url = '', $function = null) {
		self::getRouter();
		switch (self::$controller) {
		case 'Home':
			$model = 'controller';
			break;
		case 'Show':
			$model = 'model';
			break;
		default:
			$model = $url;
			break;
		}
		//針對沒有模塊的情況 Router::get('abcd', function () {echo '顯示我的 abcd 頁面';});
		if (!(empty($model)) && !(empty($function))) {
			if (gettype($function) === 'object') {
				$function();   
				return;
			} //字符串另外判斷;
		}
		$model .= ('\\' . self::$controller);
		$method = self::$action;
		(new $model())->$method();
	}
}
?>
運行實例 ?點擊 "運行實例" 按鈕查看在線實例
實例  ----- Home.php 功能派發類模塊
<?php
namespace controller;
class Home {
	public function index() {
		echo '<p><span style="color:red;">Hello ! </span><strong>from Home -> index</strong><p>';
	}
	public function login() {
		require_once 'view/login.html';
	}
}
?>
運行實例 ?點擊 "運行實例" 按鈕查看在線實例
實例  -----  login.html 登錄頁面
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>登錄頁面</title>
	<script src="static/jquery-3.4.1.min.js"></script>
	<style type="text/css" media="screen">
		form{width: 55%;position: absolute;margin: 30px auto;}
		div{margin: 10px;text-align: right;}
	</style>
</head>
<body>
	<form action="model/checkLogin.php" method="post" accept-charset="utf-8">
		<div><label>用戶名:<input type="text" name="username" value=""></div>
		<div><label>密  碼:<input type="password" name="pwd" value=""></label></div>
		<div><label>驗證碼:<input type="text" name="vericode" value=""></label></div>
		<div><button type="button" onclick="save()">提交</button></div>
	</form>
<script>
	function save(){
		var username = $.trim($('input[name="username"]').val());
		var pwd = $.trim($('input[name="pwd"]').val());
		var vericode = $.trim($('input[name="vericode"]').val());
		var result = (username=='')?(function(){alert('請輸入用戶名');return;})()
		              :((pwd=='')?(function(){alert('請輸入密碼');return;})()
		              :((vericode=='')?(function(){('請輸入驗證碼');return;})():1;
		$.post('model/checkLogin.php',$('form').serialize(),function(data){
			alert(data.msg);
			return (data.code==0) && (function(){window.location.href = 'index.php/home/index';})();
		},'json');
	}
</script>
</body>
</html>
運行實例 ?點擊 "運行實例" 按鈕查看在線實例
實例   ----- Show.php 類文件
<?php
namespace model;
class Show {
	public function details() {
		echo '<p><span style="color:red;">顯示文章詳情 ! </span><strong>from Show -> details</strong><p>';
	}
}
?>
運行實例 ?點擊 "運行實例" 按鈕查看在線實例





【4】總結

再次練習MVC模型,諸如路徑解析、相對路徑和絕對路徑的細節問題上還是總會出錯;

項目文件沒有放到網站根目錄下,在路徑解析和去掉index.php的url管理方面還沒有完全搞清楚。











批改狀態:合格

老師批語:項目跑通了, 不錯

全部評論

文明上網理性發言,請遵守新聞評論服務協議

條評論
暫無評論暫無評論!
  • 澳洲幸运8在哪里开奖