【问题标题】:PHP Restler support api URLs that are contained in other URLsPHP Restler 支持包含在其他 URL 中的 api URL
【发布时间】:2012-11-22 19:48:17
【问题描述】:

.. 想不出一个足够描述性的标题。我要问的是我该怎么做?

我想要以下 2 个 API 调用

 GET /api/users/2/duels - returns all of the duels for user 2 
 GET /api/users/2 - returns the profile for user 2

由于 PHP 不支持方法重载,我不清楚如何实现这一点。

目前我有这个功能

 function get($id, $action){
      //returns data based on action and id
 }

我不能只做

 function get($id){
      //returns profile based on id
 } 

由于上述原因。

非常感谢任何帮助!!!

【问题讨论】:

    标签: php api rest restler


    【解决方案1】:

    您可以使用@url phpdoc 装饰器告诉restler 任何与直接类->方法映射不匹配的特殊调用方案。

    /**
     * @url GET /api/users/:userId/duels
     */
    public function getDuels($userId)
    {
    
    }
    

    .. 应该可以工作。

    【讨论】:

      【解决方案2】:

      一种方法是使用如下所示的条件块在同一函数中处理这两种情况

      function get($id, $action=null){
          if(is_null($action)){
              //handle it as just $id case
          }else{
              //handle it as $id and $action case
          }
      }
      

      如果您运行的是 restler 3 及更高版本,则必须禁用智能路由

      /**
      * @smart-auto-routing false
      */
      function get($id, $action=null){
          if(is_null($action)){
              //handle it as just $id case
          }else{
              //handle it as $id and $action case
          }
      }
      

      另一种方法是拥有多个函数,因为索引也映射到根目录,你有几个选项,你可以将你的函数命名为 get、index、getIndex

      function get($id, $action){
          //returns data based on action and id
      }
      function index($id){
          //returns profile based on id
      }
      

      如果您正在使用 Restler 2 或关闭 smart routing,则功能顺序对于对抗 ambiguity 很重要

      如果您用完了函数名称的选项,您可以按照@fiskfisk 的建议使用@url 映射,但该路由应该只包含方法级别的路由,因为类路由始终是前置的,除非您使用$r->addAPIClass('MyClass',''); 将其关闭

      function get($id){
          //returns data based on action and id
      }
      
      /**
       * @url GET :id/duels
       */
      function duels($id)
      {
      
      }
      

      HTH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        相关资源
        最近更新 更多