0

在 laravel-livewire / project 我需要使用存储库。我找到了库https://github.com/andersao/l5-repository 并查看了如何将 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();
    }

有没有有效的方法?

谢谢!

4

3 回答 3

2

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

  public function mount(FacilityRepositoryInterface $FacilityRepository)
    {
        $this->FacilityRepository = $FacilityRepository;
    }
于 2020-09-03T14:23:13.640 回答
1

你应该使用mount依赖注入的方法

所以这应该有效

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

请参阅文档:https ://laravel-livewire.com/docs/rendering-components#injecting-parameters

于 2020-09-03T14:22:37.980 回答
0

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

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

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

于 2021-03-16T19:44:18.493 回答