控制器URI问题 - Codeigniter

时间:2013-10-24 15:41:16

标签: php codeigniter codeigniter-2

无论如何不是一个后端人,但可以通过基础知识导航。我的问题是,我有以下功能,我正在做的福利页面。希望简化子页面而不是创建多个控制器功能和路由重定向。所以我决定将URI作为一个可变路由...不确定这是否是干净的方式(通常我只在通过db动态创建页面时走这条路线)。但它确实有效。

如果我转到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('/');
    }
}

3 个答案:

答案 0 :(得分:1)

您的重定向似乎正在提供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等网址。

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

答案 1 :(得分:0)

当您访问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部分。所以你可能使用了错误的路由规则。

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

以下是针对您的问题的正确路由规则,而不更改benefits函数的任何内容:

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

答案 2 :(得分:-1)

这就是你所说的index功能。 :D,如果function index()中没有定义action,则url是执行的默认函数。没有冒犯,但仍然不确定你在这里做什么。