2012-03-20 49 views
2

我覺得我有足夠的CI經驗,最終開始創建一個留言板,或者至少這是我的想法,直到我被困在根據主題名稱(slu generating)生成動態頁面。使用CI創建動態頁面URL(路由) - 一個簡單的留言板示例

因此,我創建了控制器/模型/視圖並設置了一個表單,將必要的信息提交給數據庫。我將線程拉出來並顯示出來,並根據主題標題生成每個鏈接的鏈接......我基本上遵循CI教程,對其進行編輯以適合我的需求。

但是,理解生成動態頁面URL的概念正在拋棄我。通過聽到這個過程中發生了什麼,我明白了很多,並且codeigniter教程(新聞)不能很好地解釋它。它只是告訴你要做什麼以及如何做,而不是爲什麼。

任何人都會感受到試圖更詳細地解釋動態頁面編碼的過程。

我通過動態頁面的意思是:

http://your-site.com/news/1/hello-world http://your-site.com/news/1/foo-bar

這裏的hello world和Foo吧。

下面是混淆了我一些部分:

<?php 

class Pages extends CI_Controller { 

    public function view($page = 'home') 
    { 

    } 
} 

而且繼承人的路由

$route['default_controller'] = 'pages/view'; 
$route['(:any)'] = 'pages/view/$1'; 

是什麼$ 1分別表示?有哪些具體的網址?你什麼時候用2美元?它是以CI的代碼構建的,還是可以使用任何變量?

我敢肯定,答案可以得到更詳細的,但如果有人可以回答上述一些問題,我相信它會非常有幫助。

從理論上講,回答這些問題應該如何爲論壇主題創建新頁面?

謝謝!

回答

3
<?php 

class Pages extends CI_Controller { 

    public function view($page = 'home') 
    { 

    } 
} 

此方法的相應網址爲http://example.com/pages/view/。在該方法中,它設置爲$page = 'home',因爲如果網址中沒有第三個細分受衆羣,它將默認爲home

$route['(:any)'] = 'pages/view/$1'; 

變量$1是不管你有作爲(:any)。所以,如果你的網址是http://example.com/testing,它會路由到http://example.com/pages/view/testing,這將反過來將你的$頁面var從你的視圖方法設置爲「測試」。

+0

謝謝,但就此展開。當「測試」不存在爲php文件時會發生什麼。如果你希望它是基於線程主題創建的。 CI如何處理這種情況? – 2012-03-20 14:17:42

+0

測試永遠不會以php文件的形式存在。它只是url中的一個部分,將被設置爲$ page變量。然後,您可以在您的方法中查詢您的數據庫,以基於該段找到線程。 – Catfish 2012-03-20 14:19:38

+0

另外,如果你使用'public function view($ page)'而不是'public function view($ page ='home')',這意味着你必須有第三個段,但是如果你設置var等於某事,這意味着如果該段沒有在url中傳遞,它將被默認爲方法調用中設置的值,如你的例子中所做的那樣。 – Catfish 2012-03-20 14:21:08

4

$ 1代表什麼?有哪些具體的網址?你什麼時候 使用$ 2?它是以CI的代碼構建的,還是可以使用任何變量?

$1表示對由通配符(:any)創建的變量的引用。沒有$2,因爲你只有一個通配符。

你將有一個第二通配符,如果你創建了一個這樣的路線:

$route['pages/(:num)/(:any)'] = 'pages/$1/$2'; 

雖這麼說,你的問題中的路由建立一種失敗CI的MVC架構和路由系統的目的,因爲你「再重定向所有路由pages/views,我相當肯定你想要的東西,如:

$route['default_controller'] = 'pages/view'; 
$route['pages/view/(:any)'] = 'pages/view/$1'; 
+0

謝謝,但正如上面的答案中所述,CI如何根據通過提取的數據動態創建的URL來處理視圖? – 2012-03-20 14:19:13