如何在 Slim Framework 上的中间件中访问请求对象


How to access request object inside middleware on Slim Framework

我正在尝试在中间件中获取请求对象。我正在创建一个 ajaxOnly 中间件,需要检查 isXhr() 请求方法。我尝试创建如下所示的内容:

 $ajaxOnly = function($request, $response, $route) { // this is the line 3
             if (!$request->isXhr()) {
                Slim::redirect('/dashboard/');
             }
            };

并像这样使用:

$app->get('/posts/:start_date/:end_date', $ajaxOnly, function($start_date, $end_date) use($app) {
    echo 'ok';
});

但它给了我以下错误:

苗条应用程序错误 由于以下错误:

  • 代码: 2 消息:
  • 缺少 {closure}() 的参数 1
  • 文件:/
  • var/www/myapp/routes.php 行: 3

发生的情况是,slim 不会将任何参数传递给闭包,所以你得到这个错误,尝试这样的事情

$ajax = function(){
    $slim = Slim::getInstance();
    if (!$slim->request()->isXhr()) {
            $slim->redirect('/dashboard/');
    }
};

你可以做这样的事情。

$ajaxOnly = function($app) {
    if (!$app->request()->isXhr()) {
        $app->redirect('/dashboard');
    }
};