Slim-PHP框架应用中间件的部分应用

Slim-PHP框架应用中间件的部分应用,php,slim,Php,Slim,我正在用Slim编写一个restapi,我希望API的某些部分需要登录,有些部分可以公开使用。对于身份验证,我使用Slim Extras的StrongAuth中间件 不幸的是,如果没有提供身份验证,StrongAuth会终止请求,并且它是一个应用程序中间件(似乎是全部或全无),因此我一直在构建完全由StrongAuth保护的API,允许通过虚拟登录访问公共资源 然而,这并不理想;我只想拥有不安全的资源。我尝试在同一个文件中运行两个应用程序,但其中一个总是抛出404错误,这显然是不可接受的 是否有

我正在用Slim编写一个restapi,我希望API的某些部分需要登录,有些部分可以公开使用。对于身份验证,我使用Slim Extras的StrongAuth中间件

不幸的是,如果没有提供身份验证,StrongAuth会终止请求,并且它是一个应用程序中间件(似乎是全部或全无),因此我一直在构建完全由StrongAuth保护的API,允许通过虚拟登录访问公共资源

然而,这并不理想;我只想拥有不安全的资源。我尝试在同一个文件中运行两个应用程序,但其中一个总是抛出404错误,这显然是不可接受的


是否有人知道如何将应用程序级中间件仅应用于Slim中的某些路由,或者如何在同一文件中运行多个Slim应用程序而不会出现问题?

Slim中间件都实现了公共方法调用(),您可以尝试通过这种方式将其添加到所需路由。为此,您需要获取中间件的实例($auth),而不将其用作中间件

$app->get('/yourSecuredRoute', array($auth,'call'), function() use($app){
        $app->render('index.html');
});

不确定它是否有效,即使有效,也很棘手,应该有更好的方法,比如编写自己的路由级中间件。

谢谢!我不是PHP高手,文档中也没有。不,如果StrongAuthy应用程序级别并将其用作路由中间件,它将在该路由中运行两次。。。我想@john它是否如您所期望的那样工作?如果我没记错的话,您不应该将其添加为应用程序级别的中间件,而应该只针对特定路线。
$app->get('/yourSecuredRoute', array($auth,'call'), function() use($app){
        $app->render('index.html');
});