Вурдалак
Продвинутый новичок
Так я и говорю: PHP — говно.Запрещать может code style проекта или ревьюер. Так-то и $_GET и global никто не запрещает, ога.
Так я и говорю: PHP — говно.Запрещать может code style проекта или ревьюер. Так-то и $_GET и global никто не запрещает, ога.
Делаешь parent service с абстрактным контроллером, который содержит набор хелперов типа $this->render() и инжектишь с помощью сеттеров. То же самое по удобству.инжектить TemplateEngine внутри контроллера
Не читай хабрахабр по утрам.Особенно, когда интернет переполнен восторженными отзывами типа «ох, мой бох, фасады в ларавел, это гениально».
А какой фреймворк настаивает о таких вещах ?Самое парадоксальное, что основная фича ваших фасадов и есть проблема. Получить инстанс легко откуда угодно, а это в свою очередь означает, что люди меньше задумываются о таких вещах, как декомпозиция, SRP, etc.
В этом смысле джавовский @Inject/@Autowired ничем не лучше: их с такой же легкостью можно наплодить 100500 штук.Фреймворк, как и любой другой инструмент, не может настаивать на таких вещах, но может меньше провоцировать и помогать обнаруживать проблемы. Я убежден, что если в конструктор класса требуется заинжектить over 10 сервисов, то любой человек поймёт, что тут что-то не так. А если я могу дёрнуть любой сервис без каких-то дурацких инъекций, то я могу убедить себя, что проблемы как бы и нет.
А я как раз аннотации не люблю. И да, инъекция напрямую в private ничем не лучше.В этом смысле джавовский @Inject/@Autowired ничем не лучше: их с такой же легкостью можно наплодить 100500 штук.
Так и я об чем: фасады - это, по сути, то же, что @Autowired-инъекция. Выглядит более пугающее, т.к. похоже на статический вызов, но по сути - те же яйца. Соответственно, исключая целиком это дело, имеем классическую писанину с передачей зависимостей, либо инстанциацию всего подряд через DI. Передача таким образом, скажем, какого-нибудь сраного логгера - это очень удручающее занятие. Потому, как по мне, - лучше иметь выбор, и при написании кода использовать головной мозг по назначению.И да, инъекция напрямую в private ничем не лучше.
У меня патологическая неприязнь к трейтам )) Имхо, это какой-то стрёмный способ лепить монстра Франкенштейна. К тому же в трейте автокомплит не работает (т.к. трейт не знает, к кому он будет притрейчен). А у $this->getDoctrine()->gerRepository(..) работает, когда phpstorm с плагином symfonyА еще трейты, в них можно как раз методов доступа к репозиториям напихать и использовать нужные.
Логика Service Locator'а.напихать и использовать нужные.