首页 > 解决方案 > 如何从多个控制器获取数据到 Laravel Blade 视图中?

问题描述

我是 Laravel(和编程)的新手,我有点困惑。

使用 Eloquent ORM,我在数据库中存储了一个宠物列表及其信息,并在一个带有 Pet 模型和 Pet 控制器的 pets 表中。我还有一个带有用户模型的用户表。然后我有一个 owner_pet 表,其中包含 user_id 和 pet_id 的外键,以及 OwnerPet 模型和控制器。

我有一个名为“宠物”的视图,我希望有一个表格和用户宠物列表,只有经过身份验证的用户才能访问。

我有这条路线:

 Route::get('/pets', [App\Http\Controllers\HomeController::class, 'index'])->name('pets');

在那里,使用 auth 中间件检查用户是否登录并返回视图“宠物”,其中包含添加宠物的表单。

    public function __construct()
{
    $this->middleware('auth');
}

    public function index()
{
    return view('pets');
}

这工作正常。

然后我有一个带有添加宠物功能的宠物控制器,我将它与“宠物”视图中调用此路由的表单一起使用:

Route::post('/add', 'PetController@addPet')->name('add');

添加宠物后,我会返回带有成功消息的“宠物”视图。

return view('pets')->with('success', $success);

这工作正常。

然后我有一个 ownerPets 索引函数,我可以在其中获取我需要的所有信息并将其存储为 $pets 并调用“列表”视图:

public function index()
{
    $ownerPets = OwnerPet::leftjoin('pets', 'pets.id', '=', 'owner_pets.pet_id')
    ->where('user_id', Auth::user()->id)->paginate(20);
    return view('list')->with('pets', $pets);
}

我用这条路线调用函数:

Route::get('/list', 'OwnerPetController@index')->name('list');

这很好用,我可以看到用户宠物的列表。

但是我需要将所有内容都放在同一个视图中,并且我只能从路由中调用一个函数。

我是否需要制作另一个控制器并从那里调用所有函数,然后将所有数据发送到视图?有人告诉我从另一个控制器调用控制器是一种不好的做法,但我想不出另一种方法来做到这一点。

我可以制作一个包含其他 2 个视图的视图吗?但我不知道如何让函数将数据传递给他们。

请我需要一些建议。谢谢。

标签: laravelviewroutescontrollerlaravel-blade

解决方案


这意味着您需要一个页面,其中右侧有添加表单,左侧有宠物列表和所有者信息(例如)。

所以,你只是

  1. 这条路线::get('/list', 'OwnerPetController@index')->name('list'); 将返回列表宠物并从同一页面添加。
  2. 创建另一条路线,例如 Route::post('/add', 'PetController@addPet')->name('add'); (在同一控制器或其他控制器中,由您决定)用于添加宠物。
  3. 填写表格并点击提交后,addPet 函数必须返回 view('pets');

希望提出你的问题。

谢谢


推荐阅读