当前位置:Gxlcms > PHP教程 > LaravelServiceProviders问题

LaravelServiceProviders问题

时间:2021-07-01 10:21:17 帮助过:4人阅读

我的思路:

自己写了一个工具类,由于在项目的多个地方都要用到,又不想每次用到都实例化,所以想将这个工具注册到laravel的Service Container中。但是不幸的是出现了一些问题,下面直接贴上代码和我自己的思路,还请指教哪里出现问题???非常感谢!!!

第一步:首先注册容器

  1. <code>php artisan make:provider QcloudVideoServiceProvider</code>

代码如下:

  1. <code><!--?php
  2. namespace App\Providers;
  3. use App\Xiaoteng\QCVod;
  4. use Illuminate\Support\ServiceProvider;
  5. class QcloudVideoServiceProvider extends ServiceProvider
  6. {
  7. /**
  8. * Indicates if loading of the provider is deferred.
  9. *
  10. * @var bool
  11. */
  12. protected $defer = true;
  13. /**
  14. * Register the application services.
  15. *
  16. * @return void
  17. */
  18. public function register()
  19. {
  20. $this--->app->singleton('qcloud.vod', function ($app) {
  21. $glass = new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET'));
  22. return $glass->setRegion('gz');
  23. });
  24. }
  25. /**
  26. * Get the services provided by the provider.
  27. *
  28. * @return array
  29. */
  30. public function provides()
  31. {
  32. return ['qcloud.vod'];
  33. }
  34. }
  35. </code>

第二步:注册Facades

在app目录下面创建Foundation/Facades/QcloudFacades.php,代码如下:

  1. <code><!--?php
  2. namespace App\Foundation\Facades;
  3. use Illuminate\Support\Facades\Facade;
  4. class QCvodFacades extends Facade
  5. {
  6. /**
  7. * Get the registered name of the component.
  8. *
  9. * @return string
  10. */
  11. protected static function getFacadeAccessor()
  12. {
  13. return 'qcloud.vod';
  14. }
  15. }</code--></code>

第三步:注册Service

在config/app.php中注册Service Provider 和 Facades

  1. <code>providers => [
  2. //...
  3. App\Providers\QcloudVideoServiceProvider::class,
  4. ]
  5. aliases => [
  6. //...
  7. 'QCvod' => App\Foundation\Facades\QCvodFacades::class,
  8. ]</code>

第四步:调用

  1. <code>dd(ACvod::getRegion());</code>

getRegion()是工具类中的一个getter方法

问题出现了:

  1. <code>Class qcloud.vod does not exist</code>

非常感谢您耐心看完!非常感谢!

求解?

回复内容:

我的思路:

自己写了一个工具类,由于在项目的多个地方都要用到,又不想每次用到都实例化,所以想将这个工具注册到laravel的Service Container中。但是不幸的是出现了一些问题,下面直接贴上代码和我自己的思路,还请指教哪里出现问题???非常感谢!!!

第一步:首先注册容器

  1. <code>php artisan make:provider QcloudVideoServiceProvider</code>

代码如下:

  1. <code><!--?php
  2. namespace App\Providers;
  3. use App\Xiaoteng\QCVod;
  4. use Illuminate\Support\ServiceProvider;
  5. class QcloudVideoServiceProvider extends ServiceProvider
  6. {
  7. /**
  8. * Indicates if loading of the provider is deferred.
  9. *
  10. * @var bool
  11. */
  12. protected $defer = true;
  13. /**
  14. * Register the application services.
  15. *
  16. * @return void
  17. */
  18. public function register()
  19. {
  20. $this--->app->singleton('qcloud.vod', function ($app) {
  21. $glass = new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET'));
  22. return $glass->setRegion('gz');
  23. });
  24. }
  25. /**
  26. * Get the services provided by the provider.
  27. *
  28. * @return array
  29. */
  30. public function provides()
  31. {
  32. return ['qcloud.vod'];
  33. }
  34. }
  35. </code>

第二步:注册Facades

在app目录下面创建Foundation/Facades/QcloudFacades.php,代码如下:

  1. <code><!--?php
  2. namespace App\Foundation\Facades;
  3. use Illuminate\Support\Facades\Facade;
  4. class QCvodFacades extends Facade
  5. {
  6. /**
  7. * Get the registered name of the component.
  8. *
  9. * @return string
  10. */
  11. protected static function getFacadeAccessor()
  12. {
  13. return 'qcloud.vod';
  14. }
  15. }</code--></code>

第三步:注册Service

在config/app.php中注册Service Provider 和 Facades

  1. <code>providers => [
  2. //...
  3. App\Providers\QcloudVideoServiceProvider::class,
  4. ]
  5. aliases => [
  6. //...
  7. 'QCvod' => App\Foundation\Facades\QCvodFacades::class,
  8. ]</code>

第四步:调用

  1. <code>dd(ACvod::getRegion());</code>

getRegion()是工具类中的一个getter方法

问题出现了:

  1. <code>Class qcloud.vod does not exist</code>

非常感谢您耐心看完!非常感谢!

求解?

QcloudVideoServiceProvider

  1. <code>$this->app->singleton('qcloud.vod', function ($app) {
  2. return new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET'));
  3. });</code>

应该是这样了。

暂时没写过“服务提供者”和“门面”,感觉是singleton()这里要写全命名空间。

如果仅仅是作为工具类,请参考 laravel 辅助函数

composer dump-autoload

人气教程排行