Работая со слоеной архитектурой, используя DI и тп. я столкнулся со следующей проблемой:
К примеру есть такой код контроллера, в котором есть index экшен, который инжектит в себя MyService.
Для простоты и сокращения интерфейсы не рассматриваем.
<?php
namespace App\Http\Controllers;
use App\Http\Requests\TestRequest;
use App\Services\MyService;
class TestController extends Controller
{
protected $myService;
public function index(TestRequest $request, MyService $myService)
{
echo $request->get('var1');
}
}
Как мы знаем, laravel5 сам автоматически инжектит запрашиваемые классы из DIC. Все бы хорошо и здорово, но что если код сервиса выглядит следующим образом:
<?php
namespace App\Services;
class MyService
{
private $data = true;
public function __construct($data)
{
$this->data = (bool)$data;
}
public function getData()
{
return $this->data;
}
}
Тоесть там не нужны сеттеры и в конструкторе ожидается явным образом аргумент. Соответственно при таком раскладе мы увидим ошибку примерно такого содержания:
BindingResolutionException in Container.php line 849: Unresolvable dependency resolving [Parameter #0 [ <required> $data ]] in class App\Services\MyService
Да мы можем забиндить через интерфейс дефолтные данные и все такое, но что если данные которые нам нужны в конструкторе MyService, это именно те данные, которые я ожидаю получить из контроллера, тоесть $request->get('var1');
Исходя из этого подскажите пожалуйста как решается подобная проблема ?
Я смотрю в сторону фабрик, однако хочется получить рекомендацию и пример использования, за ранее спасибо.