flapflapjack
@flapflapjack
на треть я прав

Как структурировать классы в PHP по идеологии MVC?

Я не профи, совсем не профи.

Решил вспомнить свое старое хобби - программирование. Правда я тогда процедурами все да функциями писал в далекие времена. Даже самописный свой сайт смог интегрировать с 1С не используя сторонние библиотеки. Тупо изучал протокол обмена.

А теперь - Никак не могу определиться в выборе решения у поставленной перед собой задачи.

В чем заключается моя загвоздка при написании движка по новым канонам ООП:
1) База данных - создать класс БД с подключением и передавать его в качестве параметра в каждый создаваемый класс, или сделать единый класс "Core" который читает конфиг, обращается к БД, и т.д. , а все остальные классы будут его EXTENDS? Или класс глобальным объявить? Типа $db= new DB(); global $db; //- так что ли?

2) авторизация:
Читал всякие скрипты по авторизации, но так толком и не понял - если юзер хочет запомниться на сайте, и входить автоматически - что в куках-то хранить? Хеш пароля из БД? по-моему это неправильно. Может сделать куку такую? : md5($user_id.$user_pass_hash) а потом делать выборку с БД: select from users where md5(users.user_id+users.user_pass_hash)==Кука? Но тогда ведь любой кто скопирует себе такую куку на комп сможет зайти от юзера. Или это нормально?

3)View'ы - как туда данные то передавать? тупо совать в ассоциативный массив $data все данные, передавать этот параметр при вызове класса view и там рендерить страницу? Я в данный момент так и делаю -передаю массив.

Простите если вопросы очень глупые, но я очень уж отстал от программирования (до сих пор mysql_query делаю, и не использую mysqli. Читал, что mysqli может как класс работать, но пока не понял каким макаром мне это пригодится.

Буду безмерно благодарен за помощь.
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
@McBernar
1. Создавайте в каждой модельке в конструкторе экземпляр $Db.

2. В куке можно хранить токен + uid. Пароли ни в каком виде не хранятся. И забудьте про MD5. С текущими вычислительными мощностями сейчас это совершенно неустойчивый алгоритм. В php уже давно появилась встроенная функция для шифрования. Если не ошибаюсь — по-умолчанию она выбирает наиболее хороший алгоритм на данный момент, но можно параметрами указывать и другие.

3. Да, вполне. Передаете в функцию рендера шаблона массив с данными.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@santaatnas
Java, Python, Php
Если страница будет не одна, вам понадобится:
1) Front Controller как единая точка входа, плюс Router c правилами маршрутизации
2) Класс для соединения с бд, его обычно делают Singleton'ом, чтобы не плодить экземпляры классов соединения.
3) Где-то надо будет хранить запросы к бд, чтобы инкапсулировать работу с базой, обычно это Repository
4) Плюс всякие валидации форм, отправки почты, безопасность (тот же csrf, плюс защита от css)...

В общем выходит, что вам придется написать фреймворк... а они уже есть готовые. И в зависимости от вашего кода они уже протестированы и продуманы, и туда вложены тысячи человеко-часов. Так что мой вам совет, возьмите какой-нибудь фреймворк с порогом входа по-проще, Yii2 например очень прост и дружелюбен к разработчиками... Либо Django на Python, тоже не сильно мудреный..
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
Почитайте symfony the book
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы