不是后端的人,但可以浏览我的基础知识。我的问题是,我正在做的福利页面有以下功能。希望简化子页面,而不是创建多个控制器功能和路由重定向。所以我决定将 URI 作为可变路由......不确定这是否是干净的方法(通常我只在通过数据库动态创建页面时走这条路)。但它有效。
如果我去website.com/benefits/{section}
IF就会按应有的方式工作。但是,如果我去website.com/benefits/
我会得到一个 404 页面 - 显然。我没有什么可以处理这个请求——只是因为我不知道怎么做。如何重定向到主页是用户访问website.com/benefits/
并且没有定义 uri(即 $section)?
编辑:或者只创建一个单独的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('/');
}
}
您的重定向似乎给出了 404。如果你想访问/benefits/
,只需创建一个默认案例(在你的例子中,是 else 部分)。
但是看看我做了什么 - 我已经为要索引的$section设置了一个默认值,因此这将表示您的索引页面,使所有未指定的值执行重定向:
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 这样的网址。
在此处查看有关使用控制器的详细信息。
尝试这样做(添加默认函数参数值)以在访问时重定向到主页website.com/benefits/
:function benefits($section = FALSE) {}
我错过了您必须为此使用路由规则的事实。总之,您希望路由处理 2 种方案:
1.去website.com/benefits/{section}
:回显一些东西
2.否则,请转到website.com/benefits/
或 IFs 语句中未定义section
:重定向到主页 ( website.com/
)
事实上,website.com/benefits/
不是一个单独的案例,但它应该从字面上属于else
案例。您只想正确处理else
情况,但在访问website.com/benefits/
时遇到了错误。如果不需要,则不想处理index
部分。因此,您可能使用了错误的路由规则。
我试图重现您的问题,如果您像$route['benefits/(:any)'] = 'content/benefits/$1';
一样使用 CodeIgniter 指南中的设置,您将获得您提到的 404 页面。
以下是针对您的问题的正确路由规则,无需更改benefits
函数上的任何规则:
$route['benefits/?(.*)'] = 'content/benefits/$1';
这就是您正在谈论的index
函数。 :D,并且function index()
是默认函数,如果url
中没有定义action
,则执行该函数。没有冒犯,但仍然不确定你在这里做什么。