2013-10-24 111 views
0

不是任何手段的後端人員,但可以瀏覽我的方式通過基本知識。我的問題是,我有我正在做的福利頁面的以下功能。希望簡化子頁面與創建多個控制器功能和路由重定向。所以我決定把URI作爲一個變量路由......不知道這是乾淨的做法(通常我只通過db動態創建頁面時才走這條路)。但它的工作。控制器URI問題 - Codeigniter

如果我去website.com/benefits/{section} IFs的工作,他們應該。但是,如果我去website.com/benefits/,我會看到一個404頁面 - 顯然。我沒有辦法處理這個要求 - 只是因爲我不知道如何。我如何重定向到主頁是用戶訪問website.com/benefits/並且沒有定義uri(即$部分)?

編輯:或者明智地創建一個單獨的function benefits(){}功能以及下面的一個?這是好的做法嗎?

控制器功能:

function benefits($section) 
{ 
    if($section == 'fitness') 
    { 
     echo('fitness page!'); 
    } 
    elseif($section == 'health') 
    { 
     echo('health page!'); 
    } 
    elseif($section == 'beauty') 
    { 
     echo('beauty page!'); 
    } 
    elseif($section == 'sports') 
    { 
     echo('sports page!'); 
    } 
    else 
    { 
     redirect('/'); 
    } 
} 
+0

什麼是您想要重定向的「主頁」?你的意思是'重定向('/');'是「重定向到主頁」? – anvoz

回答

1

如果您要訪問/benefits/,只是做一個默認情況下(您重定向似乎給404在你的情況下,其他部分)。

但看到我做了什麼 - 我已經設置了$部分指標的默認值,這樣就表示你的索引頁,使所有未指定的值做重定向:

function benefits($section = 'index') 
{ 
    if($section == 'fitness') 
    { 
     echo('fitness page!'); 
    } 
    elseif($section == 'health') 
    { 
     echo('health page!'); 
    } 
    elseif($section == 'beauty') 
    { 
     echo('beauty page!'); 
    } 
    elseif($section == 'sports') 
    { 
     echo('sports page!'); 
    } 
    elseif($section == 'index') 
    { 
     echo('benefits index page!'); 
    } 
    else 
    { 
     redirect('/'); 
    } 
} 

但是,因爲問題不是很清楚,可能有另一種解決方案。

確保您的控制器被稱爲「優點」,並將您的功能重命名爲「索引」。 這適用於諸如site.com/benefits之類的網址。

查看更多有關使用控制器here的信息。

+0

我應該更清楚了......重定向工作正常。如果有人在uri中輸入的不是'$ section'的IF值之一,那幾乎就是這樣。我的問題是,如果在URL中的'/ benefits'之後沒有指定uri。我簡短地說,如果沒有在URL中輸入URI並且訪問者去了'website.com/benefits',那麼沒有功能來處理這個請求。你挖?上面的重定向只有在$ section的值不存在的情況下。 –

+0

明白了,那麼它可能是第二種解決方案。如果你能顯示整個控制器,我可以馬上告訴你有什麼問題。 – Shomz

+0

在這一點上,這幾乎都是控制器中的內容 - 反正這個頁面。那麼你認爲創建一個與上面的'function benefits($ section){}'分開的'function benefits(){}'函數來處理索引請求是明智的嗎? –

-1

這是你所談論的index功能。 :D,並且function index()是在url中定義的沒有action時被執行的默認功能。沒有冒犯,但仍然不確定你在這裏做什麼。

0

你可以試試這個(添加默認函數參數值),當您訪問website.com/benefits/重定向到主頁:function benefits($section = FALSE) {}

我失蹤了,你必須使用路由規則的這樣一個事實。總之,你要處理2種情景路線:

1.Go到website.com/benefits/{section}:回聲東西
2.Otherwise,去website.com/benefits/section沒有在國際單項體育聯合會的語句定義:重定向到主頁( website.com/

事實上,website.com/benefits/不是一個單獨的案例,它應該屬於else字面上的情況。你只是想正確處理else的情況,但當你訪問website.com/benefits/時遇到了錯誤。如果您不需要,則不需要處理index部分。所以你可能使用錯誤的路由規則。

我試圖重現您的問題,如果您使用CodeIgniter指南中的設置,例如$route['benefits/(:any)'] = 'content/benefits/$1';,您將獲得404頁面,如您所述。

這裏是你的問題的正確路由規則,在不改變你的benefits功能的:

$route['benefits/?(.*)'] = 'content/benefits/$1'; 
+0

你的代碼和OP的代碼在這種情況下完全一樣...... – Shomz

+0

當你使用'$ section ='index''時,與解決方案相比,它與你的解決方案有什麼不同嗎? – anvoz

+0

是的,當部分索引時,我將用戶保留在頁面上。 – Shomz