使用泛型框架禁用默认路由系统

时间:2019-07-08 14:10:51

标签: php routes frameworks url-routing

我正在使用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。

如果您有任何想法......

版本:

  • php 7.3
  • 普遍存在2.2.0

1 个答案:

答案 0 :(得分:0)

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

路由的public class My_Controller { @AuraEnabled public static Decimal getRate(String currFrom, String currTo) { Decimal value = 1.067773; return value; } } <aura:component controller="My_Controller"> <lightning:input type="string" name="res" aura:id="res" value= " {!c.My_Controller.getRate('A', 'B')}" label="Result"/> 属性允许您分配定义(并因此被请求)的顺序。

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

priority

如果我们仍然想激活某些控制器(例如Admin部分),则必须添加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!"; } } 控制器动作的路由

遇到路由问题,请提供路由解决方案。