2013-10-24 24 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