• В чем суть роутера на php?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Роутер отвечает за доставку данных к контроллеру/сервису.
    Если нет пути - роутер обычно выдаёт 404 ошибку.
    URI роутером делится на: протокол, домен, сервис и переменные сервиса
    например:
    domain.com/catalog/145 - сервис catalog отображает ветку с ID 145
    роутер - перенаправляет лишь запрос по части URI: /catalog
    сервис catalog - сам берёт нужные ему переменные из запроса.

    Еще примеры:
    domain.com/catalog/145/add - сервис catalog отображает диалог добавления новой категории в существующую категорию с ID 145.
    domain.com/catalog/145/sort/price/09/col/1/2/title - сервис catalog отображает категорию с ID 145 с сортировкой по цене от наименьшей к большей и выводом колонок с ID:1, ID:2, и по названию столбца: title.

    Также, router может быть древовидным и рекурсивным.
    Пример: domain.com/catalog/145/add/prod/24/56/37
    Описание: Добавить в каталог с ID:145 товары с ID:24,56,37
    Вначале, определяется, что категория с ID:145 существует и необходимо добавление, затем снова вызывается роутер с линком: /prod/24/56/37 и уже сервис prod проверяет существование продуктов и добавляет к каждому ID категорию 145 и так же возвращает результат в сервис catalog.
    Шаблон страницы вывода - будет выбран согласно операции: add.

    Таким образом, URI превращается в понятные предложения для общения пользователя/JS (front-end) с сервером через URI-запросы. Router - это как-бы механизм, "понимающий" то, что вы просите от веб-сайта через URI.
    Суммарно: это примитивный язык общения в виде структурированных лексических "предложений" между сайтом и пользователем/JS посредством URI-запросов.
    Ответ написан
    Комментировать
  • В чем суть роутера на 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 комментариев
  • Дистанционное образование в IT?

    Adamos
    @Adamos
    Мнение о том, что вышка - это знания, довольно ошибочно.
    Реально три четверти тех знаний, которые дают в институтах - совершенно неактуальны для дальнейшей жизни, даже если вы работаете по тому профилю, по которому учились. А из оставшейся четверти, если говорить про IT, больше половины устарело еще до того, как вы начали образование, и его все равно надо переучивать самому.
    Вот как раз навыку изучать самому (и организованности, необходимой для этого) вузы и учат.
    Если вас вышибли из вуза - можете считать, что вы не научились ровно ничему.

    Если вы готовы начать с чистого листа, принять учебу как челлендж и возможность вырасти над собой, взяться за ум и перестать быть раздолбаем - что ж, тут может и заочка сгодиться. Если вы рассчитываете на нее как "ну, там же не отчислят - немножко похожу, кое-как сдам, зато корочки для переезда" - не стоит и начинать.
    Ответ написан
    1 комментарий
  • Дистанционное образование в IT?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Мне 21 год, 2 раза отчисляли с очного образования

    В принципе сам понимаю что очка уже многого не даст

    Посмеялся.

    Так вот, вопрос в чем: стоит ли вообще тратить время и деньги на такую дистанционную заочку?

    Вам - нет.

    (Есть огромные амбиции себнуть из раши)

    Почему-то именно такие люди пополняют ряды поравалитиков.

    Дистанционное образование, чаще всего, фабрика дипломов и с такими "корочками" никуда не будет, прецеденты были.
    Ответ написан
    1 комментарий
  • Как писать Толковый ООП код в JS?

    @MadridianFox
    Web-программист, многостаночник
    Понимание ООП приходит с опытом. Сначала надо написать много кода, самому заметить его недостатки и тогда перечитывая те же самые статейки вы начнёте по новому понимать, что вот конкретно эту штуку можно было бы использовать в том моём коде, и было бы лучше.

    Я разделяю ООП на аутентичное и классическое. Аутентичное, это ООП как его представлял автор - объекты обмениваются сообщениями.
    Классическое - это то как оно реализовано в Java.
    И там и там есть инкапсуляция и полиморфизм. Наследование это приятная фишка классического ООП. Так же как и все пляски с типами. Вообще строгая типизация не является частью ООП. По крайней мере не является частью аутентичного ООП.

    Поэтому переход на typescript позволит только более точно воспроизводить классическое ООП. Ну и проверку типов добавит. Это само по себе полезно, но для ООП никакого значения не имеет.

    В общем,. Надо всегда помнить о двух вещах - инкапсуляция и полиморфизм. Необходимо выделять некоторую самостоятельную функциональность в отдельные объекты и писать код так, чтобы решение о том какой код выполнить делалось не кучей условий, а на основании того, какой объект сейчас лежит в переменной.

    Заметьте, про js я почти ничего не сказал. Потому что дело не в нём. Дело только в понимании ООП. У языков программирования, конечно, есть различные возможности и ограничения что которые позволяют использовать ту или иную парадигму. Но ООП на js можно было делать и до es6, просто потому что в js можно инкапсулировать код в объект.

    И ещё, когда мы начинаем делить код на объекты, необходим механизм разделения кода на файлы и собирания его обратно. Т.е. нужна модульность. Лучше всего, конечно, использовать webpack, но вроде как в js есть и другие системы. Не сборки, а именно подключения модулей.
    Ответ написан
    1 комментарий
  • Что за >5000 странных записей в БД?

    @prostoprofan
    Логично же, что попытка SQL инъекции
    Ответ написан
    Комментировать
  • Как быть хорошим junior?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    1. Адекватность и самостоятельность.
    Детальнее: Умение понять суть задачи, чтобы выполнить ее. Самостоятельно решать проблемы - в это слово входит не только то, что возникла проблема - порешал. А умение решить проблемы, которые ты решить не можешь. То есть организовать решение проблемы. Заблочили аккаунт? Выяснить, вызвонить, попинать, чтобы разлочили побыстрее. Не знаешь как решить какую-то техническую проблему - достучаться до куратора. Не сидеть и ждать три дня, пока он вспомнит про твою проблему, а регулярно уточнять. Занят куратор - подойти к другому. Не успеваешь решить в срок - прийти к куратору заранее, а не за час до конца срока.
    В общем, чтобы за тобой не бегали.

    2. Умение ставить правильные вопросы.
    Сперва загуглить, потом задать вопрос для уточнения. В идеале ставить вопросы, на которые ответ будет "да" или "нет", но это я утрирую. Не бояться спрашивать вещи, которые совсем не понимаешь, но тут не нужно ожидать что все будут разжевывать - следует задать вопрос, чтобы понять куда копать. Иногда достаточно знать пару ключевых слов, по которым можно загуглить.

    3. Желание учиться.
    Не бояться изучить лишнее, потому что "мне же это не пригодится". Умение гуглить по ключевым словам. Не лениться изучать как что-то работает, чтобы понимать почему это происходит. Понимание принципов работы очень сильно увеличивает интуицию.
    Ответ написан
    1 комментарий
  • Как работает функция in_array?

    villiwalla
    @villiwalla
    HTML-верстка
    Потому что в массиве доя поиска у тебя булево 0 - false, 1 - true. Не пустая искомая строка равна 1 иначе true. Используй флаг сравнения по типам.
    Ответ написан
    Комментировать
  • Стоит ли начинать сначала и как учить front-end?

    Хватит изучать, начинай что-нибудь пилить на основе того, что знаешь
    Ответ написан
    8 комментариев
  • Как передать данные из хвоста ссылки на сервер?

    @Narts
    Это обычные гет запросы
    $field = !empty($_GET['start']) ? $_GET['start'] : 'значение не задано';
    Ответ написан
    1 комментарий
  • Самописный проект: как узнать, его можно запустить на хостинге или же нужен VPS?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    При чём здесь Lavarel? При чём здесь MVC и структура папок?
    Какая-то каша, в том числе в понятиях и терминах.
    Берите и запускайте на любом хостинге. Хостинг - это и есть сервер.
    А VPS-это и есть хостинг.
    Но сначала надо отладить его локально на своей машине.
    VPS-хостинг, конечно, всегда лучше.
    Но обычно VPS на *nix-ах (Ubuntu, Debian, etc). Поэтому, если проект под Windows, то будут сложности, либо намного дороже выйдет хостинг.
    Ответ написан
    1 комментарий
  • Как внедрить систему оплаты на магазин опенкарт?

    Noizefan
    @Noizefan
    Скажите, Вы - фронтэндщик, как SSL-сертификат - самоподписанный?
    В чём сложность нагуглить гугл переводчик и перевести?

    1) Разархивируйте архив, загрузите со слиянием папок в корень ОпенКарта
    2) Из админ-панели проследуйте в Админ-пользователи-группы пользователей
    3) найдите и отметьте неотмеченные файлы и в редактировании и в доступе, сохраните
    4) из админ-панели следуйте в Расширения-Оплата
    5) Установите модуль и настройте, нажав на кнопку Редактировать

    Это мой вольный перевод от бэкендщика эксклюзивно фронтэндщику
    Ответ написан
    Комментировать
  • Дайте совет начинающему юнцу на пути в программирование. Правильно ли я спланировал обучение?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    На этом уровне попробовать залезть на фриланс и попробовать заработать

    И сразу вас постигает фиаско.

    Как Вы думаете, при таком количестве уделяемого времени обучению сколько я буду осиливать тропу до первого $?

    Года два где-то. Это если вам крупно повезёт и вы попадёте на бесплатную стажировку в какую-нибудь фирму.
    Ответ написан
  • Для чего объявлять (создавать) имена полей в начале класса если они же по сути объявляются (создаются) в конструкторе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Зачем мыть руки перед едой, ведь и из грязных ложка не выпадет?

    Пхп - язык с плохой наследственностью. И эта "возможность" - один из рудиментов оставшихся с тех времён, когда язык писался в памперсы.

    Но на самом деле все переменные надо объявлять перед использованием
    Ответ написан
    3 комментария
  • Для чего объявлять (создавать) имена полей в начале класса если они же по сути объявляются (создаются) в конструкторе?

    Compolomus
    @Compolomus Куратор тега PHP
    Комполом-быдлокодер
    Это работает, сделано это для магических приколов, чтоб не было приколов лучше объявить все, если свойства нужны только в конструкторе, то их можно не создавать, а обработать конструктор и сохранить результат в свойство например
    Ну и свойства такие будут публичными
    Ответ написан
    5 комментариев
  • Для чего объявлять (создавать) имена полей в начале класса если они же по сути объявляются (создаются) в конструкторе?

    @rfm
    чтобы в редакторе кода, когда вы набираете
    $object->|
    он мог вам подсказать какие свойства есть у объекта.

    чтобы явно указать видимость свойств (например, протектед)
    чтобы потом не искать какие свойства есть у объекта через год, шарясь по всем его методам.
    чтобы у вас не отвалилось все к чертям, если вы перепишите конструктор в классе-потомке.
    Ответ написан
    Комментировать
  • Каким должен быть паттерн Adapter?

    serginhold
    @serginhold
    Адаптер адаптирует интерфейс..

    Допустим есть класс для форматирования текста TextFormatter, и есть у него метод format().
    По какой-то причине в проекте решили отказаться от этого класса, и использовать другой NewFormatter, типа другой на много лучше и няшный весь такой, но у него нет метода format(), у него есть метод formatText().
    И чтобы по всему проекту не искать вызов старого класса, правя кучу кода, можно написать адаптер, подменив им старый класс.
    Пусть будет NewTextFormatterAdapter. У которого пишем метод format(), в котором идёт вызов нового класса, что-то вроде:
    return this->newFormatter->formatText();
    Ответ написан
    6 комментариев
  • Как внедрить систему оплаты на магазин опенкарт?

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

    Конечно файлом, так обходится в разы дешевле по ресурсам, чем каждый раз дергать из базы. Базу желательно полностью держать в оперативной памяти.
    Ответ написан
    Комментировать