Maison > Questions et réponses > le corps du texte
Donc, dans mon modèle utilisateur, j'ai une fonction fullname qui renvoie le nom complet de l'utilisateur :
/** * @return Attribute */ public function fullname(): Attribute { return new Attribute( get: fn () => trim($this->firstname . ' ' . $this->lastname), ); }
Cela fonctionne comme prévu, je souhaite maintenant ajouter une annotation OpenAPI sur mon modèle : Voici ce que j'ai fait :
class User extends Authenticatable { ... protected $appends = [ 'fullname' ]; #[OAProperty(type: "string", example: "Jhon")] private $firstname; #[OAProperty(type: "string", example: "Doe")] private $lastname; /** * @return Attribute */ public function fullname(): Attribute { return new Attribute( get: fn () => trim($this->firstname . ' ' . $this->lastname), ); } }
Pour le moment, la fonctionnalité ne fonctionne plus comme prévu :
$this->firstname and $this->lastname
Plus de valeurs nulles renvoyées.
Problème : je souhaite conserver les commentaires mais aussi faire fonctionner la fonction.
Remarque : Si vous accédez à vos utilisateurs via un ex éloquent. ( User::all()->first(); ) Nous avons obtenu le prénom et le nom mais pas le nom complet, merci pour l'aide
P粉9550636622024-01-01 15:31:14
https://github.com/DarkaOnLine/L5-Swagger/issues/157
Selon cette question : Définir des attributs sur le modèle posera beaucoup de problèmes éloquents
J'ai trouvé 3 façons de résoudre ce problème :
Option 1 : Vous devez effectuer le moins de refactoring
Conservez les commentaires et supprimez les définitions d'attributs, par exemple : Ceci :
#[OA\Property(type: "string", example: "Jhon")] private $firstname; #[OA\Property(type: "string", example: "Doe")] private $lastname;
deviendra ceci :
#[OA\Property(property: "firstname", type: "string", example: "Jhon")] #[OA\Property(property: "lastname",type: "string", example: "Doe")]
Remarque : les attributs ou les annotations doivent être au-dessus des variables ou des fonctions, sinon une erreur se produira.
Option 2 : Plus propre, mais ajoute plus de travail
Placez votre déclaration d'API ouverte ailleurs. Par exemple :
Option 3 : C'est ce que j'utilise
Ajoutez vos propriétés à la déclaration de schéma Exemple :
#[OA\Schema(schema: "IUser", properties: [ new OA\Property(property: "firstname", type: "string", example: "Jhon"), new OA\Property(property: "lastname",type: "string", example: "Doe") ])]