laravel - 如何从多个控制器获取数据到 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 个视图的视图吗?但我不知道如何让函数将数据传递给他们。
请我需要一些建议。谢谢。
解决方案
这意味着您需要一个页面,其中右侧有添加表单,左侧有宠物列表和所有者信息(例如)。
所以,你只是
- 这条路线::get('/list', 'OwnerPetController@index')->name('list'); 将返回列表宠物并从同一页面添加。
- 创建另一条路线,例如 Route::post('/add', 'PetController@addPet')->name('add'); (在同一控制器或其他控制器中,由您决定)用于添加宠物。
- 填写表格并点击提交后,addPet 函数必须返回 view('pets');
希望提出你的问题。
谢谢
推荐阅读
- sql - Dense Rank 显示不正确的值
- kubernetes - 如何为领事公开入口
- jquery - AJAX 调用向控制器发送空参数
- azure-devops - DevOps 组织未出现在我的帐户中
- ios - 我如何解析自定义 JSON 数据
- vb.net - 如何使用递归提取 ContextMenuStrip 的所有 ToolStripMenuItems?
- swiftui - SwiftUI/UIKit 如何将 SwiftUI 字体转换为 UIKit UIFont?
- python - Flask 发送带有 curl 的图像作为 json 有效负载
- javascript - 每次在赛普拉斯中生成具有动态名称的文件时读取它?
- reactjs - useEffect 与局部变量