Задать вопрос
  • В чем суть роутера на php?

    onqu
    @onqu
    weasy
    1. Здесь пугают всякими контроллерами, ларавелями. Давайте жить проще. Для начала дадим определение модному слову роутер. Это маршрутизатор. Что делает маршрутизатор? Правильно. Обрабатывает маршруты, являясь связующим звеном. Маршрутом для web сайта принято считать метод запроса [GET, POST, PUT и другие] и компоненты URI.

    например: https://ru.wikipedia.org/wiki/URI?foo=bar#title
    [схема: https] :// [источник: ru.wikipedia.org] [путь: /wiki/URI] [запрос: ?foo=bar] [фрагмент: #title]


    Но для определения маршрута может браться любая другая информация передаваемая серверу, определение выше это лишь наиболее употребляемые параметры.

    Сама работа, как правило проста: от клиента приходит запрос, маршрутизатор перебирает все заданные ему пути до первого совпадения. При совпадении вызывается определенная вами функция, которая возвращает ответ клиенту.

    2. Он необходим, если в приложении одна точка входа, когда любой запрос приходит на один файл.

    3. Простой пример
    // файл index.php
    
    // Маршруты
    // [маршрут => функция которая будет вызвана]
    $routes = [
        // срабатывает при вызове корня или /index.php
        '/' => 'hello',
        // срабатывает при вызове /about или /index.php/about
        '/about' => 'about',
        // динамические страницы
        '/page' => 'page'
    ];
    
    // возвращает путь запроса
    // вырезает index.php из пути
    function getRequestPath() {
        $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    
        return '/' . ltrim(str_replace('index.php', '', $path), '/');
    }
    
    // наш роутер, в который передаются маршруты и запрашиваемый путь
    // возвращает функцию если маршшрут совпал с путем
    // иначе возвращает функцию notFound
    function getMethod(array $routes, $path) {
        // перебор всех маршрутов
        foreach ($routes as $route => $method) {
            // если маршрут сопадает с путем, возвращаем функцию
            if ($path === $route) {
                return $method;
            }
        }
    
        return 'notFound';
    }
    
    // функция для корня
    function hello() {
        return 'Hello, world!';
    }
    
    // функция для страницы "/about"
    function about() {
        return 'About us.';
    }
    
    // чуть более сложный пример
    // функция отобразит страницу только если
    // в запросе приходит id и этот id равен
    // 33 или 54
    // [/page?id=33]
    function page() {
    
        $pages = [
            33 => 'Сага о хомячках',
            54 => 'Мыши в тумане'
        ];
    
        if (isset($_GET['id']) && isset($pages[$_GET['id']])) {
            return $pages[$_GET['id']];
        }
    
        return notFound();
    }
    
    // метод, который отдает заголовок и содержание для маршрутов,
    // которые не существуют
    function notFound() {
        header("HTTP/1.0 404 Not Found");
    
        return 'Нет такой страницы';
    }
    
    
    // Роутер
    // получаем путь запроса
    $path = getRequestPath();
    // получаем функцию обработчик
    $method = getMethod($routes, $path);
    // отдаем данные клиенту
    echo $method();


    На практике используют более сложные маршрутизаторы, у которых гораздо большие возможности.

    4. Обойтись без него можно. Если каждая страница в вашем приложении будет являться отдельным файлом, который отвечает за отдачу информации.
    index.php
    about.php
    contact.php
    ...


    Это олдскульная структура, в новых проектах почти не применяется.
    Ответ написан
    13 комментариев
  • Katalon Recorder или Selenium IDE?

    Jacky1806
    @Jacky1806
    Katalon Recorder — мощный и гибкий инструмент. Инструмент удобен в использовании.
    Ответ написан
    1 комментарий
  • Как организовать скоросной обмен файлами между Windows и Linux?

    zenden2k
    @zenden2k
    PHP & C++ programmer
    Может это поможет?
    RealSync — односторонняя синхронизация исходников в реальном времени для веб-разработчиков
    habrahabr.ru/post/139348
    Ответ написан
    1 комментарий
  • Как загрузить только скомпилированные стили/скрипты с помощью phpstorm?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    создать примерно такую структуру
    /
      public_html/
        css/
      source/
        sass/


    В настройках ftp подключения указываем маппинг папки public_html на корень вашего удаленного сервера.
    Указываем следующие настройки 20150806-195839.png и радуемся. Теперь при любом изменении файлов в public_html они будут загружаться на удаленый ftp-сервер
    Ответ написан
    Комментировать
  • Как можно объединить все th в thead?

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    htmlbook.ru/html/td/colspan

    <table>
          <thead>
                      <tr>
                         <th colspan="4">Грузы по Украине</th>
                      </tr>
                     </thead>
                     <tfoot>
                      <tr>
                        <td>
                          
                        </td>
                      </tr>
                     </tfoot>
                     <tbody>
                      <tr>
                      </tr>
                      <tr>
                      </tr>
                     </tbody>
                  </table>
    Ответ написан
    Комментировать