gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 20:25:10 25 4
gpt4 key购买 nike

美好的一天,

我正在尝试使用 Slim 框架开发一个网络平台。我已经用MVC方式完成了。我的一些 API 用于渲染 View ,有些只是为了从数据库获取数据而构建。例如:

$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
));
});

我正在尝试在 View 相关 API '/adminpage' 中调用数据库处理 Api '/api/getListAdmin'。

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

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

  • 方法 2 (router->getNamedRoute->dispatch) 似乎不起作用,因为即使我使用 $result = $route->dispatch(); 它也会在 View 中呈现结果。将结果存储在变量中,但似乎调度方法仍然将结果渲染到屏幕上。

我尝试仅为与数据库相关的 API 创建一个新的 slim 应用程序,但仍然调用其中一个应用程序需要相当长的时间 2 到 3 秒。

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

谢谢

最佳答案

方法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
));
});

方法2

如果您可以接受过度杀伤的方法,您可以使用 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
));
});

关于php - 使用 Slim Framework 在另一个 api 中调用内部 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30971542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com