私は現在、まだよく知らない NelmioApiDocBundle を使用しています。私が書いている API は、特定のユーザーのパスワードを変更するためのルートを提供する必要があります。ドキュメントには、パスワードを変更するには古いパスワードと新しいパスワードの両方が必要であると記載されている必要があります。と の違いの説明が見つからなかったので、前者はルートからのデータに使用され、後者は API 呼び出し自体に使用されているRequirements
とParameters
思います。
このようなドキュメントをアーカイブする最初の試みは、JMSSerializerBundle が自動的に変換する単純なモデルを実装することでした。
class ChangePasswordParam
{
/**
* @Type("string")
* @var string
*/
protected $oldPassword;
/**
* @Type("string")
* @var string
*/
protected $newPassword;
}
コントローラは、次のアクション メソッドを介して API 呼び出しを受け入れます。
/**
* Changes the password for a specific user.
*
* @Post("/{username}/changepassword")
* @View()
* @ApiDoc(
* description="Changes the password of a User",
* input="FQCN\ChangePasswordParam"
* )
*
* @param string $username
* @param ChangePasswordParam $passwordParam
*
* @return Response
*/
public function changePasswordAction($username, ChangePasswordParam $passwordParam)
{
/* ... */
}
これにより、ドキュメントusername
が要件として、old_password
およびnew_password
パラメーターとして表示されるようになりました。これらのパラメーターを必須としてマークするために、アノテーションを介して Symfony Constraint をプロパティに追加しました。
class ChangePasswordParam
{
/**
* @Type("string")
* @Assert\NotNull()
* @var string
*/
protected $oldPassword;
/**
* @Type("string")
* @Assert\NotNull()
* @var string
*/
protected $newPassword;
}
ただし、これらの注釈を使用するとプロパティが必須としてマークされますが、奇妙な出力が生成されます。
パラメータが 2 回、異なる形式で追加されていることに注意してください。を追加し@SerializedName("old_password")
ても効果はありません。このチケットに関しては、まだ問題は解決していません。
アクションのデータを受け入れる別の方法は、カスタム フォームを使用することです。これは、実際にはプロパティを必須としてマークしますが、適切な出力も生成しません。ChangePasswordParam
カスタム フォームとしての変更:
class ChangePasswordParam extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('old_password', 'text');
$builder->add('new_password', 'text');
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'change_password';
}
}
これらのパラメーターには「old_password」と「new_password」という名前を付ける必要がありますが、これをアーカイブする方法がわかりません。
前もって感謝します