如何将带有私有变量的对象从Laravel传递到Inertia



我刚开始使用带惯性的laravel
我的laraver版本为:9.10.1,惯性版本为: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()和refund()完全访问$id和$reward。但当我试图把它传递给惯性时,我收到了一个空物体。步骤:

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

在我的vue组件中,我已经将prop声明为对象:

props: {
'refund': Object
}

当我将变量$id、$revoke更改为public时,它就起作用了
但当$id和$revoke是私有的时,我只收到一个空对象,无法访问公共功能
如何通过公共方法访问私有变量,使其与私有变量一起工作?

要将PHP对象转换为JS对象,需要将其转换为json格式的字符串。

当您将对象发送到视图时,Laravel会自动执行此操作,方法是尝试调用类中定义的toJson()(默认情况下,它存在于Model类中)

所以添加这两个功能(添加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;
}

相关内容

  • 没有找到相关文章

最新更新