控制器 URI 问题 - 代码点火器


Controller URI Issue - Codeigniter

无论如何都

不是后端的人,但可以浏览我的基础知识。我的问题是,我正在做的福利页面有以下功能。希望简化子页面,而不是创建多个控制器功能和路由重定向。所以我决定将 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,则执行该函数。没有冒犯,但仍然不确定你在这里做什么。