«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/03/02 00:01:43  №1357536 1
Правильно ли идеалогически подключать несколько View в один шаблон?
Ответы: >>1357547 >>1357584 >>1359951
Аноним 2019/03/02 04:47:24  №1357584 2
>>1357536
Это что бы изменение 1 вьюшки были отображены в другой?например я обычно общие куски делаю в partial и их уже где надо подключаю. Какой результвт ты хотел бы получить?
Ответы: >>1357918
Аноним 2019/03/02 18:04:31  №1357918 3
>>1357584
Я просто еще с фреймворками не работал, так что хз, как оно там везде работает. Есть вот шаблон, куда я подключаю вид, считай, вызываю функцию getView(), которая подключает текущий вид. Например, это список товаров. А еще у меня в каждом виде меняется, к примеру, шапка. Там title разный на каждой вьюхе. И как мне его там менять? Инклюдить всю шапку как виджет в каждый вид, туда передавать параметры для title и потом выводить все вместе или еще как-то можно?
Ответы: >>1357938 >>1359951
Аноним 2019/03/02 18:38:13  №1357938 4
>>1357918
Напрмиер, в шаблоне также как подключаешь вью с товарами, также подключашь нужную шапку. Виджет норм идея, если сможешь сделать его более-менее универсальным (тоесть можно будет использовать больше чем в одном проекте). А если придется допиливать под каждый конкретный проект то лучше всетаки как отдельное вью или типа того оформить.
Ответы: >>1357975
Аноним 2019/03/02 19:28:34  №1357975 5
Аноним 2019/03/06 02:35:11  №1359951 6
>>1357898

Если они совсем однотипные то можно, но проще наверно через new.

>>1357918

Обычно делают отдельно шаблон для "лейаута" (шапка/подвал) и "контента". Лейаутов может быть несколько - например, один для морды, другой для админки. Как передавать параметры для лейаута? Тут есть варианты:

- руками копипастить их в каждый метод каждого контроллера (боль)
- наследовать контроллеры от базового класса и в нем формировать данные. У базового класса может быть метод вроде "поменять тайтл текущей страницы". Плюс - инкапсуляция, трудно передать что-то неправильное, например, не-строку.
- передать эти данные во вью до или после выполнения контроллера, без использования наследования. Или передать в контроллер.
- сделать "контроллер для лейаута" и в нем формировать данные для лейаута. У "контроллера лейаута" могут быть вспомогательные методы вроде "поменять тайтл текущей страницы".

В фреймворках готового решения нет. Каждый изобретает сам.

>>1357536

Не очень понятно, как это. Вызывать из одного шаблона другие шаблоны можно.

>>1357016

В сессию токен писать нет смысла. Данные сессии хранятся на сервере и недоступны пользователю, потому можно просто писать туда userId = 123. Это безопасно.

Токен нужен, если используется не сессия, а куки. Тогда писать userId = 123 нельзя, так как пользователь может их подделать. Также, некоторые шифруют и/или подписывают куки для защиты от чтения и/или модификации их пользователем. Плюс: сессии не требуется хранить.
Ответы: >>1360508
Аноним 2019/03/07 00:13:51  №1360508 7
>>1359945
>Реестр - это паттерн, который описыв
Спасибо, исчерпывающий ответ. Написал бы ты всеобъемлющую книгу по всем этим аспектам. Они ведь не устаревают. Будет пользоваться популярностью.

>>1359946
>У меня просто времени иногда нет, последние пару недель адски загружен.

А можно узнать, чем ты занимаешься? В студии трудишься или в каком-нибудь банке софт ваяешь?

>Ни в коем случае. Идея DI контейнера - IoC - предполагает
Хорошо, проблему синглтона контейнер решает.
А вот еще вопрос. Создал я класс подключения к мускулу, сделал для него сервис-провайдер, где он создается, а потом внедряю его, куда нужно.

А вот, скажем, мне нужен не один объект, а нужно итеративно и с условиями получить много, тогда что? Нужно будет в контейнере хранить не объект, а класс, а потом внедрять этот класс и там создавать через new?

>Я думаю, сервис провайдеры и сервисы хранятся в отдельных папках.

Спасибо, теперь все понятно.

>>1359948
Если у тебя используется дата маппер, то в нем и будет метод для загрузки моделек из БД.

То есть вообще всем управляет маппер, а сущности это такие пассивные ячейки памяти, к которым маппер обращается, и сущность сама по себе ничего делать не должна? И в контроллере правильно будет вызывать именно методы маппера?

>>1359949
> В задаче про студентов сортировку логично сделать аргументом в методе для получения студентов:

Спасибо за разъяснение особенно за последний абзац и за метод, ты сэкономил мне кучу времени.

>То есть перед выполнением нужных действий проверяем наличие логина. При отсутствии - редирект на форму логина с передачей текущего URL

А можно такую проверку делать в конструкторах? Например, в общий абстрактный контроллер засунуть. А то не делать же ее в каждом методе (боль, лол). И если юзверь не залогинен, то просто будет редирект на контроллер залогинивания, который этот конструктор не наследует.

