Heim  >  Fragen und Antworten  >  Hauptteil

So übergeben Sie ein Objekt mit privaten Variablen von Laravel an Inertia

Ich bin neu in der Verwendung von Laravel Inertia

Meine Laravel-Version ist: 9.10.1, Inertia-Version: 0.11, Vue: 3.2

Ich habe meine Klasse 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;
    }

}

Ich habe ein Objekt dieser Klasse in meinem Controller und habe über ihre jeweiligen Methoden id() und return() perfekten Zugriff auf $id und $refund. Aber wenn ich versuche, es an Trägheit zu übergeben, erhalte ich ein leeres Objekt. Schritte:

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

In meiner Vue-Komponente habe ich prop als Objekt deklariert:

props: {
  'refund': Object
}

Als ich die Variable $id,$refund in „public“ geändert habe, hat es funktioniert.

Aber wenn $id und $refund privat sind, erhalte ich nur ein leeres Objekt und habe keinen Zugriff auf die öffentlichen Funktionen...

Wie kann ich es mit privaten Variablen zum Laufen bringen, indem ich über öffentliche Methoden darauf zugreife?

P粉986937457P粉986937457206 Tage vor453

Antworte allen(1)Ich werde antworten

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

    Antwort
    0
  • StornierenAntwort