一步一步學PHP MVC 框架 乙個簡單例子

2021-10-10 03:28:47 字數 4527 閱讀 9297

前言:mvc模式是php下的預設開發模式。不懂mvc模式的請出門左轉,有很多php在mvc的開發的教程。本教程僅僅以乙個比較簡單的例子進行講解。

環境:xampp(php 7.4.10) + ubuntu 20.04。安裝略過。

step 0:建立目錄

這裡把.htaccess的部分放在後面,把初始化的部分提前。許多寫程式的人都會有乙個基本思路:先把初始化的部分準備好,然後其餘的部分隨後跟進,這裡也把這部分提前。

public/index.php

<?php

require_once;=

new;

<?php

class

controller

<?php

require_once

;require_once

'core/controller.php'

;

<?php

class

}

這裡,進行一次測試

顯示:ok。

step 2: 完善controller

<?php

class

public

function

parseurl()

}}

http://localhost:9999/tutorials/mvc/public/?url=iamnewurl 嘗試一下。

到現在為止,可以把url的解析部分展現出來。

mvc的另外一部分url相關的重定向功能則需要.htaccess檔案進行。這裡,我試著慢慢講解一下。

step 3: 重定向與.htaccess

這裡,先做個嘗試,mvc/public/.htaccess

options -indexes
此時,再嘗試http://localhost:9999/tutorials/mvc/public/css/ 會顯示禁止訪問。

進一步擴充套件mvc/public/.htaccess

options -indexes

rewriteengine on

rewritebase /tutorials/mvc/

public

rewritecond %!-d

rewritecond %!-f

rewriterule ^(.

+)$ index.php?url=$1[

qsa,l]

rewriteengine on 是通知apache伺服器要啟動重定向功能了。

rewritebase /tutorials/mvc/public 是告訴重定向的根目錄。為什麼是這裡?因為mvc框架下預設要讓index.php負責處理url,而index.php在public資料夾下,所以就在這裡。

rewritecond % !-d 與rewritecond % !-f分別對應的目錄與檔案。

rewriterule ^(.+)$ index.php?url=$1 [qsa,l] 是核心,會把url傳給index.php

step 4: 進一步完善parseurl

<?php

瀏覽器會顯示array ( [0] => home [1] => good [2] => night [3] => thanks )

修改後parseurl基本功能就是去除右側的空格,然後依照url的格式進行切割。

這裡,經過分割後,就會進一步把引數傳給對應的class, function, argument等,具體順序如何安排,看個人的喜好,一般地,[0]對應的是controller,[1]對應該controller的方法,[2]之後的是方法的引數,後面的也是按照這個順序進行。

step 5: 呼叫對應的controller

<?php

class

home

}

<?php

class

require_once

.$this

->

controller

.'.php'

;$this

->

controller

=new

$this

->

controller

;var_dump

($this

->

controller);

}public

function

parseurl()

}}

嘗試http://localhost:9999/tutorials/mvc/public/home 返回

object(home)#2 (3) }

意思是找到了home.php。如果換成個別的不存在的檔案,file_exists會找不到檔案,甚至會報錯。

step 6 : 呼叫對應的controller 的相應的方法

<?php

class

require_once

.$this

->

controller

.'.php'

;$this

->

controller

=new

$this

->

controller

;// var_dump($this->controller);if(

null

!==[

$url[1

]])}

$this

->

params

=$url

?array_values

($url):

;// print_r($this->params);

call_user_func_array([

$this

->

controller

,$this

->

method],

$this

->

params);

}public

function

parseurl()

else

}}

<?php

class

contact

}

http://localhost:9999/tutorials/mvc/public/contact/index/mark/john返回

good night mark and john

至此,接收url,呼叫controller的方法部分完成,下面的是完成model的部分。

step 7 :model部分

<?php

class

controller

}

<?php

class

home

extends

controller

}

<?php

class

user

http://localhost:9999/tutorials/mvc/public/home/index/billy 返回的是billy

這背後的邏輯是:由home.php繼承自controller.php的例項化model的方法,在接受到url傳遞而來的function名字後,呼叫該方法(上面的例子中呼叫了user.php)。

step 8 :view部分

<?php

class

controller

public

function

view

($view

,$data=[

])}

hello <?php

$data

['name'];

?>

<?php

class

home

extends

controller

}

齊活。

這之後,就需要orm的內容。

一步一步學cscope

告之 1,我不喜歡寫部落格 因為感覺太浪費時間 2,部落格能記住自己某階段學過的東西,而這些東西可能會很快的忘卻 所以我以後要學著在部落格上浪費時間 前言 本文件記錄了我今天 2007 11 9 下午學習cscope的一點收穫,特收錄部落格以作分享。在學習cscope過程中查閱了大量的文件,但發現適...

一步一步學Linq to sql

一步一步學linq to sql 一 預備知識 一步一步學linq to sql 二 datacontext與實體 一步一步學linq to sql 三 增刪改 一步一步學linq to sql 四 查詢句法 一步一步學linq to sql 五 儲存過程 一步一步學linq to sql 六 特性...

一步一步學RenderMonkey

rendermonkey的基本使用方法 用rendermonkey 進行shader開發 一 用rendermonkey 進行shader開發 二 rendermonkey製作photoshop特效 前言 rendermonkey作為shader開發利器而為人所熟知,我們可以專心於shader的編寫...