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
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:
akan menjadi ini:
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: