2012-01-22 105 views
1

我真的被困在做我的應用程序的路線,我發現在CI非常困惑 所以我擁有的是在每個國家的人的頁面,你通過選擇一個頁面國家在主頁中的下拉列表中 我設法使用POST方法傳遞數據,但問題是我無法直接通過url訪問這些頁面,因爲它們的主控制器訪問數據庫並生成它們 我所有的網頁有這個網址在codeigniter路由:

www.site.com/country 

國家是一個控制器上的

但我想要看起來像這樣:

www.site.com/name-of-country/name-of-person 

任何想法該怎麼做?

回答

1

這些答案不給予足夠的信息,並接受的答案是太可怕了......

來處理這將是建立你的路由做的最好的方法如下(如果你想控制國家的用戶都能夠使用:

把這個在你的路由文件:

foreach(array('country1', 'country2') as $country) { // array with allowed countries 
    $routes[$country.'/(:any)'] = "country/view/{$country}/$1"; 
    $routes[$country] = "country/view/{$country}"; 
} 

這樣做是需要你的允許國家的數組,然後會爲每個國家一個路由規則,因此,如果用戶去http://example.com/japan/naruto,它ro utes到網址http://example.com/country/view/japan/naruto。這是假設'日本'在你的'允許的國家'陣列。

第二個只是路由URL http://example.com/japanhttp://example.com/country/view/japan

到控制器中country.php

class Country extends CI_Controller { 
    function view($country, $username = false) { // $username=false allows you to show just a 'country' page if you want to 
    if ($username) { 
     $this->load->view('users_view', array('country' => $country, 'username' => $username)); 
    } else { 
    $this->load->view('countries_view', array('country' => $country)) 
    } 
    } 
} 

我在這裏所做的是使你只是爲了顯示的國家創造一個網頁,其中從視圖文件夾中加載countries_view.php,或者您可以查看加載users_view.php頁面的用戶的頁面。

+0

這項工作,如果我有所有的世界所有國家?當我激活一個國家應該對用戶可見時,我在數據庫中存儲了縣名 –

+0

是的,您需要將它們放入一個數組並在該數組上運行foreach()。 –

+0

因此,您寧願在路線文件中手動維護一組國家/地區,而不是讓數據庫(已包含相同信息)爲您執行訪問控制?現在,您不僅違反了DRY(不要重複自己)原則以及構建CodeIgniter的MVC體系結構背後的驅動原則,而且還爲自己做了更多工作。 – njbair

3

CI中的控制器可以使用參數,就像常規函數一樣。這些參數作爲URL段傳遞。所以,如果你想輸入:

www.site.com/name-of-country/name-of-person 

只寫你的函數是這樣的:

function Country($name_of_country, $name_of_person) { ... } 

從POSTDATA重定向,試試這個:

function Country($name_of_country, $name_of_person) { 
    if ($this->input->post('country') { 
    redirect('/country/' . $this->input->post('country')); 
    } 
} 

欲瞭解更多信息,請查看official documentation on routing

+0

非常感謝,但我怎麼會產生這個網址,如果用戶shoos去拋出主頁,然後進入個人頁面,如何顯示在url? –

+0

如果你想使用表單來做到這一點,你可以添加一個條件到你的國家控制器,它會查找postdata並根據需要重定向。 – njbair

+0

是的,你是對的,它可以通過重定向完成,我只是想出來,謝謝你的幫助:) –

2

你也可以使用一些正則表達式在routes.php文件中設置它。這取決於您的應用程序如何設置以及您的路線如何受到控制。例如,如果你這樣做:

$route['(:any)/(:any)'] = 'country'; 

你可能會比你想要的更匹配。你可以使用更具體的正則表達式,而不是一般的東西類似的,或者......你可以改變URL結構的位:

$route['country/(:any)/(:any)'] = 'country/index/$1/$2'; 

然後你就可以建立在對路由邏輯文件,它屬於的地方。如果你有一個路由文件,你應該使用,而不是嘗試通過控制器進行路由。