Laravel 服务提供商与中间件



我有一个关于拉拉维尔的问题。在拉拉维尔中使用ServiceProvidersMiddleware有什么区别?

所以我的意思是,我什么时候使用ServiceProviders,什么时候应该选择Middleware

两者都在每个请求上执行,不是吗?也许你们中的某个人有用例的例子。

服务提供者和中间件之间有很大的区别。

服务提供商是所有Laravel应用程序引导的中心位置。这可以包括您自己的应用程序,以及 Laravel 的所有核心服务。这一切都是通过服务提供商引导的。通过引导,我的意思是注册事物,包括注册服务容器绑定、事件侦听器、middleware,甚至路由。服务提供商是配置应用程序的中心位置。因此,简而言之,服务提供商用于告诉您在运行应用程序时应该加载和使用哪些类和文件。服务提供商有两种方法:register()boot()

register方法中,应仅将内容绑定到服务容器中。切勿尝试在 register 方法中注册任何事件侦听器、路由或任何其他功能。简单的例子是注册您的自定义类:

public function register()
{
$this->app->bind('AppLibraryServicesCustomClass ', function ($app) {
return new CustomClass ();
});
}

我们已经导入了App\Library\Services\CustomClass,以便我们可以使用它。在 register 方法中,我们使用服务容器的绑定方法来添加服务容器绑定。因此,每当需要解析 App\Library\Services\CustomClass 依赖项时,它都会调用 closure 函数,并实例化并返回 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...
}

有关中间件的更多信息可以在官方文档中找到。

最新更新