使用 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 可访问,但我想禁用允许访问现有控制器(无路由)的操作的默认路由系统。
我想禁用以下网址:
- /FooController
- /FooController/index
- /FooController/bar
- /FooController/bar/xxx
我没有在文档中找到答案。
我知道框架不知道(我是通过phpbenchmarks网站发现的),但是路由系统很经典,而且还是php。
如果你有什么想法....
版本:
- php7.3
- 无处不在 2.2.0
我在文档中间接找到了解决方案。
路由的 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
控制器的操作相对应的路由
有路由问题,路由解决。
我正在 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 可访问,但我想禁用允许访问现有控制器(无路由)的操作的默认路由系统。
我想禁用以下网址:
- /FooController
- /FooController/index
- /FooController/bar
- /FooController/bar/xxx
我没有在文档中找到答案。
我知道框架不知道(我是通过phpbenchmarks网站发现的),但是路由系统很经典,而且还是php。
如果你有什么想法....
版本:
- php7.3
- 无处不在 2.2.0
我在文档中间接找到了解决方案。
路由的 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
控制器的操作相对应的路由
有路由问题,路由解决。