如何将带有私有变量的对象从 Laravel 传递到 Inertia
P粉986937457
P粉986937457 2024-03-26 20:52:09
0
1
497

我是新来使用 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粉986937457
P粉986937457

全部回复(1)
P粉018548441

要将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;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板