0

我正在使用$form我需要在请求之间访问的对象安装我的组件。里面的数据$form不是秘密,但不应该被篡改,所以我想把它变成一个protected财产。尽管public在请求之间只保留了属性,但将其暴露给前端。

如果可能的话,我怎样才能防止对这个公共财产的操纵?

我试过支票

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

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

此外,在我的情况下,使用会话不是一种选择。

有任何想法吗?

4

1 回答 1

2

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

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

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

    这将重新获取与您的组件的每次交互的数据。您可以像以前一样在模板中访问它$form。确保$form作为公共财产移除。使用此解决方案无法处理来自客户端/用户站点的 $form 数据。文档

  2. 如果您需要您的用户/客户端来操作数据,请使用验证规则,但只能使用您期望的方式。

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

    完整示例

  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");
    }
    
于 2021-01-01T18:53:46.007 回答