美好的一天,
我正在尝试使用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
));
});
我试图调用数据库处理Api' / api / getListAdmin'在视图中相关的apis' / adminpage'。
基于我在网络上找到的解决方案,我尝试了方法1和2,但是:
方法1(使用file_get_contents)需要很长时间才能获取数据(在我的本地环境中几秒钟)。
方法2(router-> getNamedRoute-> dispatch)似乎dosnt工作becuz它将在视图中呈现结果,即使我使用$ result = $ route-> dispatch();将结果存储在一个变量中,但似乎调度方法仍然会渲染到屏幕上。
我尝试仅为数据库相关的API创建一个新的slim应用程序,但仍然调用其中一个需要相当长的时间2到3秒。
真的很感激,如果有人可以帮助我解决我做错了什么或者从另一个api获取数据的正确方法。
谢谢
答案 0 :(得分:5)
这可能是另一种创建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
));
});
如果您对过度杀伤方法没问题,可以使用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
));
});