2009-07-03 40 views
0

我目前正在設置我的網站,主要是使用php。雖然這是我第一次使用它,所以我遇到了一些問題。Php站點結構

我已經掌握了網站的基礎知識。註冊,登錄,配置文件頁面e.t.c.但是,這似乎是我必須對網站佈局做出決定的地方。

例如,目前,用戶的個人資料頁中

mysite.com/profile.php的URL

理想我想什麼是它是沿的

東西線mysite.com/user/ChrisSalij

從閱讀this除了其他事情我相信我需要一個前端控制器風格s迭代,但我不確定這一點,也不知道從哪裏開始實施。請記住,我對PHP和類似的新手很感興趣,我會很感激任何有用的評論,鏈接和建設性的批評。

我敢肯定會學習如此鏈接文章和解釋將是優秀的。我通常對這樣的東西進行大量的研究。但我很新,我不知道從哪裏開始。

編輯:我還應該補充一點,我正在計劃擴大這個網站的規模。從一開始就很小,但如果我的目標實現了,那麼應該有幾頁。所以我願意現在就努力讓它長期成立。 謝謝

+0

嘿傢伙theres一些非常好的迴應,特別是羅伯特,馬克,艾倫和拉斐爾。如果我有足夠的代表我最好了投票大家.....唉,我只是很短所需的15:d 感謝 – 2009-07-04 19:18:37

回答

5

好,歡迎來到PHP :)

首先的世界,一個前端控制器通常被稱爲MVC(模型 - 視圖 - 控制器)一個更大的框架中只有1份。簡而言之,前端控制器可以作爲所有用戶訪問您網站時所使用的「索引」頁面。它處理啓動需要的網站事務,然後拉動和運行處理用戶請求所需的資源(通常通過URL,正如您給出的mysite.com/user/ ...)。這是一個非常簡單的解釋。

雖然不一定是一件很難學的東西,但我會建議您查看一個像this這樣的教程,它解釋了MVC的整個構思和基本實現。他們稱前端控制器爲「路由器」(這是另一回事,實現MVC的方式不止一種,或者它的變體和不同部分的名稱不止一個)。我不認爲這是特別難以理解或掌握的。大多數現代MVC框架都實現了面向對象編程實踐。對於一組好的PHP視頻截屏(包括一些基本的面向對象技巧),請看看here。最後,如果這是您第一次使用PHP並希望實現類似MVC的功能,那麼您可以查看類似CakePHPCodeIgniter的內容。偉大的框架,有很好的文檔,併爲您做了很多辛苦的工作。祝你好運

+0

非常感謝羅伯特。我目前正在非常感興趣地看着codeigniter。此外,潛水到PHP系列是填補了我自我思考PHP的一些差距。非常感謝。 – 2009-07-04 19:16:01

0

您應該看看Zend Framework,它爲您提供了這種開箱即用的功能。

他們有一個很好的指導,這將讓你很快就去。

http://framework.zend.com/docs/quickstart

+0

說不上誰downvoted你,但你不值得這麼+1 – mpen 2009-07-03 22:20:27

+0

令人驚訝...這是一個非常有效的答案。謝謝! – 2009-07-03 22:24:29

0

我西弗同意,這也可以用URL重寫處理。你也應該看看像CakePHP和CodeIgniter這樣的框架,它們會自動爲你做這樣的事情。

5

假設你是在Apache,您可以創建一個名爲.htaccess在您的網站的根目錄文件,添加這些行

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* /index.php?url=$0 [L,QSA] 

這將通過所有的頁面請求到index.php。在index.php中,你需要解析$_GET['url']並使用include加載正確的頁面。你必須清理輸入,並確保人們不包括他們不應該的東西。你可以得到這樣的東西:

list($controller, $username) = explode('/', $_GET['url']); 

典型的MVC結構將使用controller/action/id。如果省略「action」,就像在你的例子中那樣,我會默認爲「view」。如在「查看」用戶的配置文件中一樣。該ID將是用戶名。通常情況下,每個控制器都是一個類,每個動作都是該類中的一個函數,之後的任何參數都會傳遞給該函數。每個操作還有一個關聯的視圖文件。

這是很多代碼給你一個完整的例子(我剛剛編寫了一個MVC框架!),但這應該給你的基礎入門。

如果您需要更多的細節和代碼示例,請確定查看一些其他框架,如CakePHP,Kohana/CodeIgniter。

2

創建了 「Front Controller網站風格」 將意味着

  1. 使用mod_rewrite攔截所有的請求到您的網站/應用

  2. 映射該URL的PHP​​類名(控制器)和在該控制器(通常稱爲行動的方法。

然而,不WA nt直接爲此使用PHP,您想要使用PHP/MVC框架或基於PHP的CMS。示例包括Joomla,Concrete5,Code IgniterPHP Cake。這是一個「解決」的問題。

所有這些框架已經完成了(除其他之外)決定何時/如何將URL轉換爲PHP類的艱苦工作。通過挑選一個,您可以忽略重新實施輪子並專注於您的核心業務(您正在構建的網站)。

這並不是說新框架沒有空間,無論是從頭構建還是從其他框架(例如優秀的Zend Framework)組合模塊。然而,你提出這樣一個基本問題的事實意味着你可能沒有足夠的經驗來成爲應該建立這樣一個人的人(不要感到難過,沒有人能夠神奇地擁有這種經驗,只會伴隨着時間)

利用現有框架獲得一些經驗,看看它們是如何構建的,並瞭解如何使用它們。然後「稍後」,一旦你擁有了一系列真實世界的經驗,如果你仍然覺得需要構建自己的框架,那麼你將能夠更好地解決問題。

1

我不知道你對PHP有多少知識。我可以絕對推薦你的是下載和閱讀本書PHP 5 Power Programming。您可以免費下載here。閱讀它需要很多時間,但它肯定會幫助你很多。 (你也可以閱讀選擇性章節。)

我推薦你的另一件事是從Zend框架中讀取Quick Start Guide(框架本身對你來說可能太多了)。但是在本指南中,尤其是鏈接所有的外部網站都非常好。你可以從中學到很多理論。

其他所有人都說:從所有已建立的框架學習。

1

看看Apache的mod_rewrite。像下面的代碼一樣簡單就可以做到這一點。 如果學習使用mod_rewrite可以解決您的問題,那麼我不會做出有關架構的決定。無論如何,它很可能會在將來對你有用。

RewriteRule ^user/(.*)/$ profile.php?username=$1 [PT] 

編輯:前端控制器模式不結垢。例如,如果您的應用程序的某一部分比其他應用程序使用得更多,則如果您使用前端控制器,則無法縮放該特定請求。