Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menghantar objek dengan pembolehubah persendirian dari Laravel ke Inersia

Saya baru menggunakan Laravel Inertia

Versi laravel saya ialah: 9.10.1, versi Inersia: 0.11, Vue: 3.2

Saya mempunyai RefundManager kelas saya

class RefundManager
{
    private int $id;
    private string $refund;

    public function __construct(
        int $id,
        string $refund,
    ) {
        $this->id = $id;
        $this->refund = $refund;
    }

    public function id(): int
    {
        return $this->id;
    }

    public function refund(): string
    {
        return $this->refund;
    }

}

Saya mempunyai objek kelas ini dalam pengawal saya dan saya mempunyai akses sempurna kepada $id dan $refund melalui kaedah masing-masing id() dan return(). Tetapi apabila saya cuba menghantarnya kepada inersia, saya menerima objek kosong. Langkah-langkah:

return Inertia::render("Ppo/Sat/RefundCases/Index", [
   'refund' => $myRefundObject
]);

Dalam komponen vue saya, saya telah mengisytiharkan prop sebagai objek:

props: {
  'refund': Object
}

Apabila saya menukar pembolehubah $id,$refund kepada awam ia berjaya.

Tetapi apabila $id dan $refund adalah peribadi, saya hanya menerima objek kosong dan tidak mempunyai akses kepada fungsi awam...

Bagaimanakah saya boleh menjadikannya berfungsi dengan pembolehubah persendirian dengan mengaksesnya melalui kaedah awam?

P粉986937457P粉986937457206 hari yang lalu456

membalas semua(1)saya akan balas

  • P粉018548441

    P粉0185484412024-03-27 00:44:54

    Untuk menukar objek PHP kepada objek JS, anda perlu menukarnya kepada rentetan format json.

    Laravel melakukan ini secara automatik apabila anda menghantar objek (jika ditakrifkan dalam kelas) ke paparan dengan cuba memanggil toJson() (secara lalai ia wujud dalam kelas Model)

    Jadi tambah dua fungsi ini (menambah toArray() tidak menyakitkan juga)

    /**
     * Convert the object instance to an array.
     *
     * @return array
     */
    public function toArray()
    {
        return [
            'id' => $this->id,
            'refund' => $this->refund,
        ];
    }
    
    /**
     * Convert the object instance to JSON.
     *
     * @param  int  $options
     * @return string
     *
     * @throws \Exception
     */
    public function toJson($options = 0)
    {
        $json = json_encode($this->toArray(), $options);
    
        if (JSON_ERROR_NONE !== json_last_error()) {
            throw new \Exception(json_last_error_msg());
        }
    
        return $json;
    }

    balas
    0
  • Batalbalas