在我做的最後幾個網站中,我認爲我實現了一種MVC風格的控制器。在PHP中實現控制器的最佳方式是什麼?
我用mod_rewrite
通過index.php發送所有東西,所以url變成了查詢字符串。
它的工作,但我想知道這是否有點hacky,或只是公認的做事方式。有沒有更好的辦法?我不想要一個框架,我想學習自己做。
在我做的最後幾個網站中,我認爲我實現了一種MVC風格的控制器。在PHP中實現控制器的最佳方式是什麼?
我用mod_rewrite
通過index.php發送所有東西,所以url變成了查詢字符串。
它的工作,但我想知道這是否有點hacky,或只是公認的做事方式。有沒有更好的辦法?我不想要一個框架,我想學習自己做。
嘗試我在世界上最小的框架。
<?php
$g=$_GET;[email protected]$g['c']?$g['c']:'Home';
if([email protected]"c/$c.php")die('fail');
$m=method_exists($c,[email protected]$g['m'])?$m:'index';
$o=new$c();$o->$m($g);
這在index.php中,你的控件是在./c/Blog.php中的Blog.php。
class Blog {
function index()
{
echo "Hello world";
}
function otherpage()
{
echo "ZOMG!";
}
主要由作爲一個笑話,因爲我想作一個框架,可以適應在鳴叫,但基本的邏輯是有;-)
這就是我完成它的方式。然後我創建了一個新的基於URL的調度表,該控制器實例化以及運行哪個調度。
將所有內容通過單個輸入點(例如, index.php不是MVC,它是FrontController模式。儘管這與MVC很好。看到我的相關answer here。
除此之外,爲什麼不查看一些框架來了解他們是如何做到的。並不意味着你必須使用它們,只要看看它們的代碼並適應你自己的框架。
關於學習做自己怎麼樣,但仍使用框架?無論哪種方式,請看看像Symfony或CMS應用程序的開源框架,如Wordpress,Jommla!等等,你會發現他們都使用mod_rewrite來設置。
大多數PHP框架都使用mod_rewrite完成相同的目標,並且它是以分段方式壓制index.php並使url更友好的唯一方法。
我會說你是在正確的道路上。
您使用的方法稱爲FrontController Pattern,並且它也被這些框架用於與MVC模式一起使用。
如果您關心一個建議,我建議您通過每個頁面控制器來傳遞每個請求,擴展一個基本控制器,因爲每個站點都有一些基本數據結構,您可能需要在每個頁面中使用這些基礎數據結構,如模板和會話控制。
做了我的一天:D +1 – yoda 2009-12-17 15:35:28
這真的很棒:) – Skilldrick 2009-12-17 15:36:16
我還在準備一篇關於它的博客文章,但基本的用法是index.php加載Home-> index(),index.php?c = Blog加載Blog-> index()和index.php?cBlog&m = otherpage&id = 1用$ params ['id']加載Blog-> otherpage($ params)返回1. :-) – 2009-12-17 15:41:29