前言: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的編寫...