Laravel Livewire 获取当前页面 ID
Laravel Livewire get current page ID
在一个视图中,我包含了一个 livewire 组件,如下所示:
<livewire:search-comments :post="$post">
我可以如上所示传入post。但问题是这只在 mount()
:
上完成
public function mount($post)
{
$this->post = $post;
}
在render()
中,我有:
$comments = $this->post->comments()
->where('comment', 'like', "%{$this->search}%")
->get()
问题是我需要在每次 render()
调用时访问 $post
,因为搜索的评论与用户当前所在的 post 相关联。我可以在隐藏字段中传递 post ID,但感觉这不是正确的(也是安全的..?)解决方案。
有多种方法可以实现这一点。就像您可以在用户尝试加载新的 post 时发出事件一样。然后使用魔术方法 $refresh 刷新组件。
protected $listeners = [
'newPostLoad' => '$refresh',
];
或者,
您可以在尝试加载新的 post 时传递 post id。像这样:
// as per your snippets above I assume ur blade has post collection which holds id for each posts.
wire:click=loadNewPost(id)
然后你可以在 loadNewPost 函数中重置你的 $this->post 。
希望这对您有所帮助。让我知道。我再细说
在一个视图中,我包含了一个 livewire 组件,如下所示:
<livewire:search-comments :post="$post">
我可以如上所示传入post。但问题是这只在 mount()
:
public function mount($post)
{
$this->post = $post;
}
在render()
中,我有:
$comments = $this->post->comments()
->where('comment', 'like', "%{$this->search}%")
->get()
问题是我需要在每次 render()
调用时访问 $post
,因为搜索的评论与用户当前所在的 post 相关联。我可以在隐藏字段中传递 post ID,但感觉这不是正确的(也是安全的..?)解决方案。
有多种方法可以实现这一点。就像您可以在用户尝试加载新的 post 时发出事件一样。然后使用魔术方法 $refresh 刷新组件。
protected $listeners = [
'newPostLoad' => '$refresh',
];
或者,
您可以在尝试加载新的 post 时传递 post id。像这样:
// as per your snippets above I assume ur blade has post collection which holds id for each posts.
wire:click=loadNewPost(id)
然后你可以在 loadNewPost 函数中重置你的 $this->post 。
希望这对您有所帮助。让我知道。我再细说