titov_andrei
@titov_andrei
All my life I learn - and die a fool!

Почему может не работать функция PHP?

Почему может не работать функция matchRoute()?

Router.php
<?php
  class Router {
    
    protected static $routes = [];
    protected static $route = [];

    public static function add($regexp, $route = []) {
      self::$routes[$regexp] = $route;
    }

    public static function getRoutes() {
      return self::$routes;
    }

    public static function getRoute() {
      return self::$route;
    }

    public static function matchRoute($url) {
      foreach(self::$routes as $pattern => $route) {
        if($url == $pattern) {
          self::$route = $route;
          return true;
        }
      }
      return false;
    }
  }
?>


index.php
<?php
  $query = $_SERVER['REQUEST_URI'];

  require '../vendor/core/Router.php';
  require '../vendor/libs/functions.php';

  Router::add('posts/add', ['controller' => 'Posts', 'action' => 'add']);
  Router::add('posts/', ['controller' => 'Posts', 'action' => 'index']);
  Router::add('', ['controller' => 'Main', 'action' => 'index']);
  
  debug(Router::getRoutes());

  if(Router::matchRoute($query)) {
    debug(Router::getRoute());
  } else {
    echo '404';
  }
?>
  • Вопрос задан
  • 361 просмотр
Решения вопроса 1
OKyJIucT
@OKyJIucT
Sunshine reggae
В передаваемом $url содержится url, которого нет в массива self::$routes. Как вы ее вызываете, что передаете, какое содержимое self::$routes?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AloneCoder
@AloneCoder
[object Object]
Видимо должно быть так
public static function matchRoute($url) {
      foreach(self::$routes as $pattern => $route) {
        if (preg_match($pattern, $url, $matches)) {
          self::$route = $route;
          return true;
        }
      }
      return false;
}
Ответ написан
@Firik67
Middle PHP Developer
1. Потому что может быть передан некорректный $url
2. Потому что self::$routes может содержать некорректные данные
3. Потому что
Что в вашем понимании "не работает"?
Ответ написан
Ваш ответ на вопрос

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

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