【问题标题】:PHP router only triggers on index, but not other URI'sPHP 路由器仅在索引上触发,而不在其他 URI 上触发
【发布时间】: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


    【解决方案1】:

    忘记添加$router->setBasePath('/');,我的文件夹结构和.htaccess 配置让路由器发疯了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      相关资源
      最近更新 更多