如何在 laravel-livewire 项目中添加 l5-repository?

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

在 laravel-livewire / project 中我需要使用 Repositories。 我找到了图书馆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;
    }

    ....
}

我试着用组件制作类似的东西:

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();
    }

有有效的方法吗?

谢谢!

laravel repository laravel-livewire
4个回答
2
投票

我也有同样的担忧。我认为 livewire 目前不支持依赖注入。您现在可以做的是将您的存储库注入 mount 方法。

  public function mount(FacilityRepositoryInterface $FacilityRepository)
    {
        $this->FacilityRepository = $FacilityRepository;
    }

1
投票

你应该使用

mount
方法进行依赖注入

所以这应该有效

class Facilities extends Component {
  public function mount(FacilityRepositoryInterface $FacilityRepository) {
    $this->FacilityRepository = $FacilityRepository;
  }
}

查看文档:https://laravel-livewire.com/docs/rendering-components#injecting-parameters


0
投票

如果您的操作需要任何应通过 Laravel 的依赖注入容器解析的服务,您可以在操作的签名中将它们列在任何其他参数之前

public function addTodo(TodoService $todoService, $id, $name)
    {
        ...
    }

https://laravel-livewire.com/docs/2.x/actions


0
投票

在你的 livewire 组件中使用它

 public function hydrate()
    {
        $this->setRepository();
    }

    public function setRepository()
    {
        $this->cityRepository = App::make(CityRepository::class);
        $this->districtRepository = App::make(DistrictRepository::class);
        $this->villageRepository = App::make(VillageRepository::class);
    }
© www.soinside.com 2019 - 2024. All rights reserved.