#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 заставили маршрутизатор сойти с ума.