为返回值调用另一个路由

时间:2014-06-25 15:20:33

标签: php silex

你好我是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

})

但很明显,这并没有归还我想要的东西..我怎么能解决这个问题?

1 个答案:

答案 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文档中了解shareprotect