代码之家  ›  专栏  ›  技术社区  ›  mahmoud fathy

在laravel中将多个模型绑定到一个视图控制器

  •  1
  • mahmoud fathy  · 技术社区  · 9 年前

    假设我有这个链接中的示例 https://laravel.com/docs/5.4/container#introduction

    public function show($id)
    {
        $user = $this->users->find($id);
    
        return view('user.profile', ['user' => $user]);
    }
    

    使用者 模型绑定到要在视图中显示的控制器。 如果我需要注入另一个模型,我们称之为 它独立于用户模型(没有数据库关系)。 所以我把它们都列在同一个视图中。

    3 回复  |  直到 9 年前
        1
  •  5
  •   apokryfos    9 年前

    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
    }
    
        2
  •  2
  •   yoeunes    9 年前

    是的,您可以用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
    
        3
  •  1
  •   Hasnain Abid Khanzada    8 年前

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