>В твоем варианте пользователь может попробовать обойти авторизацию, вызвав напрямую метод "методПослеПосещения".

Но у него не получится, если я объявлю этот метод закрытым. Можно вообще все методы сделать закрытыми и вызывать их через indexAction, в котором сформировать настройки и всякие проверки. Сигнатуру формировать по маршруту. Получится эдакий фронт контроллер, только не физический файл, а метод. Но это что-то идиотское, да? Лол.

>Не думал, что у файлообменника такая сила. Сейчас, вроде начинающие разработчики делают сокращатели ссылок, но это уже неприлично просто.

А это разве не проще, чем файлообменник? Там ведь просто идет редирект на реальный URI при обращении к твоей ссылке. За вечер-другой можно сделать.

>>1359951
>Обычно делают отдельно шаблон для "лейаута" (шапка/подвал) и "контента". Лейаутов может быть несколько - например, один для морды, другой для админки. Как передавать параметры для лейаута? Тут есть варианты:


Я придумал вот что. Я в контроллере общем создал контейнер обычный массив data, куда записываю данные со всех уголков контроллеров и приходящие данные из моделей. В контроллерах-родителях задаю общие данные, в контроллерах специфичные, в методах контроллеров данные еще специфичнее. Данные записываются не через переопределение свойств, а через методы суперкласса.
Потом этот контейнер передаю в вид и обращаюсь к нему из шаблонов типа $data['title'], foreach($data['posts'] as $key => $post) {}, ну и все в таком духе. То есть "лейаут" и "контент" получаются данные из одного глобального массива data, переданного в вид. Так нормально?

>Не очень понятно, как это. Вызывать из одного шаблона другие шаблоны можно.

Ну я имел ввиду, можно ли несколько "контентов" подключать в "лейаут".

Спасибо за ответы, ты будто чистое знание вливаешь мне прямо в мозг. Я, бывает, что-то очень долго ищу, бывает, несколько дней занимает поиск ответа на какой-то вопрос, иногда бывает сам додумываюсь до ответа, но проблема в том, что я не знаю, правильный он или нет. Но вот так очень круто зайти сюда и прочитать ответы на все, что я задавал. Пасиба.
Ответы: >>1360509 >>1361818
Аноним 2019/03/07 00:15:56  №1360509 8
>>1360508
>а нужно итеративно и с условиями получить много, тогда что? Нужно будет в контейнере хранить не объект, а класс, а потом внедрять этот класс и там создавать через new?
Хранить в контейнере factory, через нее создавать объекты.
Ответы: >>1360515
Аноним 2019/03/07 00:35:41  №1360515 9
>>1360509
Еще до фабрик не дошел, сейчас самое время, спасибо, анонче.
Аноним 2019/03/10 06:19:53  №1361818 10
>>1360508

> А можно узнать, чем ты занимаешься?

Просто обычная удаленная работа.

> А вот, скажем, мне нужен не один объект, а нужно итеративно и с условиями получить много, тогда что? Нужно будет в контейнере хранить не объект, а класс, а потом внедрять этот класс и там создавать через new?

Можно хранить фабрику (класс, создающий нужные объекты), можно в контейнере сделать метод, который позволяет создавать объекты с параметрами. Но вообще, надо подумать, а нужны ли в таких объектах зависимости? Обычно, если это объект типа "Пользователь", у них нет зависимостей и их можно просто создавать через new. То есть такие "сущности" обычно в контейнер не кладут.

> То есть вообще всем управляет маппер, а сущности это такие пассивные ячейки памяти, к которым маппер обращается, и сущность сама по себе ничего делать не должна? И в контроллере правильно будет вызывать именно методы маппера?

Если ты читал мой урок https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md то знаешь, что есть ACtiveRecord, где сущности умеют сами себя сохранять в БД и Data Mapper, где они не умеют.

Второй подход имеет тот плюс, что ты в принципе можешь где-то (например, для теста) создавать сущности, не имея базы данных и использовать их. То есть код работы с БД отделен от кода сущностей и от кода, который использует эти сущности. Ты можешь в теории создать просто массив этих сущностей и весь остальной код даже не заметит, что у тебя не подключена БД (только в теории, на практике часто это не работает, так как код все равно пытается что-то искать и загружать из БД).

> А можно такую проверку делать в конструкторах?

Плохая идея, из конструктора нельзя возвращать значения, да и он не для этого. Но ты можешь сделать метод вроде beforeRequest() и обязательно его вызывать из фронт-контроллера.

> Я придумал вот что. Я в контроллере общем создал контейнер обычный массив data, куда записываю данные со всех уголков контроллеров и приходящие данные из моделей. В контроллерах-родителях задаю общие данные, в контроллерах специфичные, в методах контроллеров данные еще специфичнее. Данные записываются не через переопределение свойств, а через методы суперкласса.

Это плохо для чтения кода, так как чтобы понять, что передается в шаблон, надо изучать все эти места кода. Удобнее, когда передаваемые данные формируются в одном месте одним массивом.