目前,我的Laravel应用程序主要使用Guzzle直接在控制器中使用的自定义API运行。通过Eloquent处理的站点的唯一部分是用户管理/身份验证。 (控制器扩展了一个父控制器,它在各个函数中具有通用的GET / PUT / POST调用,子控制器调用这些函数并向它们发送数据)
我正在寻找有关如何抽象API的GET / PUT / PUSH调用的信息,并将它们从控制器中取出,以便数据访问在整个电路板上更加统一。不幸的是,我没有看到关于API的大量信息,而没有在Laravel应用程序中实际创建它们。
似乎我应该能够编写一些内容,以便控制器以与它们与用户数据交互的方式类似的方式与API交互,但同样,我没有找到有关它的信息(我可能在谷歌搜索它不正确)。
有人能指出我正确的方向吗?我正在使用Laravel 4.1。
答案 0 :(得分:3)
听起来您正在使用Guzzle连接到第三方API,而您希望远离实例化Guzzle&在你的控制器中调用Guzzle方法。
一种解决方案是编写一个处理API调用的库类。例如
class MyAPILibrary
{
public function readImportantData($parameters)
{
// use Guzzle to connect to the API, pass the parameters, and read
// the important data
return $importantData;
}
}
然后,在您的控制器中,只要您需要该数据:
public function getIndex()
{
// I need that important data!
$d = MyAPILibrary::readImportantData($myParameters);
// and use the data...
return View::make("template")->with("important", $d);
}
请注意,我们假设您已经设置了服务提供商&库的外观,因此您可以进行MyAPILibrary::readImportantData($myParameters)
之类的方法调用。有关该教程的详细教程,请参阅this page。
关于此设置的好处是,您现在可以在不触及控制器的情况下测试API库。此外,您的控制器变得多更轻 - 通常是一两行。例如,可以重写上面的示例:
public function getIndex()
{
return View::make("template")
->with("important", MyAPILibrary::readImportantData($myParameters));
}
瞧!单行控制器方法!
答案 1 :(得分:1)