Rumah > Soal Jawab > teks badan
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粉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") ])]