1

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

/**
 * @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 定义现在将包括所有字段,但只有username并且login_password将是必需的。相反,我需要的是与定义的场景匹配的两个不同定义。在此示例中,这将是:

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

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

4

1 回答 1

0

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

/**
 * @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"),
 *)
 */

谢谢,

于 2018-02-28T08:54:52.473 回答