Php Laravel Virgin:在控制器中注入一个模型作为依赖项
在我在模型中继承的代码中有一些重要的逻辑,我想使用Laravel的依赖项注入,以便将模型作为依赖项加载到控制器中,而不是使用Laravel提供的外观 下面是一个示例控制器:Php Laravel Virgin:在控制器中注入一个模型作为依赖项,php,laravel-5,dependency-injection,refactoring,legacy-code,Php,Laravel 5,Dependency Injection,Refactoring,Legacy Code,在我在模型中继承的代码中有一些重要的逻辑,我想使用Laravel的依赖项注入,以便将模型作为依赖项加载到控制器中,而不是使用Laravel提供的外观 下面是一个示例控制器: namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; class UserController extends Controller { /** * Show the profile for
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return View
*/
public function show($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
user App\Models\User
class UserController extends Controller
{
/**
* @var User
*/
private $user=null;
public function __construct(User $user)
{
$this->user=$user;
}
/**
* Show the profile for the given user.
*
* @param int $id
* @return View
*/
public function show($id)
{
return view('user.profile', ['user' => $this->user->findOrFail($id)]);
}
}
但是,我不想使用FacadeUser
,而是希望能够将其作为依赖项加载到控制器中:
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return View
*/
public function show($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
user App\Models\User
class UserController extends Controller
{
/**
* @var User
*/
private $user=null;
public function __construct(User $user)
{
$this->user=$user;
}
/**
* Show the profile for the given user.
*
* @param int $id
* @return View
*/
public function show($id)
{
return view('user.profile', ['user' => $this->user->findOrFail($id)]);
}
}
我之所以想这样做,是因为我来自Symfony的背景,在那里依赖注入模式被严重破坏。此外,依赖项注入是单元测试的最佳伙伴,因此我希望能够统一我熟悉的依赖项注入
因此,我想知道是否可以在控制器中存在逻辑的地方注入模型,而不是使用laravel提供的Facade模式。注册路由时,可以使用模型绑定:
// routes/web.php
Route::get('users/{user}', 'UserController@show');
然后在控制器中,您可以将方法更改为:
public function show(User $user)
{
//
}
其中,$user
将是具有正确id的App\user
实例。例如,如果url是/users/1
,则$user
将包含id为1
的App\user
有关更多信息: