你好我是silex的新手,我基本上做的是
我有一个控制器使用curl从另一台服务器获取内容。然后我有一个不同的路线,我想要显示返回的值(JSON)特定的东西。
我想过使用像
这样的东西$app->get('books', function() use ($app) {
$content = $app->get('overview/books/');
$content = json_decode($content);
return ... ;
})
$app->get('overview/books', function() use ($app) {
// do the curl operation and return
})
但很明显,这并没有归还我想要的东西..我怎么能解决这个问题?
答案 0 :(得分:2)
你应该把你的json获取代码放在一个服务中并在两个控制器中使用它。
首先,您应该创建一个包含所有相关代码的类:
class JsonFetcher
{
public function fetch()
{ /* your code here */ }
}
然后将其注册为服务:
$app["json-fetcher"] = $app->share(function () {
return new JsonFetcher();
});
然后在你的控制器中使用它:
$app->get("books", function () use ($app) {
$fetcher = $app["json-fetcher"];
$json = $fetcher->fetch();
// your code here
});
编辑:
如果你的服务是一个单方法类,并且它没有依赖关系,你可以简单地将一个函数注册为这样的服务:
$app["json-fetcher"] = $app->share($app->protect(function () {
//fetch and return json
}));
您可以在Pimple文档中了解share
和protect
。