Маршрутизатор PHP запускает только индекс, но не другие URI

#php #routes #url-routing

Вопрос:

Я использую PHP-маршрутизатор Bramus для своего приложения, но, похоже, он работает только на индексном маршруте, который есть / . Вот фрагмент кода, который не будет работать:

 public function handle(): Response
{
    $response = null;
    
    $request = new Request($_REQUEST);
    $uri = $request->getRequestUri();

    $container = $this->configureContainer();
    $renderer = new RendererFactory();
    $router = $this->configureRouter();

    $controllerFactory = new ControllerFactory();
    $controller = $controllerFactory->create($request, $container, $renderer, $uri);

    $router->get($uri, function () use ($uri, $controller, amp;$response) {
        $response = $controller->get();
    });

    $router->run();

    return $response;
}
 

Поэтому, когда я захожу на домашнюю страницу, она работает нормально и возвращает ответ с правильным значением. Однако, когда я начинаю говорить /about-us , $router->get() он вообще никогда не срабатывает. Он не выполняет анонимную функцию внутри. Даже замена $uri параметра на жестко закодированную строку, например $router->get('/about-us'...) , не приводит к выполнению анонимной функции.

Я подтвердил, что ControllerFactory на самом деле возвращает правильный контроллер, поэтому, если $router->get() срабатывает, get() метод находится там, и $response он не должен быть нулевым. Но теперь я получаю сообщение об ошибке, $response которое равно нулю, потому $router->get() что оно не сработает.

Какую ошибку я здесь упускаю? Как маршрут индекса может работать идеально, но маршрутизатор не принимает другой маршрут?

Правка Немного покопалась и добавила var_dump в маршрутизатор Bramus

Я добавил var_dump() в handle функцию внутри самого пакета, и она всегда говорит , что результат $this->getCurrentUri() есть / , а не URI в браузере.

Мой .htaccess находится в корневом каталоге, и я перенаправляю все запросы на /public/index.php него . Может быть, это и есть виновник? Но я не знаю, как это исправить. Мой .htaccess:

 RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/index.php?path=$1 [NC,L,QSA]
 

Ответ №1:

Забыл добавить $router->setBasePath('/'); , и моя структура папок и конфигурация .htaccess заставили маршрутизатор сойти с ума.