我正在尝试正确使用Laravel的服务容器来实例化与第三方API的连接,并在我的控制器中使用它。下面我将我的API连接添加到Laravel的AppServiceProvider的register方法中。然后在我的控制器中,在构造函数内部,我提供了一个连接句柄,可以在需要连接的任何地方在Controller内自由使用。此示例是否演示了服务容器的最佳用途?我应该用'singleton'替换我对'bind'的引用吗?
use App\Http\Clients\RestClient;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return RestClient
*/
public function register()
{
$this->app->bind(RestClient::class, function($app)
{
$this->api = new RestClient();
$this->api->setUrl(getenv('API_REST_URL'))
->setUsername(getenv('API_USERNAME'))
->setPassword(getenv('API_PASSWORD'))
->connect();
return $this->api;
});
}
}
class LoginController extends Controller
{
public function __construct(RestClient $api)
{
$this->api = $api;
}
public function postLogin()
{
$results = $this->api->search('Users');
}
}
答案 0 :(得分:0)
您的使用没有错。但是,这种用法违背了依赖注入。您不需要使用自定义服务提供商。但是您可以使用Laravel的类注册注入RestClient。
以下是Laravel的文档中的示例。您可以在此处设置RestClient,也可以将其注入RestApiService。
LocalDate threeten = LocalDate.now();
JulianCalendar jcal = PlainDate.from(threeten).transform(JulianCalendar.axis());