@scondic

Ошибка с роутингом при использовании регулярных выражений?

Добрый день. Есть класс который обрабатывает роутинги. Собственно, вот он:
<?php

namespace application\core;

/**
 * Роутинг сайта
 */
class Router{

  protected $routes = [];
  protected $params = [];

  public function __construct(){
    $arr = require 'application/config/routes.php';
    foreach ($arr as $key => $val) {
      $this->add($key, $val);
    }
  }

# Добавление маршрута
  public function add($route, $params)
  {
    $route = '#^#'.$route.'$#';
    $this->routes[$route] = $params;
  }

# Проверка маршрута
  public function match()
  {
    $url = trim($_SERVER['REQUEST_URI'], '/');
    foreach ($this->routes as $route => $params) {
      if (preg_match($route, $url, $matches)) {
        var_dump($matches);
      }
    }
  }

# Запуск роутера
  public function run()
  {
    $this->match();
    // echo "start";
  }
}


При запуске в браузере выходит ошибка:

Warning: preg_match(): Unknown modifier 'a' in M:\xampp\htdocs\molorate.ml\application\core\router.php on line 32

Warning: preg_match(): Unknown modifier 'r' in M:\xampp\htdocs\molorate.ml\application\core\router.php on line 32


Что можно сделать?
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Я так понимаю, что в результате в массиве routes у вас получается что-то наподобие #^#action/login$#. Собственно регулярным выражением при этом будет #^#, а всё, что записано дальше рассматривается как набор модификаторов.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
$route = '#^#'.$route.'$#';
заменить строкой
$route = '@^#'.$route.'$@';
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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