За последние 24 часа нас посетили 22544 программиста и 1014 роботов. Сейчас ищут 709 программистов ...

Подскажите, как это реализовано

Тема в разделе "PHP для новичков", создана пользователем AlexandrS, 27 фев 2019.

  1. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Как я понимаю в паттерне MVC, при URL: http://site.com/controller/action
    есть контроллер (controller) и экшн (action)
    Но есть сайты в которых структура такова, что есть только http://site.com/динамический_параметр/

    Т.е. есть некая морда сайта в корне, а все что после (показал как 'динамический параметр') там идут сами запросы, к примеру ID профилей пользователей, если в моем понимании MVC есть контроллеры и экшены, которые в коде как классы и методы, то тут (http://site.com/динамический_параметр/) как происходит обработка?

    Есть еще подобный вариант(http://site.com/controller/динамический_параметр/)

    Т.е. интересно логика реализации и является ли это тоже паттерном MVC?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    А причём тут урлы и MVC? MVC - это просто разделение кода на три части, в определении MVC нету даже OOP, у меня каждый слой может быть представлен функциями или даже частями одного файла, разграниченными пустыми строками :)

    Но традиционно да, в виде контроллеров и действий реализуется. Но паттерн уж тем более не включает в себя способ преоброзования урла в пару контроллер/действие :) Урл типа example.com/controller/action хорош тем, что легко преобразуется в пару в автоматическом режиме, что использовано, скажем, в Yii2. Напротив, в Laravel от этого отказались, и ты все роуты прописываешь сам, получая очень большую гибкость при этом. Хотя в Yii2 тоже можно прописать нестандартные роуты, и даже запретить стандартные. Вообще, я часто делаю так:
    PHP:
    1. Route::get("{slug}.html", "PageController@view");
    Т.е. выглядит как будто у меня статические странички, и заодно признак, чтоб отличать от других урлов - .html в конце
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Да, реальный адрес предварительно транслируется во внутренний/технический формат, но вам ничего не мешает напрямую закрепить за каждым роутом контроллер, экшин или что-то еще.
    --- Добавлено ---
    Простейший пример: https://php.ru/forum/threads/ustanovochnye-moduli-v-svoej-cms.75327/#post-593482 (только там экшин не упоминается, т.к. мы обычно используем REST с единым дефолтным обработчиком или с несколькими дефолтными обработчиками, закрепленными за HTTP-методами запросов, но можно добавить и отдельное поле для этого или указывать имя экшина через какой-то разделитель, как выше показали).
    --- Добавлено ---
    Еще один наглядный пример с короткими ссылками, использующий ту же модель данных.

    Также можно просто определить низкоприоритетный роут с общей маской, охватывающей, например, все однокомпонентные пути.
     
    #3 miketomlin, 27 фев 2019
    Последнее редактирование: 27 фев 2019