【问题标题】:Swagger-PHP multiple definitions ("views") for same model同一模型的 Swagger-PHP 多个定义(“视图”)
【发布时间】:2017-08-06 08:24:57
【问题描述】:

我正在使用 swagger-php 为我使用 Yii2 构建的 REST API 创建文档。此外,我使用的是 Yii2 scenario feature,这意味着我可以将同一模型重复用于多种用途。作为示例,请考虑以下用户类的最小示例:

/**
 * @SWG\Definition(definition="UserLogin", required={"username", "login_password"}, type="object", @SWG\Xml(name="UserLogin"))
 */
class User extends ActiveRecord
{
    const SCENARIO_LOGIN = 'login';
    const SCENARIO_CREATE = 'create';

    public function scenarios()
    {
        $scenarios = parent::scenarios();
        $scenarios[self::SCENARIO_LOGIN] = ['username', 'login_password'];
        $scenarios[self::SCENARIO_CREATE] = ['username', 'firstname'];
        return $scenarios;
    }

    /**
     * Password
     * @var string
     * @SWG\Property(example="secret_password")
     */
    public $login_password;

    /**
     * Password
     * @var string
     * @SWG\Property(example="admin")
     */
    public $username;

    /**
     * firstname
     * @var string
     * @SWG\Property(example="SomeName")
     */
    public $firstname;
}

Swagger 定义现在将包括所有字段,但只需要 usernamelogin_password。相反,我需要的是与定义的场景匹配的两个不同定义。在这个例子中,这将是:

  • 定义UserLogin,包括字段usernamelogin_password
  • 定义UserCreate,包括字段username和名字`
  • 定义User,包括所有字段

如何使用 swagger-php 实现这一点?

【问题讨论】:

标签: php swagger swagger-php


【解决方案1】:

检查您的答案,您还可以使用如下全局字段。

/**
 * @SWG\Definition(
 *      definition="UserLogin",
 *      required={"username", "login_password"},
 *      type="object",
 *      @SWG\Xml(name="UserLogin"),
 *      @SWG\Property(type="string", property="username", description="User name"),
 *      @SWG\Property(type="string", property="login_password", description="Login password"),
 * ),
 * @SWG\Definition(
 *      definition="UserCreate",
 *      required={"username", "login_password"},
 *      type="object",
 *      @SWG\Xml(name="UserLogin"),
 *      @SWG\Property(type="string", property="username", description="User name"),
 *      @SWG\Property(type="string", property="firstname", description="First name"),
 * ),
 * @SWG\Definition(
 *      definition="User",
 *      required={"username", "login_password"},
 *      type="object",
 *      @SWG\Xml(name="UserLogin"),
 *      @SWG\Property(type="string", property="login_password", description="Login password"),
 *      @SWG\Property(type="string", property="username", description="User name"),
 *      @SWG\Property(type="string", property="firstname", description="First name"),
 *)
 */

谢谢,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多