初始化之前,不能访问类型化的属性App\Http\Livewire\Roles\EditUserRole::$u



//当我已经初始化时抛出错误?需要帮助

public function mount()
{
$this->user_model = new User();
$this->userData = $this->user_model->displayUsers();
$this->role_model = $role_model ?? new Role();
$this->roleData = $this->role_model->displayRoles();
}

尝试在属性定义中设置默认值。

class YouLivewireClass extends Component
{
public string $email = "";
public int $number = 0;
public ?User $user = null;
public function mount()
{
// your logic
}
}

Livewire中的mount()方法与__construct方法不同。

它很早就被调用了,但对象已经创建,并且执行了一些常规的PHP检查。如果您为可能导致Livewire错误的属性定义了严格的类型,因为它们在初始化过程中不能回退到null。

下面是Livewire论坛的一个很好的解释:https://forum.laravel-livewire.com/t/1-0-3-typed-property-must-not-be-accessed-before-initialization/320

对于任何想知道为什么的人:使用7.4中的类型化属性,他们有一个已初始化和未初始化的状态,而不是预期的如果没有null值,则属性默认为null值的行为已分配。在"常规"类中,属性可以维护未初始化状态,并且只有当您尝试实际访问它。这一切都是有意义的,因为这一切的意义就是要有更严格的规范。

Livewire(以及Laravel的一部分(有几个原因matter(不同于教科书中的oop对象。首先,mount((应该不要被认为是__construct((,应该被认为更接近Laravel的boot((方法。该对象已经构建,并且使Livewire工作起来的幕后工作将调用mount((方法。mount((只是第一个被调用的方法在您提供给Livewire的代码中。

最新更新