PHP原生實現簡易的MVC框架

来源:https://www.cnblogs.com/artsmp/archive/2019/12/13/12037049.html
-Advertisement-
Play Games

目錄結構: —|controller —|Home.php —|model —|view —|welcome.php —|index.php 基本原理: 首頁 index.php 通過獲得地址欄中的路由名稱獲得對應控制器以及控制的方法名,通過require引入到index.php首頁中。通過引入的對 ...


目錄結構:

—|controller

—|Home.php

—|model

—|view

—|welcome.php

—|index.php

基本原理:

首頁 index.php 通過獲得地址欄中的路由名稱獲得對應控制器以及控制的方法名,通過require引入到index.php首頁中。通過引入的對應控制器的類實例化一個對象,對象調用路由地址映射的方法,實現對視圖層的調用顯示。

實現具體代碼:

  1. /index.php 首頁代碼實現:

<?php

# 獲取當前的服務地址
$server = $_SERVER;

#獲取到當前訪問的主機名之後的URI
$path = $server['REQUEST_URI'];  # /test/index.php/home/welcome

$path = ltrim($path, '/'); # 去掉獲得的路徑前的 /
$controller_method = explode('/', $path); # 根據 / 獲得分割數組來取得控制器名字和對應方法
$controller = ucfirst($controller_method[2]); # 將控制器名字的第一個更換為大寫
$method = $controller_method[3]; # 對應的方法名
require_once __DIR__.'/controller/'.$controller.'.php'; # 定位到當前使用的控制器

$obj = new $controller(); //實例化控制器對象

$obj->$method(); //控制器對象調用目標方法

exit($obj);
  1. /controller/Home.php 控制器代碼實現:

<?php
class Home{

   public function index(){
       echo 'hello MVC';
  }

   public function welcome(){
       require_once __DIR__.'/../view/welcome.php';
  }
}
  1. /view/welcome.php 視圖層代碼實現:

<!DOCTYPE html>
<html>
<head>
   <title>welcome</title>
</head>
<body>
<div style="font-size: 18px;text-align: center;color: red;">welcome to hefei</div>
<?php echo date('Y-m-d H:i:s')?>
</body>
</html>

結束語:

基本上大部分框架都是基於MVC架構實現的,懂得基本的MVC框架設計的原理,有助於我們學習框架,以及對良好的框架的應用更加得心應手,並能很好地理解其中的設計思想,慢慢演化成為一個有想法的Coder。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • nodejs-翻轉演算法 1 /** 2 * Created by moon on 2019/12/14. 3 */ 4 //程式運行完成時一定要有輸出語句,本工具才能正確展示運行結果。 5 6 7 function abc() 8 { 9 var n = 50; 10 var min_n = n / ...
  • 直接使用官方子包可以實現websocket協議, golang.org/x/net/websocket 如果在這個目錄沒有這個包就去github下載net庫,放進這個目錄$GOPATH/src/golang.org/x/net就行了 服務端代碼: package main import ( "tim ...
  • 一、 前言 作為一枚程式員,你肯定對IntelliJ IDEA這個工具一點也不陌生!或許你沒有用過,但你也一定聽說過。作為在業界被公認為最好的java開發工具,IDEA每次大版本更新都備受矚目。劃重點,IntelliJ IDEA 2019.3現已發佈! 近期,我也是從2019.2版本升級到了2019 ...
  • 1 # coding:utf-8 2 3 4 class Animal(object): 5 def __init__(self): 6 self._name = None 7 self._f = None 8 9 def eat(self): 10 print("%s吃%s" % (self._n ...
  • 1 class Cat(Animal): 2 def __init__(self): 3 import warnings 4 warnings.warn("Cat類帶刪除線了", DeprecationWarning) 5 6 def run(self): 7 import warnings 8 w... ...
  • 有時候會遇到這種情況,某些屬性指向限制在特定範圍內,當別人調用的時候,只能賦值在這特定範圍內的值。這樣的情況有哪些呢?比如有一個屬性是用來放年齡的,那麼這個年齡就不能被設置為負數。還有人的性別隻有男跟女兩種選擇,別來一個雌雄同體。在這樣的情況下,就會用到封裝跟隱藏。 信息的封裝和隱藏 Java中通過 ...
  • 關閉防火牆,設置虛擬機和本機在同一網段,還是ping不同 解決方法:在VMware中點擊 編輯 >虛擬網路編輯器 >更改設置 >還原預設設置 然後重新配置虛擬機和本機在同一網段,關閉VMnet1,啟動VMnet8 ...
  • 軟體包:類似於電腦的文件管理方式,主要解決同名文件。 包幫助管理大型軟體系統:將語義類似的類組織到包中;解決類命名衝突的問題。 包可以包含類和子包。 關鍵字——package package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。若預設該語句,則指定為無名包。 格式:pac ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...