当前位置: 首页 > 知识库问答 >
问题:

Codeigniter路由和REST服务器

周龙光
2023-03-14

我正在尝试为我的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

我不希望网址有尾随的“索引”

/players/index

当我这样定义路线时,这一点都没有问题:

$route['players'] = 'players/index';

一切正常。

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

/players/rookies/limit/10/offset/5/key/abcdef

上述示例有效,但以下示例无效:

/players/limit/10/offset/5/key/abcdef

我得到以下错误:{“status”:false,“error”:“Unknown method.” 显然,我的控制器中没有限制方法。

如何设置routes.php配置文件以使这些URL正常工作?

非常感谢您的帮助!


共有2个答案

汲利
2023-03-14

Gregory,正如你自己所说的/玩家指的是玩家控制器中的索引方法,这意味着如果你的路由是干净的,你不应该需要有$路由['玩家']='玩家/索引'。

您可以拥有任意多的段,并获得URI类来在脚本中区分它们。这意味着默认情况下,这个网址“/球员/菜鸟/限制/10/偏移/5/键/abcdef”应该会导致你的球员控制器,菜鸟()方法。以下是你如何获得你的片段:

function rookies () {
    //$this->uri->segment (1); would return 'players' or 'limit'
    //$this->uri->segment (8); would return 'abcdef' or false
}

此外,对于/玩家/工作限制:

function limit () {
    $this->rookies();
}

编辑1

这里有另一种方法:

路由规则:

$route['/players/rookies/limit/(:num)/offset/(:num)/key/(:any)'] = "players/get"
$route['/players/limit/(:num)/offset/(:num)/key/(:any)'] = "players/get"

控制器

function get () {
    //work with segments
}
蓬意致
2023-03-14
//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
    }
}
 类似资料:
  • 我正在研究spring MVC,并使用Apache camel来集成外部服务。我想使用Apache Camel route进行Webservice调用。 就像我的本地REST服务(http://localhostsmiliex.xx:8080/users)从外部REST服务获取数据(http://xxx:000/users)并希望通过路由获取外部数据。 哪个Apache组件适合Jetty或prod

  • 路由服务 首先,要理解什么是 router,router是提供跨 subnet 的互联功能的。比如用户的内部网络中主机想要访问外部互联网的地址,就需要router来转发(因此,所有跟外部网络的流量都必须经过router)。目前router的实现是通过iptables进行的。 同样的,router服务也运行在自己的名字空间中,可以通过如下命令查看: $ sudo ip net exec qroute

  • 1. 简介 上一篇文章分析了集群容错的第一部分 — 服务目录 Directory。服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。在详细分析服务路由的源码之前,先来介绍一下服务路由是什么。服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分别

  • 我想把react-route添加到我的应用程序中,我有下面的代码: 更新:已安装react-router 3.0.2并工作。

  • 问题内容: 我一直在思考,我对客户端和服务器之间的路由感到困惑。假设我在将请求发送回Web浏览器之前使用ReactJS进行服务器端渲染,并使用react- router作为客户端路由在页面之间切换而不刷新为SPA。 我想到的是: 路线如何解释?例如,从首页()到帖子页面()的请求 路由在服务器端还是客户端去哪里? 它如何知道如何处理? 问题答案: 注意,此答案涵盖了React Router版本0.

  • 我想到的是: 路线是如何解释的?例如,从主页()到帖子页()的请求 路由在服务器端还是客户端? 它如何知道它是如何处理的?

  • 我对CODEIGnite分页和路由有问题 我将route设置为我的函数类,如下所示: 然后在我的控制器中,我创建了一个调用并加载分页库的函数,除了分页导航外,一切都正常:( 页面加载成功… 且数据正确… 当我单击示例第2页时,页面2加载成功,但分页导航显示页面I按钮…! 当我调用第4页表单url(http://localhost/d/index.php/admin/panel/students/n

  • ASUS 华硕路由器 注意 Windows 所装 Home Assistant 无法使用此组件。 更新提示 本插件配置方法自 0.82 版本开始发生变化,请及时更新。 使用前请前往路由器管理界面 —— 系统管理 —— Enable SSH 或 启动 Telnet asuswrt: host: 路由器IP username: 路由器账号 password: 路由器密码 protoc