Laravel 8 Livewire 在其他方法中使用来自渲染的变量数据
Laravel 8 Livewire use variable data from render in other method
在我基于 livewire 的 Laravel 8 Jetstream 安装中,我有一个列出一些记录的组件。
这些记录可以在前端根据一些标准实时过滤并实时更新和分页。
还没有什么特别的,一切都按预期进行。
现在,我需要实现一个 export()
方法来导出过滤后的数据,我不知道如何或什至不确定是否可以从 render()
访问数据变量方法,以便我只能使用过滤后的数据进行导出。
Pages
分量
public $type;
public $color;
public function export() {
$dataToExport = 'here I need the filtered data from $pages variables from render method so I can export them';
}
public function render() {
$pages = Page::when($this->type, function($query) {
$query->where('type', $this->type);
})
->when($this->color, function($query) {
$query->where('color', $this->color);
})
...
->paginate();
return view('livewire.page.index', [
'pages' => $pages
]);
}
我正在使用 render()
方法通过查询数据库来准备数据,因为当我在前端更改某些内容时它会呈现和输出正确的数据。
基本上,一切正常,但在前端我有一个按钮会触发export
方法,所以过滤后的数据必须可用于要导出的方法。
我也选择这种方法,因为我认为不在 public 属性 中公开数据更安全。也许我没有使用最好的方法,所以我愿意接受一个更好的解决方案,同时兼顾性能和安全性。
顺便说一句:在 render()
方法中使用变量或使用属性有什么区别(就安全性 and/or 性能而言)?
在渲染器或 public 属性 上使用数据在性能或安全性方面没有显着差异,这两种方法都会将数据公开给 javascript.如果您要处理敏感数据,我不建议您使用 Livewire。
根据您的代码,我认为您可以使用函数获得相同的查询:
public $type;
public $color;
public function export() {
$dataToExport = $this->pages()->someWayOfExportTheFilteredData();
}
public function render() {
return view('livewire.page.index', [
'pages' => $this->pages()->paginate()
]);
}
protected function pages()
{
return Page::when($this->type, function($query) {
$query->where('type', $this->type);
})
->when($this->color, function($query) {
$query->where('color', $this->color);
})
...
}
在我基于 livewire 的 Laravel 8 Jetstream 安装中,我有一个列出一些记录的组件。
这些记录可以在前端根据一些标准实时过滤并实时更新和分页。
还没有什么特别的,一切都按预期进行。
现在,我需要实现一个 export()
方法来导出过滤后的数据,我不知道如何或什至不确定是否可以从 render()
访问数据变量方法,以便我只能使用过滤后的数据进行导出。
Pages
分量
public $type;
public $color;
public function export() {
$dataToExport = 'here I need the filtered data from $pages variables from render method so I can export them';
}
public function render() {
$pages = Page::when($this->type, function($query) {
$query->where('type', $this->type);
})
->when($this->color, function($query) {
$query->where('color', $this->color);
})
...
->paginate();
return view('livewire.page.index', [
'pages' => $pages
]);
}
我正在使用 render()
方法通过查询数据库来准备数据,因为当我在前端更改某些内容时它会呈现和输出正确的数据。
基本上,一切正常,但在前端我有一个按钮会触发export
方法,所以过滤后的数据必须可用于要导出的方法。
我也选择这种方法,因为我认为不在 public 属性 中公开数据更安全。也许我没有使用最好的方法,所以我愿意接受一个更好的解决方案,同时兼顾性能和安全性。
顺便说一句:在 render()
方法中使用变量或使用属性有什么区别(就安全性 and/or 性能而言)?
在渲染器或 public 属性 上使用数据在性能或安全性方面没有显着差异,这两种方法都会将数据公开给 javascript.如果您要处理敏感数据,我不建议您使用 Livewire。
根据您的代码,我认为您可以使用函数获得相同的查询:
public $type;
public $color;
public function export() {
$dataToExport = $this->pages()->someWayOfExportTheFilteredData();
}
public function render() {
return view('livewire.page.index', [
'pages' => $this->pages()->paginate()
]);
}
protected function pages()
{
return Page::when($this->type, function($query) {
$query->where('type', $this->type);
})
->when($this->color, function($query) {
$query->where('color', $this->color);
})
...
}