使用 Slim Framework 将 'use' 个对象传递给路由

Pass 'use' objects to Routes with Slim Framework

我刚刚开始将 Slim Framework 用于一个非常基本的 REST API 项目,它绝对可以满足我的需求。但是,我正在尝试确定如何结合使用两个路由组以及通过 'use'.

将对象传递给路由

如何将 $app 实例与其他对象(例如 $db)一起传递给我的路由函数?我可以通过使用 $app = \Slim\Slim::getInstance(); 在函数中获取 $app 来规避这个问题,但也需要传递一个数据库对象。为了取得进步,我目前只是在 GLOBAL 变量中使用它,但如果可能的话,我想找到一个合适的方法。

// create new Slim instance
$app = new \Slim\Slim();
$app->contentType('application/json');

$app->group('/core', function() use($app)
{
    $app->group('/device', function() use($app)
    {
        $app->get( '/getId/:id', 'getDeviceID' );
    });
});

function getDeviceID($id)
{
    $app->response->headers->set('Content-Type', 'application/json');
}

我通常使用全局变量。我认为这是最简单的方法。

但是您可以简单地将它注入到您的 $app 实例中:

$app->db = new YourAmazingDb();

然后使用它:

function getDeviceID($id)
{
  $device = $app->db->getDevice($id);
  //More business here with $device
  $app->response->headers->set('Content-Type', 'application/json');
}