Model fasih Laravel dan isu anotasi openApi yang sombong
P粉178894235
P粉178894235 2023-12-31 19:41:40
0
1
527

Jadi, dalam model pengguna saya, saya mempunyai nama penuh fungsi yang mengembalikan nama penuh pengguna:

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

Ia berfungsi seperti yang dijangkakan, kini saya ingin menambah anotasi OpenAPI pada model saya: Inilah yang saya lakukan:

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

Pada masa ini ciri tidak lagi berfungsi seperti yang diharapkan:

$this->firstname and $this->lastname

Tiada lagi mengembalikan nilai nol.

Masalah: Saya mahu menyimpan komen tetapi juga membuat fungsi berfungsi.

Nota: Jika anda mengakses pengguna anda melalui bekas yang fasih. ( User::all()->first(); ) Kami mendapat nama pertama dan akhir tetapi bukan nama penuh, terima kasih atas bantuan

P粉178894235
P粉178894235

membalas semua(1)
P粉955063662

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

Menurut soalan ini: Menentukan atribut pada model akan menyebabkan banyak masalah fasih

Saya jumpa 3 cara untuk menyelesaikan masalah ini:

Pilihan 1: Anda perlu melakukan paling sedikit pemfaktoran semula

Simpan ulasan dan alih keluar definisi atribut, contohnya: Ini:

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

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

akan menjadi ini:

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

Nota: Atribut atau anotasi mestilah berada di atas pembolehubah atau fungsi, jika tidak, ralat akan berlaku.

Pilihan 2: Lebih bersih, tetapi menambahkan lagi kerja

Letakkan pengisytiharan API terbuka anda di tempat lain. Contohnya:

Pilihan 3: Ini yang saya gunakan

Tambahkan sifat anda pada pengisytiharan skema Contoh:

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan