Существует большая разница между 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...
}
Более подробную информацию о промежуточном программном обеспечении можно найти в официальной документации .