В моем унаследованном коде в моделях есть серьезная логика, и я хочу использовать инъекцию зависимостей Laravel для загрузки моделей в качестве зависимостей в контроллер вместо использования предоставляемых Laravel фасадов.
Итак, вот пример контроллера:
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)]);
}
}
Но вместо использования Фасада User
Я хочу иметь возможность загрузить его в качестве зависимости в контроллер:
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 Background, где шаблон внедрения зависимостей сильно истощен. Кроме того, Dependency Injection - лучший друг Unit Test, поэтому я хочу иметь возможность унифицировать Dependency Injection, с которым я знаком.
Поэтому я хотел знать, могу ли я внедрить модели, в которых существует логика в контроллерах, вместо использования шаблона фасада, предоставленного laravel.