在组件中的 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);
在渲染方法下,我没有这个错误,但这似乎不好,因为我不会在表单的任何更改上从数据库检索任务数据...
怎样做比较好?
您遇到的一个问题是使用 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