«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/04/17 04:39:03  №1382653 1
В задании про список студентов оп говорит, что валидатору инфы о студенте нужно в конструктор передавать объект tablegateway, чтобы валидатор мог, например, смотреть, есть ли а базе такой email. Контроллерам тоже нужно будет вызывать методы tablegateway, чтобы работать с базой. Значит в конструктор контроллера надо передавать тоже этот объект tablegateway? А если у меня объект контроллера в роутере создаётся, то сначала объект tablegateway нужно в роутер передавать прямо из index.php? Это и есть Di?
Ответы: >>1382741 >>1385181
Аноним 2019/04/17 09:33:13  №1382741 2
>>1382653
>объект tablegateway нужно в роутер передавать
Классы получают только те зависимости, что нужны для их собственной работы и ничего лишнего. Если представить, что у тебя будет сотня сущностей то под каждую гейтвей в роутер передавать? Херня ведь получится.
DI - это класс-контейнер который содержит в себе все нужные зависимости соединение с БД, настройки нужные, гейтвей твой. Достаточно передать в роутере только его, а не целый список барахла. Уже в конструкторе контроллер сам берёт из контейнера нужные ему зависимости.

Но вообще гугл в этом деле очень помогает.
Ответы: >>1382746
Аноним 2019/04/17 09:42:33  №1382746 3
>>1382741
Настройка и связь с бд у меня в bootstrap.php лежит, там же создаётся и объект tablegateway. Вопрос в том,правильно ли я понял, что контроллеру можно просто объект этот передать, как передал валидатору (по совету опа), или это разные вещи. Больше никакого барахла не будет, проект же небольшой(список студентов).
Походу я немного запутался уже в этих абстракциях.
Ответы: >>1382756
Аноним 2019/04/17 10:10:12  №1382756 4
>>1382746
>контроллеру можно просто объект этот передать
Конечно можно. Только, бога ради, не в роутере - ему вообще не положено знать о таких вещах.
Ответы: >>1382791
Аноним 2019/04/17 11:24:22  №1382791 5
>>1382756
А как тогда? Роутер же создаёт контроллер нужный и запускает его метод начала работы.
Ответы: >>1382986 >>1382989
Аноним 2019/04/17 15:25:30  №1382986 6
>>1382791
>Роутер же создаёт контроллер нужный
Вообще не его обязанность, как по мне. Можно роутер сделать конструктором объекта Route, т.е. настоящего маршрута, который отрабатывает в данный момент.
В него, например, передавать имя контроллера, метода, параметры вызова(гет\пост и тд), ну уже потом в него и передавать зависимости, Хотя тут контейнер тоже удобнее будет.
Ну а потом $Route->run(), который собирает всё это дело воедино и посылает на рендер.
Уж лучше так, чем в роутер гейтвей сущности пихать.
Ответы: >>1383031
Аноним 2019/04/17 15:29:39  №1382989 7
>>1382791
А вообще, с таким подходом ты просто обречен убрать инициализацю gateway из bootstrap и запихнуть её в сам контроллер. Конструктор или прямо в методе.
Ответы: >>1383031
Аноним 2019/04/17 16:48:48  №1383031 8
>>1382989
>>1382986
Вообще почитал я про контейнеры у опа и это не так уж и сложно, как я думал, сделаю через него лучше и объект контейнера запихну в роутер.
Ответы: >>1383060
Аноним 2019/04/17 17:42:01  №1383060 9
>>1383031
>не так уж и сложно
Это ещё и удобно, уж поверь.