使用Slim Framework在另一个api中调用内部api

Del*_*ega 2 php api web-services slim

美好的一天,

我正在尝试使用Slim框架开发Web平台.我是以MVC的方式完成的.我的一些API用于呈现视图,而一些API仅用于从数据库获取数据.例如 :

$app->get('/api/getListAdmin', function () use ($app) {
    $data = ...//code to get admins' list
    echo json_encode($data);
})->name("getListAdmin");





$app->get('/adminpage', function () use ($app) {

    // **** METHOD 1 :// get the data using file_get_contents
    $result = file_get_contents(APP_ROOT.'api/getListAdmin');

    // or 

    // **** METHOD 2 :// get data using router
    $route = $this->app->router->getNamedRoute('getListAdmin');
    $result = $route->dispatch();
    $result = json_decode($result);        

    $app->render('adminpage.php',  array(
        'data' => $result
    ));
});
Run Code Online (Sandbox Code Playgroud)

我正在尝试在视图相关的apis'/ adminpage'中调用db处理Api'/ api/getListAdmin'.

基于我在网上找到的解决方案,我尝试了方法1和2但是:

  • 方法1(使用file_get_contents)需要很长时间才能获取数据(在我的本地环境中几秒钟).

  • 方法2(router-> getNamedRoute-> dispatch)似乎dosnt工作becuz它将在视图中呈现结果,即使我使用$ result = $ route-> dispatch(); 将结果存储在变量中,但似乎调度方法仍然呈现给屏幕.

我试图为db相关的API创建一个新的slim应用程序,但仍然调用其中一个需要相当长的时间2到3秒.

真的很感激,如果有人可以帮我解决我做错了什么或者从另一个api获取数据的正确方法.

谢谢

Dav*_*ore 5

方法1

这可能是另一种创建Service图层的方法,其中删除了冗余代码:

class Api {
    function getListAdmin() {
        $admins = array("admin1", "admin2", "admin3"); //Retrieve your magic data
        return $admins;
    }
}

$app->get('/api/getListAdmin', function () use ($app) {
    $api = new Api();
    $admins = $api->getListAdmin();
    echo json_encode($admins);
})->name("getListAdmin");


$app->get('/adminpage', function () use ($app) {
    $api = new Api();
    $admins = $api->getListAdmin();      
    $app->render('adminpage.php',  array(
      'data' => $admins
    ));
});
Run Code Online (Sandbox Code Playgroud)

方法2

如果您对overkill方法没问题,可以使用Httpful:

$app->get('/adminpage', function () use ($app) {
  $result = \Httpful\Request::get(APP_ROOT.'api/getListAdmin')->send();

  //No need to decode if there is the JSON Content-Type in the response
  $result = json_decode($result);
  $app->render('adminpage.php',  array(
    'data' => $result
  ));
});
Run Code Online (Sandbox Code Playgroud)