我开始放弃了laravel因为无法遵循我一直认为理所当然的某种模式!!
让我们假设我有这个链接的例子 https://laravel.com/docs/5.4/container#introduction
public function show($id)
{
$user = $this->users->find($id);
return view('user.profile', ['user' => $user]);
}
此用户模型绑定到该控制器以显示在视图中。 如果我需要注入另一个模型,请将其称为 plane ,这与用户模型无关(无DB关系)。 所以我在同一视图中列出了它们。
在Angular中,我可以在同一页面上创建多个组件,每个组件都有自己独立的控制器和模型。
答案 0 :(得分:5)
Laravel支持上下文绑定。
它还具有绑定数据库模型的快捷方式:
模型绑定
在您的RouteServiceProvider
中,您可以:
Route::model("user", App\User::class);
然后您的路线声明为:
Route::get("/users/{user}","UserController@show");
你的控制器:
public function show(User $user) {
//$user->id is based on the {user} route parameter
}
其他内容绑定
Route::bind("plane", function ($id, RouteInfo $routeInfo) {
// Get the plane object based on the given $id and optionally the extra route info parameters
return $planeObject;
});
您的路线可以声明为:
Route::get("/planes/{plane}", function (Plane $plane) {
//$plane will depend on passed parameter
});
Laravel还支持正常绑定:
在您的AppServiceProvider
中,您可以:
$this->app->bind(Plane::class, function ($app) {
//Make a plane class object
return $planeObject;
});
然后在你的控制器方法(或Laravel允许依赖注入发生的任何地方)你可以这样做:
public function show(Plane $plane) {
//Plane is the globally declared binding
}
您也可以将两者结合起来:
Route::model("user", App\User::class);
$this->app->bind(Plane::class, function ($app) {
//Make a plane class object
return $planeObject;
});
Route::get("/users/{user}","UserController@show");
public function show(User $user, Plane $plane) {
//$user->id is based on the {user} route parameter and $plane is resolved using the service container
}
答案 1 :(得分:2)
是的,你可以用这样的laravel绑定多个模型:
public function show(User $user, Plane $plane)
{
return view('user.plane', compact('user', 'plane')]);
}
并且正如@apokryfos所说,你的例子在控制器中没有任何绑定,
这是相应路线的一个例子:
Route::get('/fakeRoute/{user}/{plane}', 'FakeController@show');
链接示例:
yourSite.com/fakeRoute/1/25
答案 2 :(得分:0)
简而言之,一个控制器可以向多个模型发送请求以更新单个视图,因此可以在一个控制器中使用多个模型