Comment passer un objet avec des variables privées de Laravel à Inertia
P粉986937457
P粉986937457 2024-03-26 20:52:09
0
1
490

Je suis nouveau dans l'utilisation de Laravel Inertia

Ma version de Laravel est : 9.10.1, version Inertia : 0.11, Vue : 3.2

J'ai mon RefundManager de classe

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

}

J'ai un objet de cette classe dans mon contrôleur et j'ai un accès parfait à $id et $refund via leurs méthodes respectives id() et return(). Mais lorsque j'essaye de le passer à l'inertie, je reçois un objet vide. Étapes :

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

Dans mon composant vue, j'ai déclaré prop comme objet :

props: {
  'refund': Object
}

Lorsque j'ai changé la variable $id,$refund en public, cela a fonctionné.

Mais lorsque $id et $refund sont privés, je ne reçois qu'un objet vide et n'ai pas accès aux fonctions publiques...

Comment puis-je le faire fonctionner avec des variables privées en y accédant via des méthodes publiques ?

P粉986937457
P粉986937457

répondre à tous(1)
P粉018548441

Pour convertir un objet PHP en objet JS, vous devez le convertir en chaîne au format json.

Laravel le fait automatiquement lorsque vous envoyez un objet (s'il est défini dans une classe) à la vue en essayant d'appeler toJson() (par défaut il existe dans la classe Model)

Alors ajoutez ces deux fonctions (ajouter toArray() ne fait pas de mal non plus)

/**
 * 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;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal