我使用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定义现在将包含所有字段,但仅需要username
和login_password
。我需要的是两个与定义的场景匹配的不同定义。在这个例子中,这将是:
UserLogin
包括字段username
和login_password
UserCreate
包括字段username
和firstname`User
包括所有领域如何使用swagger-php实现这一目标?
检查你的答案,你也可以使用像波纹管这样的全球领域。
/**
* @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"),
*)
*/
谢谢,