【问题标题】:Restler class with required params based on method type具有基于方法类型所需参数的 Restler 类
【发布时间】:2023-03-14 04:18:02
【问题描述】:

假设我将它与我的 API 类一起使用

class EventInfo {
    /// @var int $start The Start time
    public $start

    /// @var string $url The URL for the event {@required false}
    public $url = null;
}

现在我想将EventInfo 用于我的 POST 和 PATCH 方法。当我进行 POST 时,$start 是需要设置的属性。 $url 将作为可选参数出现。

但是,当我执行 PATCH 操作时,应该不再需要 $start。我可能会过了一个新的开始时间,但我可能不会。

如何指定?

【问题讨论】:

    标签: restler


    【解决方案1】:

    首先,使用 DocBlock 语法

    class EventInfo {
        /**
         * @var int $start The Start time
         */
        public $start;
    
        /**
         * @var string $url The URL for the event {@required false}
         */
        public $url = null;
    }
    

    这会设置默认的必需和可选属性。然后,您可以使用{@required } 注释在 api 方法级别控制所需的属性。请参阅下面的示例

    class Home
    {
        public function index()
        {
            return array(
                'success' => array(
                    'code' => 200,
                    'message' => 'Restler is up and running!',
                ),
            );
        }
    
        public function patch(EventInfo $info)
        {
            return func_get_args();
        }
    
        /**
         * @param EventInfo $info {@required start,url}
         * @return array
         */
        public function post(EventInfo $info)
        {
            return func_get_args();
        }
    }
    

    您也可以类似地添加{@properties start} 注释以限制API 方法需要哪些属性。

    【讨论】:

    • 这并不能回答这个问题,因为我已经有了这个问题。您所展示的内容始终需要 $start。
    • 我如何添加到所需的属性,而不仅仅是替换它们?如果我的类有 10 个属性,其中 8 个是必需的,现在我希望我的方法也使另外两个成为必需的,看来我必须在 @param EventInfo 行上列出所有 10 个属性。我希望能够仅列出通常不需要的两个,并且所有 10 个都是必需的。
    • 覆盖后,您必须提供完整列表。这是完全控制的唯一方法
    猜你喜欢
    • 2018-07-22
    • 2022-11-04
    • 1970-01-01
    • 2018-10-24
    • 2019-09-02
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多