2011-04-08 48 views
2

我看到許多網站的MVC實現有一個單一入口點,如index.php文件,然後解析URL以確定要運行哪個控制器。這對我來說似乎很奇怪,因爲它涉及到必須使用Apache重寫來重寫URL,並且有足夠的頁面使單個文件變得臃腫。爲什麼應該爲網站MVC需要單點輸入?

爲什麼不相反只是讓單個頁面成爲控制器?我的意思是,如果您的網站上有一個列出所有註冊會員的頁面,那麼頁面導航的members.php將成爲會員的控制器。這個php文件將查詢成員模型中的數據庫成員列表,並將其傳遞給成員視圖。

我可能會錯過一些東西,因爲我最近才發現MVC,但這個問題一直在困擾着我。這種設計不是最好的,因爲它沒有一個臃腫的入口文件,所有的頁面都不直觀地調用模型,並且包含,封裝並從各自的頁面調用特定頁面的視圖?

+3

你是什麼意思*臃腫*?可能做錯了什麼...... – 2011-04-08 14:26:26

+0

它背後的理念是你有例如100條有100個唯一永久鏈接的文章,所有這些都是通過單一控制器動作顯示的,只有一條路徑。從根本上說,你可能擁有儘可能多的路線(通常與控制器操作一樣多),並且我沒有看到任何缺點。那麼你將只有一個.htaccess路由通向index.php,然後你應用你的路由配置和檢查。如果我只是一味地解釋這個問題,不是很確定,但是經過一番努力之後,你就會明白這些利益主體。 – 2011-04-08 14:30:07

+0

您可以使用除重寫紙之外的其他方式實現虛擬資源。特別是你可以使用php腳本sans文件擴展名,並使用PATH_INFO,因爲它在前端控制器之前完成。這種方法與MVP btw更隱約相關。 – mario 2011-04-08 14:31:30

回答

6

從我的經驗,具有單入口點有幾個臭名昭著的優點:

它簡化集中的任務,如資源加載(連接到數據庫或一個內存緩存服務器,日誌執行時間,會話處理等)。如果你想添加或刪除一個集中式任務,你只需要改變一個單獨的文件,這是index.php。

在PHP中解析URL會使「虛擬URL」與Web服務器上的物理文件佈局解耦。這意味着您可以輕鬆更改您的URL系統(例如,用於SEO目的或站點國際化),而無需實際更改服務器中腳本的位置。

但是,有時有一個單入口點可能會浪費服務器資源。這顯然適用於靜態內容,但是當您有一組具有特定目的的請求時,只需要一小部分的resorces(也許它們不需要DB訪問)。那麼你應該考慮有多個入口點。我爲我正在工作的網站做了這些工作。它具有所有「標準」動態內容的入口點,另一個用於調用公共API的入口點,這需要更少的資源並且具有完全不同的URL系統。

而且最後要注意的:如果該網站是很好實現的,您的index.php沒有成爲必然臃腫:)

+0

喜歡這個答案。謝謝!有很大的意義=) – 2011-04-08 14:56:22

1

當使用MVC框架時直接deeplinking到控制器它消除的可能性根據您使用的框架實施控制器插件或過濾器。在訪問控制器之前,擁有單一入口點將標準化應用程序和模塊的引導程序,並執行前面提到的插件。

此外,Zend Framework使用自己的URL重寫形式的路由。在使用Zend Framework的應用程序中,我工作的是可能有6行重寫條件和條件的.htaccess文件。

0

單一入口點固然有其優點,但你可以在一個處理數據庫連接,會話等,這是不臃腫,它符合每一個頁面的頂部得到相當多從中央要求的文件相同的利益乾燥的原則(除了那個需要一行),它分離邏輯和演示文稿,如果你改變文件位置,一個簡單的搜索和替換將修復它。

我已經使用了兩個,我不能說我的目的是更好或更糟。

相關問題