AppServiceProvider.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace App\Providers;
  3. use Illuminate\Support\ServiceProvider;
  4. use Laravel\Cashier\Cashier;
  5. use GuzzleHttp\Client as HttpClient;
  6. use App\MicroApi\Services\UserService;
  7. use Illuminate\Support\Facades\Auth;
  8. use App\Services\Auth\MicroUserProvider;
  9. use App\Services\Auth\JwtGuard;
  10. class AppServiceProvider extends ServiceProvider
  11. {
  12. /**
  13. * Bootstrap any application services.
  14. *
  15. * @return void
  16. */
  17. public function boot()
  18. {
  19. Cashier::useCurrency(config('cart.currency'), config('cart.currency_symbol'));
  20. // 扩展 User Provider
  21. Auth::provider('micro', function($app, array $config) {
  22. // 返回一个Illuminate\Contracts\Auth\UserProvider实例...
  23. return new MicroUserProvider($config['model']);
  24. });
  25. // 扩展 Auth Guard
  26. Auth::extend('jwt', function($app, $name, array $config) {
  27. // 返回一个Illuminate\Contracts\Auth\Guard实例...
  28. return new JwtGuard(Auth::createUserProvider($config['provider']), $app->make('request'));
  29. });
  30. }
  31. /**
  32. * Register any application services.
  33. *
  34. * @return void
  35. */
  36. public function register()
  37. {
  38. // 以单例模式绑定 HttpClient 实例到 App 容器
  39. $this->app->singleton('HttpClient', function ($app) {
  40. return new HttpClient([
  41. 'base_uri' => config('services.micro.api_gateway'),
  42. 'timeout' => config('services.micro.timeout'),
  43. 'headers' => [
  44. 'Content-Type' => 'application/json'
  45. ]
  46. ]);
  47. });
  48. // 以单例模式绑定用户服务到服务容器
  49. $this->app->singleton('microUserService', function ($app) {
  50. return new UserService();
  51. });
  52. }
  53. }