优先考虑控制器而不是路由规则

时间:2018-01-24 10:13:44

标签: codeigniter

CI是否可以首先检入控制器..如果找不到控制器,那么只检查路由规则?

我们想要的是,

我们有一个带有两个段的URL,即testctl / testmethod,现在我们想要1个动态URL,它也有2个段。因此,我们要设置路线规则,例如 $ route ['(:any)/(:any)'] = ctl / method / $ 1 / $ 2 。 由于此规则,所有包含2个细分的网址都会加载ctl / method / $ 1 / $ 2.

2 个答案:

答案 0 :(得分:0)

如果方法为参数提供默认值,则可以避免使用路由规则。

public function testfunc($arg1 = FALSE, $arg2 = FALSE)
{
    if($arg1)
    {
        echo "$arg1 ";
    }
    if($arg2)
    {
        echo "$arg2 ";
    }
    echo date("F j, Y, g:i:s a");
}

如果该方法位于Welcome控制器中,则URL http://example.com/welcome会生成仅包含日期的输出。

网址http://example.com/welcome/hello生成

hello January 24, 2018, 9:39:08 am

网址http://example.com/welcome/hello/world生成

hello world January 24, 2018, 9:39:08 am

网址http://example.com/welcome/0/world生成

world January 24, 2018, 9:39:08 am

重点是该方法根据是否传递参数进行响应。

不需要为上述工作定义单一路线。

答案 1 :(得分:0)

答案是否定的。由于您选择的网址方案,您已经规避了Code Igniter中阻力最小的路径,如果不在某处编写更多代码,就无法摆脱这种阻碍。

如果你有其他规则属于该模式,那么你需要为它们定义路由,或者使用控制器开关智能地解析实际的URL,然后根据需要调用其他方法,然后再进入逻辑你的产品。

下一个想法听起来似乎不适合您,但其他解决方案可能涉及完全更改您的网址架构,使用domain/product/attribut_value/product_name之类的明确术语,因此您的路线将为$route['product/(:any)/(:any)']。< / p>