Modèle éloquent de Laravel et problèmes d'annotation swagger openApi
P粉178894235
P粉178894235 2023-12-31 19:41:40
0
1
476

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粉178894235
P粉178894235

répondre à tous(1)
P粉955063662

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")
])]

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!