Здравствуйте ребят подскажите пожалуйста где ошибка в коде
есть 3 файла: index.php, routes.php, MainController.php
В файле index.php после перебора массива
($routes as $pattern =>$controllerAndAction)
регулярное выражение не может найти совпадение и в $matches попадает пустая строка хотя в адресе пишешь "hello/username", хотя в файле route.php правило для любой строки есть
Помогите пожалуйста найти ошибку,
код из 3 файлов
файл index.php
<?php
// функция автозагрузки классов
spl_autoload_register(function (string $className) {
require_once __DIR__ . '/../src/' . $className . '.php';
});
$route = $_GET['route']?? '';
$routes = require __DIR__ . '/../src/routes.php';
$isRouteFound = false;
foreach ($routes as $pattern => $controllerAndAction)
{
preg_match($pattern, $route, $matches);
if (!empty($matches))
{
$isRouteFound = true;
break;
}
}
if (!$isRouteFound)
{
echo 'Страница не найдена!';
return;
}
var_dump($controllerAndAction);
var_dump($matches);
$controllerName = $controllerAndAction[0];
$actionName = $controllerAndAction[1];
$controller = new $controllerName();
$controller->$actionName();
файл routes.php
<?php
return[
'~^Hello/(.*)$~' => [\MyProject\Controllers\MainController::class, 'sayHello'],
'~^$~' => [MyProject\Controllers\MainController::class, 'main'],
'~^bye/(.*)$~' => [MyProject\Controllers\MainController::class, 'sayBye'],
];
файл MainController.php
<?php
namespace MyProject\Controllers;
class MainController
{
public function main()
{
echo 'Главная страница';
}
public function sayHello(string $name)
{
echo 'Привет, ' . $name . '!';
}
public function sayBye(string $name)
{
echo 'До свидания' . $name;
}
}