@Nobler

PHP-MVC: Как осуществить взаимодействие JS и БД?

Насколько я понял, в паттерне MVC, JS-код на странице относится ко View. Тогда допустим, что по клику на определенный элемент на странице, срабатывает JS-обработчик, который должен в AJAX получить значение из БД. Безусловно, это недопустимо в MVC. Как это реализовать?

Пожалуйста, по существу.
  • Вопрос задан
  • 371 просмотр
Пригласить эксперта
Ответы на вопрос 3
OnYourLips
@OnYourLips
В простых приложениях - да (когда JS не содержит сложной логики, а нужен для "помощи" в HTML)
В сложных клиент и сервер - это два разных приложения. Оба MVC (или MVVM).
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Для начала, MVC чисто UI-ая архитектура. Об этом как-то скучно, но если интересно почитайте про action-domain-responder

мы рассматриваем архитектуру клиент серверного приложения. У нас есть клиент (то что отдается браузеру + сам браузер) и сервер (то что обрабатывает запросы). С этой точки зрения как не посмотри у нас и там и там - два приложения. Разница может быть только в том, насколько они связаны.

Классический случай клиент-серверной архитектуры - single page application. С точки зрения WEB же частенько у нас клиента как такового почти и нет, почти всю роль клиента забирает браузер а на JS написаны разного рода украшательства и свистоперделки. Короче клиент и сервер сильно перемешаны (то есть сервер слишком много знает о клиенте).

На клиенте MVC позволяет из view работать с моделью через контроллер, который является эдаким промежуточным слоем, который разделяет view и model между собой. На сервере же, такой подход не жизнеспособен в большинстве случаев. Там поток данных идет строго вниз, запрос -> контроллер -> получение данных в контроллере (из сервисов или еще как) -> формирование представления данных (шаблонизация, сериализация, что угодно) -> отправка ответа. То есть из view возвращаться обратно в контроллер уже не хорошо, у него уже должно быть все что ему нужно, а всякие хелперы и утилиты - часть presentation layer. Иногда это неудобно и спасает HMVC, когда из view layer мы можем инициализировать запрос на другой контроллер, и тогда мы как бы не нарушаем цепочку и вроде как удобно.

Теперь к сути проблемы, а именно AJAX запрос. Запрос производится клиентом (как бы он небыл связан с сервером), то есть это никакого отношения к архитектуре сервера не имеет. То есть инициализируется все та же цепочка действий, формирование требуемого представления данных и отправка их на клиент. По сути как только мы отдали респонс с сервера, будь там что угодно, все что происходит с ним после, на клиенте, нас уже не сильно волнует.
Ответ написан
Комментировать
wkololo_4ever
@wkololo_4ever
JS обращается по url. PHP мапит запрос на какой-либо контроллер и он уже (в вашем представлении) обращается к БД. По сути, контроллер должен обращаться хотя бы к репозиторию, а не напрямую к БД.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы