如何使从数据库读取数据不会在任何表单更改时重新加载?

问题描述 投票:0回答:1

在组件中的 laravel 10 app / livewire 3 应用程序中,我定义了 $task var:

class TheTaskIsViewed extends Component
{
    public int $taskId;
    protected Task $task;

    public function boot()
    {
    }

    public function mount(Request $request, int $taskId)
    {
        $this->taskId = $taskId;
        $this->task = Task::findOrFail($this->taskId);
        ...
    }


    public function render(Request $request)
    {
        ...
        return view('livewire.admin.the-task-is-viewed', [
            'task' => $this->task,
            ...
        ]);
    }

但是在blade文件中使用这个var

Task "{{ $task->title }}"

我遇到错误:

Typed property App\Livewire\Admin\TheTaskIsViewed::$task must not be accessed before initialization

如果要移动线路

$this->task = Task::findOrFail($this->taskId);

在渲染方法下,我没有这个错误,但这似乎不好,因为我不会在表单的任何更改上从数据库检索任务数据...

怎样做比较好?

laravel-livewire
1个回答
0
投票

您遇到的一个问题是使用 protected,然后尝试访问刀片文件中的 $task 变量。

您可以编辑 Livewire 组件并仅使用路由模型绑定:

class TheTaskIsViewed extends Component
{
    public Task $task;


    public function render()
    {
        return view('livewire.admin.the-task-is-viewed');
    }
}

假设这是一个完整的页面组件,在您的路由文件中:

Route::get('/tasks/{task}', TheTaskIsViewed::class);

或者,你也可以调用 use mount() :

class TheTaskIsViewed extends Component
{

    public Task $task;

    public function mount(Task $task)
    {
        $this->task = $task;
    }


    public function render()
    {
        return view('livewire.admin.the-task-is-viewed');
    }
}

Livewire 的路由模型绑定文档:https://livewire.laravel.com/docs/components#using-route-model-binding

© www.soinside.com 2019 - 2024. All rights reserved.