如何从多个控制器获取数据到 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()
代码包含在OwnerPetController
和HomeController
中?当我们看到它背后的所有逻辑时,它会更容易提供帮助。
【参考方案1】:
这意味着您想要一个页面,右侧有添加表单,左侧有宠物列表和主人信息(例如)。
所以,你只是
-
这条路线::get('/list', 'OwnerPetController@index')->name('list');将返回列表宠物并从同一页面添加。
创建另一个路由,例如 Route::post('/add', 'PetController@addPet')->name('add'); (在同一控制器或其他控制器中,由您决定)添加宠物。
填完表格点击提交后,addPet函数必须返回view('pets');
希望能提出你的问题。
谢谢
【讨论】:
以上是关于如何从多个控制器获取数据到 Laravel Blade 视图中?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过从vuejs组件获取数据在Laravel控制器中创建多个行
当我们压缩到视图时,如何对从控制器获取的 JSON 数组中的数据求和(Laravel)