我正在努力遵循最佳实践如何正确地做到这一点。可能很难解释,但我会在这里尽力而为。
我有一个外部 API,我需要对其进行很多不同的调用。所以我现在所做的是在 App 文件夹中创建一个名为 Api.php 的类。它使用 Guzzle 进行 API 调用。
在视图的控制器中,我在所需的函数中创建了 Api 对象,并在 API 类中调用了相应的函数。
控制器
public function uploadDevice(Request $request)
{
## Validation etc is performed
// Calling the API
$api = new Api();
$api->uploadDevice();
}
api.php
class Api
{
private $token;
public function __construct(){}
public function checkIfHasToken(){}
public function getTokenFromSession(){}
public function getFreshToken(){}
public function uploadDevice(){}
}
一些问题
constructor
,first in each function doing API calls
或 中完成directly from the Controller
?也许我想太多了,或者让它变得比需要的更复杂。不确定了。
// Controller
public function __construct(ApiService $apiService)
{
$this->api = $apiService;
}
public function uploadDevice(Request $request)
{
// Ensure that the user has a token in a custom HTTP request or in a middleware somewhere
try {
$this->api->uploadDevice();
}
catch (Exception $exception){
return redirect()->back();
//You can include errors from $exception here.
}
}
// Service
class ApiService
{
public function uploadDevice()
{
return 'I did a thing';
}
}
说明
Laravel 有很多方法可以做同样的事情,这完全取决于您需要什么以及您希望应用程序如何扩展。
检查令牌是否存在或有效应该在中间件中完成。
try catch 可以在任何地方,这取决于您需要在异常中看到多少,通常只在控制器中就可以了,但是您可以通过多种方式做到这一点。我个人喜欢为任何 http 错误创建一个事件监听器。
从控制器返回重定向可以始终重定向到调用控制器的地方
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句