Laravel - ServiceProvider против Middleware - PullRequest
1 голос
/ 02 октября 2019

У меня вопрос по поводу laravel. Я знаю, что этот вопрос может быть закрыт из-за «первичного мнения», но, может быть, вы можете дать мне несколько советов.

Я спрашиваю меня, в чем разница в использовании ServiceProviders или * 1005? * в laravel?

Я имею в виду, когда я использую ServiceProviders и когда мой выбор должен быть Middleware?

Оба выполняются при каждом запросе, не так ли? Может быть, у кого-то из вас есть примеры для вариантов использования. Заранее большое спасибо!

1 Ответ

4 голосов
/ 02 октября 2019

Существует большая разница между ServiceProviders и Middleware.

Поставщики услуг являются центральным местом всей начальной загрузки приложений Laravel. Это может включать ваше собственное приложение, а также все основные сервисы Laravel. Все это загружается через поставщиков услуг. Под начальной загрузкой я имею в виду регистрацию вещей, включая регистрацию привязок сервисных контейнеров, прослушивателей событий, middleware и даже маршрутов. Поставщики услуг являются центральным местом для настройки вашего приложения. Короче говоря, поставщики услуг используют Laravel, чтобы указать, какие классы и файлы следует загружать и использовать при запуске приложения. У поставщиков услуг есть два метода: register() и boot().

В методе register вы должны только связать вещи в сервисный контейнер . Вы никогда не должны пытаться зарегистрировать какие-либо слушатели событий, маршруты или любые другие функции в методе register. Простым примером будет регистрация вашего пользовательского класса:

public function register()
{
   $this->app->bind('App\Library\Services\CustomClass ', function ($app) {
     return new CustomClass ();
    });
}

Мы импортировали App \ Library \ Services \ CustomClass, чтобы мы могли его использовать. В методе register мы использовали метод bind контейнера службы, чтобы добавить привязку контейнера службы. Таким образом, всякий раз, когда требуется разрешить зависимость App \ Library \ Services \ CustomClass, она вызывает функцию замыкания и создает экземпляр и возвращает объект App \ Library \ Services \ CustomClass.

bootМетод вызывается после регистрации всех других поставщиков услуг, что означает, что у вас есть доступ ко всем другим службам, которые были зарегистрированы платформой. В большинстве случаев вы хотите зарегистрировать своих слушателей событий в этом методе, который будет срабатывать, когда что-то происходит, и т. Д. Одним из простых примеров может быть расширение проверки Laravel для добавления некоторых собственных полей:

public function boot()
{
    Validator::extend('my_custom_validator', function ($attribute, $value, $parameters, $validator) {
        // validation logic goes here...
 }

Более подробную информацию о поставщиках услуг можно найти в официальной документации .

С другой стороны, middleware предоставляет удобный механизм фильтрации HTTP-запросов, поступающих в ваше приложение. Например, Laravel включает промежуточное программное обеспечение, которое проверяет подлинность пользователя вашего приложения. Если пользователь не аутентифицирован, промежуточное программное обеспечение перенаправит пользователя на экран входа в систему. Однако, если пользователь прошел аутентификацию, промежуточное программное обеспечение разрешит дальнейшее выполнение запроса в приложении:

public function handle($request, Closure $next)
{
   if (Auth::check()) {
      // The user is logged in, do something...
   }else{
      // The user is not logged in, do something else...
}

Более подробную информацию о промежуточном программном обеспечении можно найти в официальной документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...