将多个模型绑定到laravel中的一个View Controller

时间:2017-08-08 13:26:03

标签: php laravel web laravel-5.4

我开始放弃了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中,我可以在同一页面上创建多个组件,每个组件都有自己独立的控制器和模型。

3 个答案:

答案 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)

简而言之,一个控制器可以向多个模型发送请求以更新单个视图,因此可以在一个控制器中使用多个模型