За последние 24 часа нас посетили 33000 программистов и 1756 роботов. Сейчас ищут 804 программиста ...

Обработка ЧПУ

Тема в разделе "PHP для новичков", создана пользователем freelsd, 9 ноя 2018.

  1. freelsd

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

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    Сделал себе подобие MVC на сайте


    Код (Text):
    1. RewriteEngine on
    2. RewriteCond %{REQUEST_FILENAME} !-f
    3. RewriteCond %{REQUEST_FILENAME} !-d
    4. RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
    То есть по запросу /users/ я буду подключать users.php, но я не совсем понимаю как работать с параметрами вида:
    /users/page/1/action/test/

    Как принято такие параметры добавлять и извлекать чтобы все нормально работало? Не хочу изобретать новый велосипед
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    парси регулярками или explode по / и проверяй какую страницу отправить
     
  3. freelsd

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

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    А регекспом разве можно такое проверить? Вот я допустим через explode нашел страницу (первый элемент массива), а как мне в целевой страницы все нужные переменные выделить? Просто по массиву который вернул explode пробежать и n элемент это параметр а n+1 его значение? Так что ли? :)
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    В чем прикол ?
     
  5. freelsd

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

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    Какой прикол? Я просто хочу сделать ЧПУ на сайте, вот и есть прикол. Только не уверен как правильно такое реализовать.
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
  7. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  8. freelsd

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

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    Ну это примерно то же что и я сказал. Если ссылка будет вида /users/page/2, то первый элемент это подключаемая страница, мы его достаем. Остается page и его значение 2. То есть n (параметр) и n+1 его значение.
    --- Добавлено ---
    О, спасибо. Похоже на то что нужно.
    --- Добавлено ---
    Только теперь не совсем понятно как сделать. Вот например у меня /users/ должен показывать страницу со списком пользователей. А /users/add/ страницу с формой добавление пользователя. /users/page/5 соответствующую страницу. Как правильно псевдороутер должен выглядеть в таком случае?
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    В адресной ветке может быть куча страниц. Лучше говорить «указание на класс», «указание на модуль» и т.п. Причем этот слаг не должен быть непосредственно именем класса, модуля и т.п.

    Больше похоже на какой-то внутренний технический формат, чем на ЧПУ.

    Как хотите, так и делайте. Но лучше начать с простого. Раз уж пошли по пути прямого парсинга исходного адреса (без его преобразования в промежуточный технический формат), посмотрите этот пример – выделяются всего две части (правда, путь все равно может быть многокомпонентный, а кроме того еще дополнительно используется один GET-параметр), используются только дефолтные экшины (если нужно увеличить кол-во экшинов, в первую очередь для этого используются доп. протокольные методы, алиасы, например /adduser, и т.п.) – это т.н. REST-подход, при кот. в адресах обычно появляются только сущности, но не действия.
     
    #9 miketomlin, 9 ноя 2018
    Последнее редактирование: 9 ноя 2018
  10. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    @freelsd, если уже рассматриваешь библиотеки, то не изобретай велосипед, возьми готовый роутер.
    http://route.thephpleague.com/, например.

    Если хочется велосипед, но который работает как крутой роутер, то изучи сначала существующие
     
  11. freelsd

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

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    Понятно. Лучше просто свой mvc простенький сделать для такого случая