如何创建特定于路由而不是整个控制器类的中间件

How do I create middleware specific to route not whole controller class

提问人:Dalibor Trampota 提问时间:11/26/2022 更新时间:11/28/2022 访问量:138

问:

我有一个api,有些路由是公共的,有些路由需要通过身份验证进行保护。我想将它们放在一个控制器类中,因为它们是相关的。我可以扩展控制器并具有 beforeRoute 函数,但它针对该控制器中的任何路由运行。是否可以只在特定路由中添加中间件?我是一名 js 开发人员,在 express 中,我可以为任何路由传递中间件函数,甚至是多个中间件。

class Clanky /*extends \controllers\ProtectedController */{
    
    public function post_novy_clanek(\Base $base) {
//needs to be protected
    }

    public function get_clanky(\Base $base) {

    }


    public function get_clanek(\base $base) {

    }

    public function get_kategorie(\Base $base) {

    }
}

PHP对我来说是新的,我只是想知道我如何在这个奇怪的无脂肪框架中实现我从其他语言和框架中学到的概念。谢谢。

php 中间件 fat-free-framework

评论


答:

1赞 ikkez 11/28/2022 #1

使用可以使用 f3-access 插件来实现此目的 https://github.com/xfra35/f3-access Fatfree 对如何做到这一点没有意见。解决此问题的其他选项可能是:

  • 在方法上使用 php8 属性,并在 beforeroute 中检查这些属性。
  • 考虑使用自己的命名路由命名架构(如 @admin_routename,并在 beforeroute 中应用检查身份验证
  • 使用 f3-middleware 插件并在那里添加身份验证
  • 扩展在 beforeroute 中提供身份验证的其他管理控制器或使用特征。