Добрый день. Накопилось несколько вопросов, подскажите, как правильно.
1) В Laravel есть сервис контейнер. Рекомендуется инжектить нужный класс в конструктор или, если вы находитесь вне контейнера, то использовать make:
$api = $this->app->make('HelpSpot\API');
То есть вообще не нужно никогда создавать объекты через new? Только через type-hint или make?
С инжектом все понятно, но я не понимаю, какую гибкость дает make, ведь в случае замены класса, нам все равно придется идти и менять класс во всех местах.
Там еще есть binding и можно инжектить класс интерфейса, а получать экземпляр его класса, но тут же сказано:
There is no need to bind classes into the container if they do not depend on any interfaces. The container does not need to be instructed on how to build these objects, since it can automatically resolve these objects using reflection.
Должен ли я все свои классы создавать через интерфейсы и биндить их?
2) Уже спрашивал, но не получил ответа.
class Gibhub implements VCSInterface
{
public function getRepositories(string $author) array
{
$response = Http::get('api.github.com/...')->json();
if (!isset($response['key']) {
throw new Exception('Not found');
}
return $response;
}
}
У меня есть вот такой код, но PhpStorm подсвечивает "throw new Exception" с комментарием "Unhandled Exception". Зачем он это делает? Планируется вызывать этот метод и оборачивать его в try-catch.
3) Я прочел вот такую рекомендацию о Laravel
It’s better not to use query builders inside controllers
.
Является ли хорошим тоном выносить всю работу с моделями в отдельные классы и держать контроллеры тонкими?
Спасибо.