Ответы пользователя по тегу Веб-разработка
  • Почему после отправки формы обратной связи на почту приходят иероглифы?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    mail("info@grillgrad.ru", "order", "Имя: $name. Телефон: $phone" ,"Content-Type: text/plain; charset=UTF-8");

    Вместо вот этого всего
    Ответ написан
  • Какие есть годные альтернативы OpenServer?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Непонятно для чего оно вообще может быть нужно.
    Для продакшена - очевидно нет.
    Для профессиональной разработки - докер контейнер с рабочим окружением.
    Для того чтобы делать примеры из видеокурсов, достаточно запустить php -S localhost:80
    Ответ написан
  • Как сделать автоматический деплой веб-сервиса на поддомен?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если нормально сформулировать вопрос, то речь идет о банальном деплое
    И автору бы сначала поучиться разворачивать свое единственное приложение, а потом уже начинать мечтать про междупланетный шахматный центр на тыщу инстансов.

    При том что задача в общем случае решается элементарно. Добавлением еще одной секции в плейбук того же Ansible. Что даст автору ту самую заветную "одну кнопку". А точнее две - развернуть новый инстанс и обновить все существующие.

    А если еще внимательнее посмотреть на проблему, то возникает закономерный вопрос - а зачем автору вообще миллион виртуальных хостов, если речь идет о банальных поддоменах? Которые прекрасно реализуются в рамках единственного виртуального хоста. То есть можно либо добавить поддержку субдомена в текущее приложение, либо, на худой конец, сделать multi-tenant приложение, где у каждого поддомена будет своя БД.
    При этом вся кнопка будет заключаться в добавлении имени субдомена в базу данных
    Ответ написан
    3 комментария
  • Как правильно организовать систему контроллеров в mvc паттерне?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    К сожалению, плохих статей в интернете куда больше чем хороших.
    Вот эта, например, вводит совершенно ненужную конструкцию, завязывая зачем-то внутреннюю структуру приложения на структуру НТТР запроса. Хотя разумеется они вообще никак не связаны.
    Вам надо просто уйти от этой дурацкой схемы имя/действие/операнд. В реальности так никто не делает.
    Если бы адресация любого приложения могла вписываться в эту схему, то отдельный роутинг был бы просто не нужен. Да, для некоторых контроллеров это годится. Для других - нет. И при этом внутренняя структура приложения может вообще ничего общего не иметь с порядком ключевых слов в НТТР запросе.

    В данном случае notebooks_and_computers/notebooks - это просто SEO мусор, который вообще не нужен для отображения товара. Для которого нужен только айди товара. Ну вот и запускается контроллер витрины с экшеном отображения карточки товара.
    Ответ написан
    2 комментария
  • Какую базу данных использовать для такого проекта?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну, на основной вопрос уже ответили, а я освещу отдельную проблему, которая очень часто волнует умы юных падаванов.

    когда лучше реляционную и нереляционную использовать?

    Ответ на этот вопрос очень простой.
    Нереляционная БД - это НЕ база данных.
    А узкоспециализированное хранилище, которое может выполнять какую-то одну определенную функцию лучше, чем база данных. Это может быть кэширующий демон, или поисковый движок, или решение для аналитики, или какое-то подсобное хранилище для всякого мусора.

    Как только осознаёшь этот простой факт, то всё сразу становится на место:
    Если нужна база данных, то и использовать надо базу данных. Реляционную. Какую именно - в вашем случае не принципиально.

    Если вдруг проект пройдет стадию "неясные идеи", и выльется во что-то практическое, и даже появится какая-то нагрузка, то можно будет начать думать про использование одного или нескольких подсобных хранилищ в дополнение к базе данных.
    Ответ написан
    2 комментария
  • Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Уфф, 5 раз прочитал, пока понял. Второе.

    Метод класса вписывается в класс который над которым осуществляют действие.
    Собственно, определение класса - это "данные и методы для работы с ними". С ними. А не с данными чужих объектов.

    Сущность Модератор в данном случае вообще не нужна, достаточно свойства в сущности Пользователь (кстати, откуда вы все берете этих "участников"? Участник бывает у события, а не у сущности. Вы же не говорите "участник 5А класса?")

    Связей здесь должно быть значительно меньше.
    Если модератор не упоминается ни в опросе, ни в добавленной книге, то и связи между ними никакой нет.
    В текущей схеме должна быть только одна связь: опроса с прошедшим его пользователем. Одним из свойств опроса будет экземпляр класса Пользователь. Причем это касается класса РезультатОпроса, которого нет на диаграмме. А он должен быть. И вот он будет связан с классом Опрос.

    Чего здесь не хватает - это интерфейса. Классов-контроллеров. Которые собственно эти методы и вызывают.
    Какой-нибудь BookController.add(), который принимает, скажем, два объекта, Пользователь и Инпут, и проверяет, является ли пользователь модератором. И если да, то создает объект Book, и используя данные из инпута, вызывает Book.add()
    И то же самое с опросами

    Еще по-хорошему должен быть BookRepository. Потому что если книга умеет сама себя добавлять в хранилище, то это считается плохим тоном. Должен быть отдельный объект Хранилище Книг, в котором и будут методы добавления и поиска.
    Ответ написан
    6 комментариев
  • Как сделать вывод постов по страницам?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Начать надо с того, чтобы набрать в адресной строке своего браузера "PHP вывод по страницам"
    Ответ написан
  • Возможно ли сделать общий футер на всех страницах?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. У страницы делаем расширение .php вместо .html
    2. Внизу пишем <?php include 'footer.php'; ?>

    Всех дел на 30 секунд.
    Ответ написан
    Комментировать
  • Как синхронизировать данные о подписки между своей базой и apple?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Непонятно, зачем вам apple_id и что вы собрались к нему привязывать.
    Если вы когда-нибудь совершали покупки в интернет-магазине, то может быть заметили, что там есть такая штука, как номер заказа.
    Перед тем как отправить клиента платить, вы сообщаете банку номер заказа, а он сообщает вам номер транзакции.
    По которому вы потом смотрите ее статус.

    Вот у цветочков с пчелками все точно также (с)
    Ответ написан
  • Как удалять файлы с сервера по условию, что они не используются в текущий момент?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В таких условиях надо делать вытесняющий кэш.
    Если при запросе нового файла выясняется, что для него нет места, то удаляется самый старый файл.

    Хотя конечно непонятно, как это всё поможет в ситуации, когда заходят посмотреть сразу 20 разных событий.
    Ответ написан
    1 комментарий
  • Как сохранить личные данные на публичном сайте?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Просто добавить авторизацию, пусть даже базовую.
    Ответ написан
    1 комментарий
  • Как написать бота отслеживающего скидки на маркетплейсах?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну что вы как дети?
    Каждый раз этот вечнозелёный вопрос обрастает гроздьями любопытных.
    Спарсить весь интернет мы хочем, а научиться пользоваться одним поисковым сервисом - не можем.
    Ответ написан
    Комментировать
  • Как JavaScript получит доступ к файлам вне папки `public`?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых