Ответы пользователя по тегу PHP
  • Что есть что в ссылке при MVC патерне?

    php666
    @php666
    PHP-макака
    Роутинг никак не связан с MVC.
    По запросу site.ru/page=content&integration=1c&user=tariff
    может работать построенное по MVC приложение

    для понимания MVC тыц
    Ответ написан
    2 комментария
  • Можно ли приравнивать работу с Битрикс к работе с фреймворком?

    php666
    @php666
    PHP-макака
    Битрикс это говно, я код лучше писал лет 10 назад, когда только пхп освоил, это просто мерзость. Вообще не упоминай нигде что ты с Битриксом работал, пиши лучше "работал с самописными системами", если хочешь хоть какой-то воды влить в свое резюме. Битрикс - это как приговор для разработчика.
    Ответ написан
    Комментировать
  • Как организовать структуру самописного PHP проекта?

    php666
    @php666
    PHP-макака
    никаких папок lib
    откройте любой фреймворк - там все построено на пространстве имен.

    касательно МВС всё уже сказали, но крайне советую не класть все подряд в папки Model/Controller/View, а создать МОДУЛЬНОСТЬ, когда каждый модуль в своей директории (в своем пространстве имен).
    Посмотри как у меня во фреймворке сделано. А вот по этой ссылке скелетон. Обрати внимание на директорию Module как во фрейме, так и в скелетоне. Там лежат модули, которые как кирпичики теоретически можно переносить из одного проекта в другой.
    Ответ написан
    Комментировать
  • Как связать DropDownList?

    php666
    @php666
    PHP-макака
    при загрузке страницы получать только страны
    при выборе страны аяксом подтягивать города
    Ответ написан
    Комментировать
  • Ошибка php не работает сингелтон, как исправить?

    php666
    @php666
    PHP-макака
    класс для БД не должен быть одиночкой
    Ответ написан
    Комментировать
  • Как делать редирект при обнове?

    Комментировать
  • Локальный сервер - GIT - удаленный сервер - Платежные системы. Как подружить?

    php666
    @php666
    PHP-макака
    ЯК привязывается к домену, т.е. все операции с ЯК можно делать только на боевом сайте.
    многие платежные системы, если не все, дают тестовые механизмы для внедрения их решений в ваши проекты.

    Дальше ничего не понял. В чем проблема?
    Ответ написан
    Комментировать
  • В URL при роутинге не получается передать массив, что делать?

    php666
    @php666
    PHP-макака
    красивые урлы имеет смысл делать только для статических ресурсов (SEO, приятный внешний вид)
    для поисков, как и раньше, используется Query string

    MVC не обязывает делать красивые URL, МVС вообще никак не относится к теме роутинга и вида входящих параметров. можно придумать любую нотацию URL-адреса, приложение, построенное по принципу MVC, не станет от этого "не MVC".

    нет ни одного здравого аргумента "маскировать" query string и изобретать велосипед поверх HTTP-протокола
    Ответ написан
    2 комментария
  • Как сделать страничку с сохраненными данными php, ООП?

    php666
    @php666
    PHP-макака
    сейчас обучаюсь на курсах по Web-програмированию и сейчас вообще не понимаю как работать с ООП
    к ООП ты придешь сам, но спустя некоторое время практики (год-два). Когда тебе не потребуются курсы, что бы писать на языке. Сейчас что-либо тебе объяснять бесполезно. И не нужно. Научись писать сначала код без самописных классов.

    И как можно сделать страничку с сохранеными данными через ооп?
    Это тема если и не целой книги, то большого раздела в книге.
    Ответ написан
    6 комментариев
  • Универсальный метод обновления данных в БД?

    php666
    @php666
    PHP-макака
    гугли ORM, ActiveRecord
    Ответ написан
    Комментировать
  • Как правильно получить составные данные из базы и сложить их в одну сущность?

    php666
    @php666
    PHP-макака
    PostsView, который отвечает за вывод поста в виде HTML
    никакого PostsView быть не должно - достаточного одного View - это, по сути, шаблонизатор, с буферизацией вывода. Что, по твоему, должен делать PostsView?

    Что почитать по этой теме
    "Архитектуру корпоративных приложений" Фаулера. Главу "источники данных".

    Ведь мы не можем просто взять и в PostsModel выполнить JOIN необходимых полей из таблицы Users?
    Я в своем самописном фреймворке так и сделал. Есть метод для JOIN в моей ORM, он возвращает многомерный массив объектов, где каждый конечный элемент (на твоем примере) будет объект модели Поста и Пользователя. Почему так? Потому, что сделать так:

    <html>
      Текст поста: <?=$post->getText()?><br>
      Автор поста:  <?=$post->getAuthor()->getName()?> <!-- это самое сложное -->
    </html>


    - сделать своими силами - очень, очень нетривиальная задача.
    Ответ написан
    Комментировать
  • Как создать приложение - задачник (mvc приложение на чистом php)?

    php666
    @php666
    PHP-макака
    В приложении нужно с помощью чистого PHP реализовать модель MVC
    Глупая тестовая задача. Я писал с чистого листа свой собственный MVC-фреймворк на PHP и я откровенно скажу, что до того момента, пока код не стал более-менее идеальным MVC, ушло, мягко сказать, очень много времени.

    Новичок не потянет такую задачу - это будет абсолютно неправильное наколенчатое решение. MVC - это не просто разделение по файликам кода. Это концепция потянет за собой необходимость в доменных объектах, те в свою очередь нуждаются в CRUD, т.е. в ORM, там надо копать AR или DataMapper. Новичок не сможет грамотно отделить представление от логики контроллера или логики модели, для пагинации нужен сервис, для сортировки нужен сервис, для вывода объектов нужна коллекция (опять же, ORM).

    Кто дал эту задачу?
    Ответ написан
    9 комментариев
  • Как автоматизировать изменение версии css?

    php666
    @php666
    PHP-макака
    last modified
    css отдавать через php по виртуальным путям
    у меня вот так сделано
    общий алгоритм такой:
    берем необходимый файл, смотрим время его модификации по filemtime, преобразуем в $date
    далее проверка:
    public static function IfModifiedSince(\DateTime $date): bool
        {
            if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
                $if_modified_since = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
    
                if ($if_modified_since && $if_modified_since >= $date->getTimestamp()) {
                    return false;
                }
            }
    
            return true;
        }

    клиентский код:
    $resource - объект Css, Js или картинки. Вот базовый класс.
    if (!Request::IfModifiedSince($resource->getModificationTime())) {
                    // отдаем 304 заголовок
                    return $this->getResponse()->setHttpStatusCode(304);
                }
    
                $this->getResponse()
                    ->setHeader(Response::HEADER_CONTENT_TYPE, 'text/css; charset=utf-8')
                    ->setHeader('Last-Modified', $resource->getModificationTime()->formatHttpDate())
                    ->setHeader('Cache-Control', 'no-cache, must-revalidate');
                    // выводим файл
    Ответ написан
    Комментировать
  • Как выполнит одним запросом несколько действий MYSQL?

    php666
    @php666
    PHP-макака
    поставить индекс на timer на vk_id
    поставить индекс на score на vk_id
    больше ничего не трогать
    никакой нагрузки тут нет
    Ответ написан
    5 комментариев
  • Как правильно организовать ЧПУ для дерева категории в PHP?

    php666
    @php666
    PHP-макака
    Первое. Твой роут (надеюсь, знаешь что это такое и используешь), должен быть вида
    '~^/categories(/[a-z0-9_/\-]+/)$~i'
    улавливая то, что в скобках мы получаем это
    /<category_slug>/<subcategory_slug>/

    при добавлении новых категорий ты должен записывать в таблицу категорий путь от вершины дерева до новой конечной категории.

    зная полный путь к категории ты можешь получить её ID

    далее исходя из архитектуры
    Ответ написан
    Комментировать
  • Набросал структуру классов учебного сайта доски объявлений, как еще лучше распределить функционал?

    php666
    @php666
    PHP-макака
    Я проектировал доску с нуля на ООП.
    Я бы написал расширенный ответ, но лень.
    Надо просто читать Фаулера, я говорил тебе 100 раз. Ты этого не делаешь, поэтому ты пишешь какую-то вроде отчасти и правильную вещь, но если разложить по полочкам - сам не понимаешь. что хочешь добиться в архитектуре. В итоге сам не понимаешь, куда движешься. У тебя НЕТ архитектуры и понимания, как сделать правильно, поэтому мечешься. А архитектура - это когда шаг влево, шаг вправо - расстрел. Это когда ты делаешь всё по оговоренным правилам и не задаешься вопросами, а как правильно.

    class Advert {
      // Объявление детально
      public function displayAdvert(){
        // Показать объявление детально
      }
    }


    какая-то дичь. Ты должен оперировать в первую очередь контроллером, моделью, представлением. Модель - это классы сущностей и сервисы. Во многих популярных фреймворках модель - это сущность+ActiveRecord. Можно использовать паттерн модель + DataMapper. Не суть.

    Вот что такое Advert? Это объявление. Это модель. У нее нет никакого метода displayAdvert. Этот метод может быть у контроллера объявлений, который выводит ОДНО объявление на странице.
    Что, по твоей логике, должен делать этот метод? Чем он отличается от метода ХРАНИЛИЩЕ::findById()?

    public function displayMyAdverts(){
    Это должно быть в AdvertCollection::findByUser()
    Ответ написан
    Комментировать
  • Как передать ошибку пользователю из класса?

    php666
    @php666
    PHP-макака
    при использовании механизма исключений никаких return не должно быть
    отучайтесь мыслить функциями и их возможностями
    Ответ написан
    3 комментария
  • Готов ли я как PHP Junior?

    php666
    @php666
    PHP-макака
    код свой покажи

    Знаю ООП
    это ты так думаешь)
    Ответ написан
    3 комментария
  • Зачем нужны абстрактные классы и интерфейсы в php?

    php666
    @php666
    PHP-макака
    так яснее?

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


    Если ты был бы создателем, тебе потребовалась именно эта структура для создания гуманоидо-образного существа (две руки, две ноги, голова, прямоходящий, два глаза - это ИНТЕРФЕЙС - декларация, что все классы будут имплементировать это соглашение).

    Человек не может наследоваться от инопланетянина, как и наоборот - это РАЗНЫЕ формы жизни. Одна построена на углеродной форме (человек), другая, скажем, на базе метаногенов. Но общее их - интерфейс ГУМАНОИД, созданный "по образу и подобию" (с).

    Для этих двух разных типов мы создаем базовые АБСТРАКТНЫЕ классы (ибо ни человек, ни инопланетянин, с нашей точки зрения, как создателя, не может быть неопределенного пола). В абстрактных классах мы реализуем методы, которые задекларированы в нашем интерфейсе. Мы наполняем абстрактные классы свойствами и всеми методами, присущими обоим полам наших творений, ведь между мужчиной и женщиной очень много общего в строении.

    Конкретные классы уже являются конечными полами двух разных типов форм жизни.

    24301509.jpg
    Ответ написан
    2 комментария