我有一段代码想重用。我已经阅读了这篇Laravel cleaner code文章和另一篇Laravel Services Pattern文章,在这篇文章中,我意识到可以通过使用服务类在应用程序的多个地方重用代码。
在本例中,我在新文件夹app/Services/MyService
中创建了一个新的MyService
类。
namespace App\Services;
class MyService
{
public function reuse_code($param){
return void;
}
}
当我想通过Livewire类组件中的构造函数调用类时,问题就出现了,如下所示:
<?php
namespace App\Http\Livewire;
use App\Services\MyService;
use Livewire\Component;
use Livewire\WithPagination;
class LivewireTable extends Component
{
use WithPagination;
private $myClassService;
public function __construct(MyService $myService)
{
$this->myClassService = $myService;
}
public function render()
{
$foo = $this->myClassService->reuse_code($param);
return view('my.view',compact('foo'));
}
}
显示的错误如下:
传递给App\Http\Livewire\LivewireTable::__construct()的参数1必须是App\Services\MyService的示例,给定字符串
(但是,如果我使用一个trait,就没有问题了。但我担心我的特质会像以前的经历一样发生冲突)
我该怎么解决?我错过了什么?
2条答案
按热度按时间oipij1gg1#
Livewire的 Boot 方法在每次请求时运行,在组件示例化之后立即运行,但在调用任何其他生命周期方法之前运行
这是我的解决方案。
zour9fqk2#
解决就像@IGP说的,在livewire文档中阅读到它说:
在Livewire组件中,您使用mount()而不是像您习惯的那样使用类构造函数__construct()。
所以,我的工作代码如下: