如何从多个控制器获取数据到 Laravel Blade 视图中?

Posted

技术标签:

【中文标题】如何从多个控制器获取数据到 Laravel Blade 视图中?【英文标题】:How can I get data from multiple controllers into a Laravel Blade view? 【发布时间】:2021-06-29 06:38:42 【问题描述】:

我是 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 个视图的视图吗?但我不知道如何获得将数据传递给它们的函数。

我需要一些建议。谢谢。

【问题讨论】:

您能否将您的index() 代码包含在OwnerPetControllerHomeController 中?当我们看到它背后的所有逻辑时,它会更容易提供帮助。 【参考方案1】:

这意味着您想要一个页面,右侧有添加表单,左侧有宠物列表和主人信息(例如)。

所以,你只是

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

希望能提出你的问题。

谢谢

【讨论】:

以上是关于如何从多个控制器获取数据到 Laravel Blade 视图中?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过从vuejs组件获取数据在Laravel控制器中创建多个行

当我们压缩到视图时,如何对从控制器获取的 JSON 数组中的数据求和(Laravel)

如何从控制器获取记录到 Ajax laravel 5.2

连接查询以获取多个数据到 laravel 中的数据表

如何将数据从ajax get方法发送到laravel中的控制器?

如何正确地将数据从 vue 组件发布到 laravel 控制器