【发布时间】: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中?当我们看到它背后的所有逻辑时,它会更容易提供帮助。
标签: laravel view routes controller laravel-blade