Рубрики
Uncategorized

Как работают маршрутизаторы в MVC Framework

Автор оригинала: David Wong.

Эта статья, впервые опубликованная в рамках MVC о том, как работают маршрутизаторы ( маршрутизаторы), воспроизводится, пожалуйста, укажите источник.

Объясните: Похоже, что перевод SF классифицируется как ОШИБКА, поэтому в этой статье дается оригинальная категория.

Маршрутизатор или диспетчер MVC обнаруживает URL-адрес HTTP-запросов и пытается сопоставить один компонент URL-адреса с методом, определенным в контроллере и контроллере, передавая все параметры в метод.

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

php

class SimpleRouter
{
    // Routing arrays that store our defined routes
    private $routes;

    // This method is used to add defined routes to the $routes array
    function add_route($route, callback $closure)
    {
        $this->routes[$route] = $closure;
    }

    // Perform specific routing
    function execute()
    {
        $path = $_SERVER['PATH_INFO'];

        /**
        * Detecting whether a given routing is defined,
        * Or perform the default'/'home page routing.
        */
        if (array_key_exists($path, $this->route)) {
            $this->route[$path]();
        } else {
            $this->route['/]();
        }
    }
}

Класс SimpleRouter – это упрощенная модель маршрутизатора MVC. Его основная функция заключается в добавлении каждого пользовательского маршрута в массив и его выполнении. Чтобы понять, как это работает, скопируйте следующий код в index.php В документе.

routes[$route] = $closure;
    }

    // Perform specific routing
    function execute()
    {
        $path = $_SERVER['PATH_INFO'];

        /**
        * Detecting whether a given routing is defined,
        * Or perform the default'/'home page routing.
        */
        if (array_key_exists($path, $this->route)) {
            $this->route[$path]();
        } else {
            $this->route['/]();
        }
    }
}

/* Create Router instances*/
$router = new SimpleRouter();
 
/* Add Home Closure Value Router*/
$router->add_route('/', function(){
    echo 'Hello World';
});
 
/* Adding another closure route*/
$router->add_route('/greetings', function(){
    echo 'Greetings, my fellow men.';
});
 
/* Add callback functions as routing*/
$router->add_route('/callback', 'myFunction');
 
 
/* Callback function handler*/
function myFunction(){
    echo "This is a callback function named '" .  __FUNCTION__ ."'";
}

/* Perform routing*/
$router->execute();

Теперь перейдите в браузер, чтобы получить доступ к следующим URL-адресам:

http://localhost/index.php/
http://localhost/index.php/greetings
http://localhost/index.php/callback

Для каждого URL-адреса вы должны видеть разные сообщения, определенные в нашей маршрутизации. Итак, как работает маршрутизатор?

В нашем примере add_route Метод добавляет путь к URL-адресу в массив маршрутизации и определяет соответствующие операции обработки. Эта операция обработки может быть простой функцией или функцией обратного вызова, которая передается в качестве закрытия. Теперь, когда мы выполняем выполнение маршрутизатора При использовании метода он определяет текущие $маршруты Соответствует ли маршрутизация в массиве, и если да, то выполняется функция или функция обратного вызова.

Если вы используете var_dump это $маршруты Массив, вы можете просмотреть подробную информацию об массиве. Для каждого определенного маршрута сохраняется закрытие и связывается с ним.

array (size=3)
  '/' => 
    object(Closure)[2]
  '/greetings' => 
    object(Closure)[3]
  '/callback' => string 'myFunction' (length=10)

Процесс выполнения выполняется в следующих строках. & Доллар; это – > маршруты [$путь]** инструкция возвращает закрытие, сохраненное в **$маршруты В массиве, чтобы указать выполнение маршрута, обратите внимание на конец инструкции ()

$this->routes[$path]();
// or
$this->routes['/']();

Приведенный выше пример просто демонстрирует, как работают маршрутизаторы. Для простоты мы не обрабатывали никаких ошибок и не учитывали безопасность маршрутизации.

Как работают маршрутизаторы MVC

Оригинал: “https://developpaper.com/how-routers-in-mvc-framework-run/”