在laravel-livewire / project中,我需要使用存储库。我找到了库https://github.com/andersao/l5-repository,并查看了如何将存储库分配给PostsController的示例
namespace App\Http\Controllers;
use App\PostRepository;
class PostsController extends BaseController {
protected $repository;
public function __construct(PostRepository $repository){
$this->repository = $repository;
}
....
}我试着用component来做类似的事情:
use App\Repositories\Interfaces\FacilityRepositoryInterface;
class Facilities extends Component
{
use WithPagination;
public $form= [
'name'=>'',
'descr'=> '',
'created_at'=> '',
'is_reopen' => false,
];
public $current_facility_id;
public $filter_name= '';
public $updateMode = 'browse';
protected $FacilityRepository;
public function __construct(FacilityRepositoryInterface $FacilityRepository)
{
$this->FacilityRepository = $FacilityRepository;
}
public function render()
{
$backend_per_page = Settings::getValue('backend_per_page', CheckValueType::cvtInteger, 20);
$this->emit('facility_opened', [ 'mode'=>'browse', 'id'=>null ] );
return view('livewire.admin.facilities.container', [
'facilityDataRows' => $this->FacilityRepository->filterWithPagination(
[
'name'=>$this->filter_name,
'per_page'=> $backend_per_page
]
),
'facility_rows_count'=> $this->facility_rows_count
]);
}其中,filterWithPagination是
class FacilityRepository extends BaseRepository implements FacilityRepositoryInterface
{
private $UserRepository;
...
I found definition of __construct in in vendor/livewire/livewire/src/Component.php as :
public function __construct($id)
{
$this->id = $id;
$this->ensureIdPropertyIsntOverridden();
$this->initializeTraits();
}有没有有效的方法?
谢谢!
发布于 2020-09-03 22:23:14
我也有同样的担忧。我认为livewire目前还不支持依赖注入。您现在可以做的就是将您的存储库注入mount方法中。
public function mount(FacilityRepositoryInterface $FacilityRepository)
{
$this->FacilityRepository = $FacilityRepository;
}发布于 2020-09-03 22:22:38
您应该使用mount方法进行依赖项注入
所以这应该是可行的
class Facilities extends Component {
public function mount(FacilityRepositoryInterface $FacilityRepository) {
$this->FacilityRepository = $FacilityRepository;
}
}请参阅文档:https://laravel-livewire.com/docs/rendering-components#injecting-parameters
发布于 2021-03-17 03:44:18
如果您的操作需要任何应该通过Laravel的依赖项注入容器解析的服务,您可以在操作的签名中将它们列在任何其他参数之前
public function addTodo(TodoService $todoService, $id, $name)
{
...
}https://stackoverflow.com/questions/63724606
复制相似问题