0

无论如何都不是后端人员,但可以通过基础知识导航。我的问题是,我正在做的福利页面有以下功能。想要简化子页面而不是创建多个控制器功能和路由重定向。因此,我决定将 URI 作为可变路由... 但它有效。

如果我去website.com/benefits/{section}IFs,他们应该做的工作。但是,如果我去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('/');
    }
}
4

3 回答 3

1

您的重定向似乎给出了 404。如果您想访问/benefits/,只需创建一个默认情况(在您的情况下,其他部分)。

但是看看我做了什么 - 我已经为 $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('/');
    }
}

但是,由于问题不是很清楚,可能还有另一种解决方案。

确保您的控制器名为“Benefits”,并将您的函数重命名为“index”。这适用于诸如 site.com/benefits 之类的 URL。

在此处查看有关使用控制器的更多信息。

于 2013-10-24T15:57:54.387 回答
0

您可以尝试这个(添加默认函数参数值)以在您访问时重定向到主页website.com/benefits/function benefits($section = FALSE) {}

我错过了您必须为此使用路由规则的事实。总而言之,您希望路由处理 2 个场景:

1.Go to website.com/benefits/{section}: echo something
2.否则,go towebsite.com/benefits/或者sectionIFs 语句中没有定义:重定向到主页 ( website.com/)

其实website.com/benefits/并不是一个单独的case,它应该属于else字面上的case。您只想else正确处理此案,但在访问website.com/benefits/. 如果不需要,您不想处理该index部分。所以你可能使用了错误的路由规则。

我试图重现您的问题,如果您使用 CodeIgniter 指南中的设置,就像$route['benefits/(:any)'] = 'content/benefits/$1';您提到的那样,您将获得 404 页面。

这是针对您的问题的正确路由规则,无需更改任何benefits功能:

$route['benefits/?(.*)'] = 'content/benefits/$1';
于 2013-10-24T15:56:37.237 回答
-1

这就是index你说的功能。:D,function index()如果没有actionurl. 没有冒犯,但仍然不确定你在这里做什么。

于 2013-10-24T15:53:22.483 回答