Bagaimana untuk menghantar objek dengan pembolehubah persendirian dari Laravel ke Inersia
P粉986937457
P粉986937457 2024-03-26 20:52:09
0
1
494

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粉986937457
P粉986937457

membalas semua(1)
P粉018548441

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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan