将Laravel Service Container用于第三方API

时间:2017-10-30 04:05:37

标签: php laravel rest api laravel-5

我正在尝试正确使用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');
    }
}

1 个答案:

答案 0 :(得分:0)

您的使用没有错。但是,这种用法违背了依赖注入。您不需要使用自定义服务提供商。但是您可以使用Laravel的类注册注入RestClient。

以下是Laravel的文档中的示例。您可以在此处设置RestClient,也可以将其注入RestApiService。

LocalDate threeten = LocalDate.now();
JulianCalendar jcal = PlainDate.from(threeten).transform(JulianCalendar.axis());