Например, у нас есть форма EmployeeCreateForm, которой для валидации необходим репозиторий (Проверить, например, наличие юзера в базе). Каким образом передать этот самый репозиторий, который со своими параметрами установлен в DI контейнере? Через контроллер?
Есть ли еще какие-то варианты для этого c помощью DI, т.к. в данном случае контроллер будет являться простым посредником в передаче, т.е. по сути он его не использует, а просто передает через себя в эту самую форму EmployeeCreateForm.
Код: Выделить всё
namespace app\controllers;
use app\forms\EmployeeCreateForm;
use app\services\EmployeeService;
use app\repositories\EmployeeRepository;
class EmployeeController
{
private $employeeService;
public function __construct(EmployeeService $employeeService, EmployeeRepository $employeeRepository)
{
$this->employeeService = $employeeService;
$this->employeeRepository = $employeeRepository;
}
public function actionCreate()
{
$form = new EmployeeCreateForm($this->employeeRepository);// ?????
if ($form->load(\Yii::$app->request->post()) && $form->validate()) {
try {
$this->employeeService->create($form->getDto());
.....
} catch (\DomainException $e) {
....
}
}
return $this->render('create', [
'form' => $form,
]);
}
}