首頁  >  問答  >  主體

如何將帶有私有變數的物件從 Laravel 傳遞到 Inertia

我是新來使用 Laravel 的慣性

我的laravel版本是:9.10.1,Inertia版本:0.11,Vue:3.2

我有我的課程 RefundManager

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;
    }

}

我的控制器中有一個該類別的對象,我可以透過其各自的方法 id() 和 returned() 完美地存取 $id 和 $refund。 但是當我嘗試將其傳遞給慣性時,我收到一個空物體。步驟:

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

在我的 vue 元件中,我已將 prop 宣告為物件:

props: {
  'refund': Object
}

當我將變數 $id,$refund 更改為 public 時,它就起作用了。

但是當 $id 和 $refund 是私有的時,我只收到一個空對象,並且無法存取公共函數...

# 如何透過公共方法存取私有變數來使其與私有變數一起使用?

P粉986937457P粉986937457206 天前457

全部回覆(1)我來回復

  • P粉018548441

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

    要將PHP對象轉換為JS對象,需要將其轉換為json格式的字串。

    當您透過嘗試呼叫 toJson() 向視圖發送物件(如果在類別中定義)(預設情況下它存在於 Model 類別中)時,Laravel 會自動執行此操作

    所以加入這兩個函數(新增 toArray() 也不會造成傷害)

    /**
     * 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;
    }

    回覆
    0
  • 取消回覆