Laravel eloquentes Modell und prahlerische openApi-Annotationsprobleme
P粉178894235
P粉178894235 2023-12-31 19:41:40
0
1
509

In meinem Benutzermodell habe ich also eine Funktion fullname, die den vollständigen Namen des Benutzers zurückgibt:

/**
 * @return Attribute
 */
public function fullname(): Attribute
{
    return new Attribute(
        get: fn () => trim($this->firstname . ' ' . $this->lastname),
    );
}

Es funktioniert wie erwartet, jetzt möchte ich OpenAPI-Anmerkungen zu meinem Modell hinzufügen: Folgendes habe ich getan:

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),
        );
    }
}

Zu diesem Zeitpunkt funktioniert die Funktion nicht mehr wie erwartet:

$this->firstname and $this->lastname

Keine Rückgabe von Nullwerten mehr.

Problem: Ich möchte die Kommentare behalten, aber auch dafür sorgen, dass die Funktion funktioniert.

Hinweis: Wenn Sie Ihre Benutzer über eloquente Ex erreichen. ( User::all()->first(); ) Wir haben den Vor- und Nachnamen, aber nicht den vollständigen Namen, danke für die Hilfe

P粉178894235
P粉178894235

Antworte allen(1)
P粉955063662

https://github.com/DarkaOnLine/L5-Swagger/issues/157

根据这个问题: 在模型上定义属性会产生很多 eloquent 的问题

我找到了 3 种方法来解决这个问题:

选项 1:您需要进行的重构量最少

保留注释并删除属性定义,例如: 这:

#[OA\Property(type: "string", example: "Jhon")] 
private $firstname; 

#[OA\Property(type: "string", example: "Doe")] 
private $lastname;

will become 这:

#[OA\Property(property: "firstname", type: "string", example: "Jhon")] 
#[OA\Property(property: "lastname",type: "string", example: "Doe")]

注意:属性或注释必须位于变量或函数之上,否则会产生错误。

选项 2:更干净,但增加了更多工作

将您的开放 API 声明放在其他地方。例如:

选项 3: 这就是我使用的

将您的属性添加到架构声明中 示例:

#[OA\Schema(schema: "IUser", properties: [
    new OA\Property(property: "firstname", type: "string", example: "Jhon"),
    new OA\Property(property: "lastname",type: "string", example: "Doe")
])]

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!