Laravel collection 显示和短路问题

Laravel collection display and short issue

大家好!


我对 collection 有点小问题。我从来没有和这些一起工作过。我想在欢迎 blade 时显示一个 collection,但有一个问题。我的 collection 不在控制器中,collection 的位置在 App/Repositories/xyz.php 和函数中。我如何将此功能传递给控制器​​并在欢迎时显示它blade??

App/repositories/xyz.php

public function getcars(): Collection
    {
        
        return collect([
               new Car(...)
)];

控制器

 public function __invoke(): View
    {
        return view('welcome', ['cars' => collect([
            new Car() ------> I would like to put datas from xyz.php repo here 
            new Car()
            new Car()
            ....

和 welcome.blade 我想显示的文件

<div class="car-list">
    <h2>{{ $title }}</h2>
    @foreach($cars as $car)
        <x-car :car="$car" />
    @endforeach
</div>

我相信从您的 Controller 文件中,您可以通过 __construct() 方法创建存储库的对象 属性,如下所示:

protected MyRepository $myRepository;

public function __construct(MyRepository $myRepository)
{
    $this->myRepository = $myRepository;
}

然后,您可以从那里调用$this->myRepository的方法,例如获取记录等。然后您可以将结果传递给您的视图。

您可以通过多种方式做到这一点:

正在创建新实例

use App\repositories\Xyz;

public function __invoke(): View
{
    $repo = new Xyz();
    
    return view('welcome')->with('cars', $repo->getcars());
}

从容器中拉出您的class

use App\repositories\Xyz;

public function __invoke(): View
{
    $repo = app(Xyz::class);
    
    return view('welcome')->with('cars', $repo->getcars());
}

使用依赖注入从容器中解析

use App\repositories\Xyz;

protected Xyz $repo;

public function construct(Xyz $xyz): View
{
    $this->repo = $xyz;
}    

public function __invoke(): View
{   
    return view('welcome')->with('cars', $this->repo->getcars());
}