使用 Ubiquity-framework 禁用默认路由系统

Disabling the default routing system with Ubiquity-framework

我正在 PHP 中设置一个带有 Ubiquity Framework 的小型应用程序,我正在尝试禁用默认路由系统 (controller/action/parameters)。

路由系统基于注释(已记录 here)。

我有一个带有几条路由的控制器,它可以工作(不要忘记重置路由器缓存)。

namespace controllers;

class FooController extends ControllerBase 
{
    /**
     * @get("foo")
     */
    public function index()
    {
        echo "I'm on /foo";
    }

    /**
     * @get("bar/{p}")
     */
    public function bar($p='default p')
    {
        echo "I'm on bar/".$p;
    }

}

地址 /foo/bar/bar/xxx 可访问,但我想禁用允许访问现有控制器(无路由)的操作的默认路由系统。

我想禁用以下网址:

我没有在文档中找到答案。

我知道框架不知道(我是通过phpbenchmarks网站发现的),但是路由系统很经典,而且还是php。

如果你有什么想法....

版本:

我在文档中间接找到了解决方案。

路由的 priority 属性允许您分配定义它的顺序(因此请求)。

要禁用对现有控制器的操作调用,因此可以在返回 404 错误的最后位置定义通用路由。

namespace controllers;

use Ubiquity\utils\http\UResponse;

class FooController extends ControllerBase 
{
    ...

    /**
     * @route("{url}","priority"=>-1000)
     */
    public function route404($url)
    {
        UResponse::setResponseCode(404);
        echo "Page {$url} not found!";
    }
}

如果我们仍然想激活一些控制器(例如管理部分),我们必须添加 requirements 属性,它允许指定一个正则表达式。

namespace controllers;

use Ubiquity\utils\http\UResponse;

class FooController extends ControllerBase 
{
    ...

    /**
     * @route("{url}","priority"=>-1000,"requirements"=>["url"=>"(?!(a|A)dmin).*?"])
     */
    public function route404($url)
    {
        UResponse::setResponseCode(404);
        echo "Page {$url} not found!";
    }
}

在这种情况下,唯一可访问的路由是用注释定义的路由 + 与 Admin 控制器的操作相对应的路由

有路由问题,路由解决。