首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在laravel-livewire项目中添加L5存储库?

如何在laravel-livewire项目中添加L5存储库?
EN

Stack Overflow用户
提问于 2020-09-03 21:24:08
回答 3查看 709关注 0票数 0

在laravel-livewire / project中,我需要使用存储库。我找到了库https://github.com/andersao/l5-repository,并查看了如何将存储库分配给PostsController的示例

代码语言:javascript
复制
namespace App\Http\Controllers;

use App\PostRepository;

class PostsController extends BaseController {

    protected $repository;

    public function __construct(PostRepository $repository){
        $this->repository = $repository;
    }

    ....
}

我试着用component来做类似的事情:

代码语言:javascript
复制
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是

代码语言:javascript
复制
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();
    }

有没有有效的方法?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2020-09-03 22:23:14

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

代码语言:javascript
复制
  public function mount(FacilityRepositoryInterface $FacilityRepository)
    {
        $this->FacilityRepository = $FacilityRepository;
    }
票数 2
EN

Stack Overflow用户

发布于 2020-09-03 22:22:38

您应该使用mount方法进行依赖项注入

所以这应该是可行的

代码语言:javascript
复制
class Facilities extends Component {
  public function mount(FacilityRepositoryInterface $FacilityRepository) {
    $this->FacilityRepository = $FacilityRepository;
  }
}

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

票数 1
EN

Stack Overflow用户

发布于 2021-03-17 03:44:18

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

代码语言:javascript
复制
public function addTodo(TodoService $todoService, $id, $name)
    {
        ...
    }

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63724606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档