在一个类中使用多个方法设置codeigniter URL

时间:2018-04-11 19:36:46

标签: php codeigniter routing

示例网址:

第一个网址: http://sample.com/api/campaign/999 - 此网址包含下一个网址:

http://sample.com/api/campaign/list/1

我如何设置campaign的路由网址,作为id后面的方法 并且list方法也有id

2 个答案:

答案 0 :(得分:1)

我会使用专用方法(假设Api.php是控制器文件)。 制作list()方法并在其中放置有意义的代码

public function list($arg)
{
    // code for this one
}

然后在APPPATH.'config/routes.php'解析请求中:

$route['api/campaign/list/(:num)'] = 'api/list/$1';
$route['api/campaign/(:num)'] = 'api/campaign/$1';

如果您不希望api/list/1可访问,请使用.htaccess重定向解决此问题:

RedirectMatch 301 ^/api/list/(.*)$ /api/campaign/list/$1

答案 1 :(得分:0)

还有另一种方法可以做到这一点,不需要任何路线或.htaccess技巧。

class Api extends CI_Controller
{

    public function campaign($param1, $param2 = FALSE)
    {

        if(is_numeric($param1))
        {
            $this->do_something($param1);
        }
        elseif($param2)
        {
            $valid_methods = ['list', 'foo', 'bar'];
            if(in_array($param1, $valid_methods))
            {
                $this->$param1($param2);
            }
        }
    }

    protected function do_something($param)
    {
        echo "Doing somethig with $param";
    }

    protected function list($param)
    {
        echo "running list using $param";
    }

    protected function foo($param)
    {
        echo "running foo using $param";
    }

    protected function bar($param)
    {
        echo "running bar using $param";
    }
}