recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment passer un objet avec des variables privées de Laravel à Inertia

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粉986937457P粉986937457304 Il y a quelques jours587

répondre à tous(1)je répondrai

  • P粉018548441

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

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

    répondre
    0
  • Annulerrépondre