Oii, Guilherme.
Não entendi muito bem como o PHP armazena isso
Você tem um arquivo routes.php
que o objetivo dele é retornar um array associativo, você pode pensar como um "mapa" que indica qual controller será responsável por cada requisição que chegar do cliente. Por exemplo: Se o usuário quiser acessar a página "/novo-video", você definiu que o VideoFormController
será o responsável por lidar com essa requisição.
Como é que passa essas informações pelo index?
No arquivo index.php
usamos o require_once
para incluir o código da routes.php
em uma variável $routes
. Dessa forma:
$routes = require_once __DIR__ . '/../config/routes.php';
A partir disso precisamos capturar o que o usuário digitou na URL do navegador, e se ele não digitar nada podemos definir "/". Isso é feito por meio de:
$routes = require_once __DIR__ . '/../config/routes.php';
$pathInfo = $_SERVER['PATH_INFO'] ?? '/';
Em seguida, precisamos capturar qual o método HTTP foi usado para obter essa requisição, foi POST? GET? Podemos resolver com o código abaixo:
$routes = require_once __DIR__ . '/../config/routes.php';
$pathInfo = $_SERVER['PATH_INFO'] ?? '/';
$httpMethod = $_SERVER['REQUEST_METHOD'];
Perfeito, com esses dados em mãos eu posso fazer uma busca pelo que o usuário está buscando no nosso "mapa". Para isso eu preciso juntar as informações de: o recurso que o usuário está querendo: $pathInfo = $_SERVER['PATH_INFO'] ?? '/';
e o método http usado: $httpMethod = $_SERVER['REQUEST_METHOD'];
. Dessa forma, podemos realizar a busca e teremos:
$routes = require_once __DIR__ . '/../config/routes.php';
$pathInfo = $_SERVER['PATH_INFO'] ?? '/';
$httpMethod = $_SERVER['REQUEST_METHOD'];
$key = "$httpMethod|$pathInfo";
if (array_key_exists($key, $routes)) {
$controllerClass = $routes["$httpMethod|$pathInfo"];
$controller = new $controllerClass($videoRepository);
} else {
$controller = new Error404Controller();
}
Veja que foi usado a função array_key_exists para verificar a $key
dentro do nosso dicionário: $routes
, para retornar o controller responsável pela requisição.
Espero ter ajudado e bons estudos :)