如何保护 public Laravel livewire 属性 免受操纵?

How protect public Laravel livewire property from manipulation?

我正在使用我需要在请求之间访问的对象 $form 安装我的组件。 $form 中的数据不是秘密,但不应被篡改,所以我想将其设为 protected 属性。尽管在请求之间仅保留 public 属性,但它暴露在前端。

如果可能,我怎样才能防止对此 public 属性 进行操纵?

我试了一下

public function updating($key, $value)
{
    if($key === 'form') return;
}

但我不认为这真的有任何作用。

此外,在我的情况下,使用会话不是替代方案。

有什么想法吗?

在我看来,您有以下选择:

  1. 不要将数据存储为 public 属性,而是 将其传递给 您在 render() 方法中的视图

    public function render(){
       return view('Livewire.nameofyourview ', [
          'form' => YourDataSource::get()
       ]);
    } 
    

    这将在每次与您的组件交互时重新获取数据。您可以像以前一样在您的模板中访问它 $form。 确保将 $form 删除为 public 属性。使用此解决方案无法操作 $form 数据表单 client/user 站点。 Docs

  2. 如果您需要 user/client 来操纵 验证规则 数据,但只有您期望的方式。

    protected $rules = [
        'form.name' => 'required|min:6',
        'form.email' => 'required|email',
    ];
    

    Full Example

  3. 使用Laravel缓存在请求之间保存数据。这种技术 如果您无法从源中重新获取数据,则很有用,例如 它作为参数 (<livewire:form-component :form="$form">) 传递给您的 Livewire 组件。

    /* Cache the data on component mount */
    public function mount($form)
    {
        Cache::set($this->id."_form", $form, 60*10);
    }
    
    public function someFunction()
    {
        /* read the data form cache, if you need it again */
        cache($this->id."_form");
    }