Preg_match возвращает false

168
06 апреля 2018, 16:37

Пишу маршрутизатор, использую регулярное выражение. На выходе preg_match возвращает false. routes.php

<?php
use test_shop\Router;
Router::add('^$', ['controller' => 'Main', 'action' => 'index']);
Router::add('^(?P<controller>[a-z-])+/?(?<action>[a-z-]+)?$');

Router.php

<?php
namespace test_shop;
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 dispatch($url)
{
    if (self::matchRoute($url)){
        echo 'OK';
    }else {
        echo 'NO';
    }
}
public static function matchRoute($url)
{
   foreach (self::$routes as $pattern => $route) {
       if (preg_match("#{$pattern}#", $url,$matches)) {
           foreach ($matches as $k => $v) {
               if (is_string($k)) {
                   $route[$k] = $v;
               }
           }
           if (empty($route['action'])){
               $route['action'] = 'index';
           }
           debug($route);
           return true;
       }
   } return false;
}
}

На выходе http://localhost/test_shop/ выдаёт NO

Версия PHP 7.0

Если написать if(!preg_match .... то На выходе http://localhost/test_shop/ выдаёт

Array
(
   [controller] => Main
   [action] => index
)
OK

Если в url указать дальнейший путь, то значение в массиве не меняться

class App
{
public static $app;
public function __construct()
{
    $query = trim($_SERVER['QUERY_STRING'], '/');
    session_start();
    self::$app = Registry::instance();
    $this->getParams();
    new ErrorHandler();
    Router::dispatch($query);
}
protected function getParams(){
    $params = require_once CONFIG . '/params.php';
    if(!empty($params)) {
        foreach ($params as $k => $v) {
            self::$app->setProperty($k,$v);
        }
    }
}
}
READ ALSO
Сложная сортировка в Mysql

Сложная сортировка в Mysql

У меня есть таблица с объектами objects

202
Добавить кастомный функционал на сайт WordPress

Добавить кастомный функционал на сайт WordPress

Привет, я с вордпресом вообще на ВыПомогите советом как можно реализовать следующее

198
Как убрать ошибку 404 nginx в Yii2 (urlManager)?

Как убрать ошибку 404 nginx в Yii2 (urlManager)?

Страница работает -http://uk/basic/web/indexphp?r=site%2Fcontact Раскоментирываю строчки в Yii2

180