내 생각:
프로젝트의 여러 곳에서 사용될 도구 클래스를 직접 작성했고, 사용할 때마다 인스턴스화하고 싶지 않기 때문에 이 도구를 Laravel의 서비스 컨테이너에 등록하려고 합니다. 하지만 안타깝게도 몇 가지 문제가 있습니다. 아래에 직접 코드와 아이디어를 붙여넣겠습니다. 문제가 있는 곳을 알려주세요. ? ? 매우 감사합니다! ! !
1단계: 먼저 컨테이너 등록
<code>php artisan make:provider QcloudVideoServiceProvider</code>
코드는 다음과 같습니다.
<code><?php namespace App\Providers; use App\Xiaoteng\QCVod; use Illuminate\Support\ServiceProvider; class QcloudVideoServiceProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = true; /** * Register the application services. * * @return void */ public function register() { $this->app->singleton('qcloud.vod', function ($app) { $glass = new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET')); return $glass->setRegion('gz'); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return ['qcloud.vod']; } } </code>
2단계: 외관 등록
앱 디렉토리 아래에 Foundation/Facades/QcloudFacades.php를 생성합니다. 코드는 다음과 같습니다.
<code><?php namespace App\Foundation\Facades; use Illuminate\Support\Facades\Facade; class QCvodFacades extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'qcloud.vod'; } }</code>
3단계: 서비스 등록
config/app.php에 서비스 제공업체 및 Facade를 등록하세요
<code>providers => [ //... App\Providers\QcloudVideoServiceProvider::class, ] aliases => [ //... 'QCvod' => App\Foundation\Facades\QCvodFacades::class, ]</code>
4단계: 전화
<code>dd(ACvod::getRegion());</code>
getRegion()은 도구 클래스의 getter 메소드입니다.
문제 발생:
<code>Class qcloud.vod does not exist</code>
인내심을 갖고 읽어주셔서 진심으로 감사드립니다! 매우 감사합니다!
해결해주세요?
내 생각:
프로젝트의 여러 곳에서 사용될 도구 클래스를 직접 작성했고, 사용할 때마다 인스턴스화하고 싶지 않기 때문에 이 도구를 Laravel의 서비스 컨테이너에 등록하려고 합니다. 하지만 안타깝게도 몇 가지 문제가 있습니다. 아래에 직접 코드와 아이디어를 붙여넣겠습니다. 문제가 있는 곳을 알려주세요. ? ? 매우 감사합니다! ! !
1단계: 먼저 컨테이너 등록
<code>php artisan make:provider QcloudVideoServiceProvider</code>
코드는 다음과 같습니다.
<code><?php namespace App\Providers; use App\Xiaoteng\QCVod; use Illuminate\Support\ServiceProvider; class QcloudVideoServiceProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = true; /** * Register the application services. * * @return void */ public function register() { $this->app->singleton('qcloud.vod', function ($app) { $glass = new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET')); return $glass->setRegion('gz'); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return ['qcloud.vod']; } } </code>
2단계: 외관 등록
앱 디렉토리 아래에 Foundation/Facades/QcloudFacades.php를 생성합니다. 코드는 다음과 같습니다.
<code><?php namespace App\Foundation\Facades; use Illuminate\Support\Facades\Facade; class QCvodFacades extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'qcloud.vod'; } }</code>
3단계: 서비스 등록
config/app.php에 서비스 제공업체 및 Facade를 등록하세요
<code>providers => [ //... App\Providers\QcloudVideoServiceProvider::class, ] aliases => [ //... 'QCvod' => App\Foundation\Facades\QCvodFacades::class, ]</code>
4단계: 전화
<code>dd(ACvod::getRegion());</code>
getRegion()은 도구 클래스의 getter 메소드입니다.
문제 발생:
<code>Class qcloud.vod does not exist</code>
인내심을 갖고 읽어주셔서 진심으로 감사드립니다! 매우 감사합니다!
해결해주세요?
QcloudVideoServiceProvider
<code>$this->app->singleton('qcloud.vod', function ($app) { return new QCVod(config('QCLOUD_KEY'), config('QCLOUD_SECRET')); });</code>
그러면 됩니다.
아직 "service Provider"와 "facade"를 작성하지 않았습니다. singleton()
여기에 전체 네임스페이스를 작성해야 할 것 같습니다.
그냥 툴 클래스라면 라라벨 보조기능을 참고하세요
composer dump-autoload