• Как реализовать роутинг PHP MVC?

    NikkyNick1
    @NikkyNick1
    Почитайте про паттерн Front Controller (Единая точка входа)

    https://www.sitepoint.com/front-controller-pattern-1/
    Ответ написан
    Комментировать
  • Как реализовать роутинг PHP MVC?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Роутинг это (в общем случае) сопоставление пути с контроллером/экшном, как это реализовать зависит от конкретной ситуации, или берется что-то готовое(благо их много). Как самый простой вариант - массив вида "/some/path"=>['controller','action']; В более сложном случае разбивают на компоненты по слэшам и используют правила на основе регулярок, где все не указывающие на контроллер / экшн элементы считаются дополнительными параметрами и обрабатываются логикой экшна.
    Ответ написан
    Комментировать
  • Как реализовать роутинг PHP MVC?

    @novrm
    В любом большом веб-приложении есть потребность в иерархии...
    Пример - интернет магазин - две основные МОДЕЛИ (Model) - Category и Product:

    Бытовая техника (Category)
    |---------- Холодильники (Category)
    __________|__________ Samsung2019 (Product)
    |__________ Телевизоры (Category)
    ____________|__________ Sony2019 (Product)

    Как вывести в броузер (придумать единственный URL) переменные ВИДА (View) о Sony2019.
    ... существует миллион и один способ это сделать - все зависит от фантазии веб-программиста и желания заказчика.

    Например так:
    market.com/sony2019
    market.com/sony2019/
    market.com/sony2019.html
    market.com/p201569-sony2019.html

    Эти варианты - попроще, легко реализуются и веб-программист будет настаивать на таком положении вещей...
    Однако заказчик желает иметь УРЛы SEO-правильные, как ему нашептал Лебедев...
    ... и веб-программист получает головняк:
    market.com/Бытовая техника/Телевизоры/sony2019
    market.com/Бытовая техника/Телевизоры/sony2019.html

    Как это работает...
    Все УРЛы съедаются КОНТРОЛЛЕРОМ (Controller) в простейшем случае...
    Однако в фреймворках перед КОНТРОЛЛЕРОМ может быть РОУТЕР - куда УРЛы попадают еще раньше...
    URL -> ROUTER -> CONTROLLER -> MODEL -> VIEW

    Вот в этой цепочке "перетравливается" УРЛ... Как из SEO-URL иерархической цепочки получить искомые ВИДИ - существует миллион и один способ...

    Например так...
    Задаете для ROUTER
    - если URL заканчивается на слеш "/" - то перенаправляй на контроллер CategoryController - ибо получили КАТЕГОРИЮ... Например "market.com/Бытовая техника/Телевизоры/"
    - если URL НЕ заканчивается на слеш "/" - то перенаправляй на контроллер ProductController - ибо получили ПРОДУКТ... Например "market.com/Бытовая техника/Телевизоры/sony2019"

    Дальше в CategoryController берем часть URL, например "Бытовая техника/Телевизоры" и придумываем алгоритм - извлечь МОДЕЛЬ "Телевизоры", которая является ребенком для МОДЕЛИ "Бытовая техника"... Извлекаем МОДЕЛЬ из БД - передаем ее переменные в ВИД или помощники вида...

    Аналогично для МОДЕЛИ "sony2019" Берем часть URL, например "Бытовая техника/Телевизоры/sony2019" и придумываем алгоритм - извлечь МОДЕЛЬ "sony2019", которая является ребенком МОДЕЛИ "Телевизоры", которая является ребенком для МОДЕЛИ "Бытовая техника"... Извлекаем МОДЕЛЬ из БД - передаем ее переменные в ВИД или помощники вида...
    Ответ написан
    Комментировать