Swagger-PHP针对同一模型的多个定义(“视图”)

时间:2017-08-06 08:24:58

标签: php swagger swagger-php

我正在使用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和firstname`
  • 定义User包括所有字段

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

1 个答案:

答案 0 :(得分:0)

检查您的答案,您也可以使用像bellow这样的全球字段。

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

谢谢,