서비스 제공자 - 라라벨

Laravel의 서비스 공급자에 대해 설명하고 이 기능의 중요성과 프로젝트에서 이를 사용하는 방법을 설명하는 이 기사https://laravel-news.com/service-providers를 찾게 되어 기쁩니다. 그것을 탐구하는 것이 낫지 만 기사의 주요 사항에 대해 이야기하겠습니다.

Laravel에 포함된 기본 서비스 공급자부터 시작하겠습니다. 이들은 모두 app/Providers 폴더에 있습니다.
  • 앱 서비스 공급자
  • 인증 서비스 공급자
  • 브로드캐스트 서비스 공급자
  • 이벤트 서비스 공급자
  • RouteServiceProvider

  • 해당 메소드 내부boot()에서 인증, 이벤트, 경로 등 섹션 중 하나와 관련된 모든 코드를 작성할 수 있습니다. 즉, 서비스 공급자는 일부 전역 기능을 등록하는 클래스일 뿐입니다.

    class RouteServiceProvider extends ServiceProvider
    {
        public const HOME = '/dashboard';
    
        public function boot()
        {
            $this->configureRateLimiting();
    
            $this->routes(function () {
                Route::prefix('api')
                    ->middleware('api')
                    ->group(base_path('routes/api.php'));
    
                Route::middleware('web')
                    ->group(base_path('routes/web.php'));
            });
        }
    
        protected function configureRateLimiting()
        {
            RateLimiter::for('api', function (Request $request) {
                return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
            });
        }
    }
    


    AppServiceProvider에 코드를 추가하는 인기 있는 예 중 하나는 Eloquent에서 지연 로딩을 비활성화하는 것입니다. 그렇게 하려면 boot() 메서드에 두 줄만 추가하면 됩니다.

    // app/Providers/AppServiceProvider.php
    use Illuminate\Database\Eloquent\Model;
    
    public function boot()
    {
        Model::preventLazyLoading(! $this->app->isProduction());
    }
    


    어떤 공급자가 로드됩니까? config/app.php 배열에 정의되어 있습니다.

    return [
    
        // ... other configuration values
    
        'providers' => [
    
            /*
             * Laravel Framework Service Providers...
             */
            Illuminate\Auth\AuthServiceProvider::class,
            Illuminate\Broadcasting\BroadcastServiceProvider::class,
    
            // ... other framework providers from /vendor
            Illuminate\Validation\ValidationServiceProvider::class,
            Illuminate\View\ViewServiceProvider::class,
    
            /*
             * PUBLIC Service Providers - the ones we mentioned above
             */
            App\Providers\AppServiceProvider::class,
            App\Providers\AuthServiceProvider::class,
            // App\Providers\BroadcastServiceProvider::class,
            App\Providers\EventServiceProvider::class,
            App\Providers\RouteServiceProvider::class,
    
        ],
    
    ];
    


  • 맞춤형 서비스 제공자 만들기

  • 이 명령으로 생성할 수 있습니다.

    php artisan make:provider ViewServiceProvider
    


    boot() 내부에 Blade 지시문 코드 추가

    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use Illuminate\Support\Facades\Blade;
    
    class ViewServiceProvider extends ServiceProvider
    {
        /**
         * Register services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    
        /**
         * Bootstrap services.
         *
         * @return void
         */
        public function boot()
        {
            Blade::directive('datetime', function ($expression) {
                return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
            });
        }
    } 
    


    실행하려면 위에서 언급한 대로 이 새 공급자를 config/app.php의 공급자 배열에 추가해야 합니다.

    return [
        // ... other configuration values
    
        'providers' => [
    
            App\Providers\AppServiceProvider::class,
            App\Providers\AuthServiceProvider::class,
            // App\Providers\BroadcastServiceProvider::class,
            App\Providers\EventServiceProvider::class,
            App\Providers\RouteServiceProvider::class,
    
            // Add your provider here
            App\Providers\ViewServiceProvider::class,
        ],
    ];
    


    그는 요점에 대해 이야기했으며 소스를 방문하여 더 깊이 파고들고 오픈 소스 프로젝트에서 몇 가지 예를 배우기를 바랍니다. 즐거운 시간 되셨기를 바랍니다.

    좋은 웹페이지 즐겨찾기