Codeigniter 路由和 REST 服务器

gre*_*ory 4 php rest codeigniter codeigniter-routing codeigniter-restserver

我正在尝试为我的 API 实现以下 URL(我正在使用 Codeigniter 和 Phil Sturgeon 的REST 服务器库):

/players            -> refers to index method in the players controller
/players/rookies    -> refers to rookies method in the players controller
Run Code Online (Sandbox Code Playgroud)

我不希望 URL 带有尾随“索引”

/players/index
Run Code Online (Sandbox Code Playgroud)

当我像这样定义路由时,这根本没有问题:

$route['players'] = 'players/index';
Run Code Online (Sandbox Code Playgroud)

一切都按预期进行。

我的问题是我需要额外的 URL 段,如下所示:

/players/rookies/limit/10/offset/5/key/abcdef
Run Code Online (Sandbox Code Playgroud)

上面的示例有效,但以下示例无效:

/players/limit/10/offset/5/key/abcdef
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:显然我的控制器中{"status":false,"error":"Unknown method."} 没有方法。limit

我如何设置我的routes.php配置文件才能使这些URL正常工作?

任何帮助深表感谢!

Phi*_*lip 5

//www.mysite.com/players
$route['players'] = 'players/index_get';//initial call to players index

//www.mysite.com/players/rookies
/** overrides the above **/
$route['players/(:any)'] = 'players/index_get/$1';//Changing defaults index

//www.mysite.com/players/rookies/10/4
/** overrides the above **/
$route['players/(:any)/(:num)/(:num)'] = 'players/index_get/$1/$2/$3';//Changing type,limit,offset

//All routes that are similar, like above that follow the previous, override the preceding one. 


//www.mysite.com/players/create
//overrides $route['players/(:any)']
$route['players/create'] = 'players/index_post';


class Players extends REST_Controller
{
    public $player_types = array();

    public function __construct(){
       $this->player_types = array(
          'rookies', 'seniors'
       );//manual assign or pull from db
    }
    /**
     * Index
     * $_GET
    **/
    public function index_get($type='rookies',$offset=0, $limit=0)//some defaults to show on initial call
    {
        // www.mysite.com/players/rookies
        // $route['players/(:any)'] = 'players/index_get/$1';
        // First uri segment, check to see if its a valid player 'type'

        if(!in_array(strtolower($type), $this->player_types)){
             //redirect ?
             return;
        }
    }
    /**
     * Index
     * $_POST
    **/
    public function index_post()
    {
        // Create a new player
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我学习和了解到的“REST”意味着根据 HTTP 标头方法中的请求类型解释该方法,因此您所需要做的就是调用“domain/players”,它将根据 HTTP 标头重定向到适当的“方法”。这里你只是将 uri 调用路由到自定义方法,那么这里 REST 的目的是什么,即使使用任何控制器也是可能的。将任何 URI 路由到任何“控制器 > 方法”。:/ (2认同)