Rumah  >  Soal Jawab  >  teks badan

Model fasih Laravel dan isu anotasi openApi yang sombong

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粉178894235P粉178894235267 hari yang lalu482

membalas semua(1)saya akan balas

  • P粉955063662

    P粉9550636622024-01-01 15:31:14

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

    balas
    0
  • Batalbalas