sven_tesla
@sven_tesla
Учу PHP не ругайте

Ошибка с регулярным выражением в php?

Здравствуйте ребят подскажите пожалуйста где ошибка в коде
есть 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;
          }

     }
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы