【发布时间】:2021-08-22 23:50:13
【问题描述】:
我正在为我的应用程序使用 Bramus PHP 路由器,但它似乎只适用于索引路由 /。这是一段不起作用的代码:
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, &$response) {
$response = $controller->get();
});
$router->run();
return $response;
}
所以当我转到主页时,它工作正常并返回具有正确值的响应。但是,当我说/about-us 时,$router->get() 根本不会触发。它不执行内部的匿名函数。即使用像$router->get('/about-us'...) 这样的硬编码字符串替换$uri 参数也不会执行匿名函数。
我确认ControllerFactory 实际上确实返回了正确的控制器,所以如果$router->get() 触发,get() 方法就在那里,$response 不应该为空。但现在我收到一条错误消息,说 $response 为空,因为 $router->get() 不会触发。
我在这里遗漏了什么错误?索引路由怎么能正常工作,但路由器不接受另一条路由?
Edit 进行了一些挖掘并将 var_dump 添加到 Bramus 路由器
我在包本身的handle函数中添加了一个var_dump(),它总是说$this->getCurrentUri()的结果是/,而不是浏览器中的URI。
我的 .htaccess 位于根目录中,我将所有请求重定向到 /public/index.php。也许这就是罪魁祸首?但我不知道如何解决它。我的 .htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /public/index.php?path=$1 [NC,L,QSA]
【问题讨论】:
标签: php routes url-routing