服务提供者和服务容器如何使用 laravel 工作?
已发表: 2022-09-16Laravel 有时即使对于经验丰富的开发人员来说也很难处理,因为核心功能很难理解。 但确实,Web 开发很有趣。
其中一个功能是它的服务提供者,我将在这篇博客中给出详细的概述。 我还将在这篇博客中解释服务容器在 laravel 中是如何工作的。
这些比你想象的要简单。 话虽如此,让我们直接进入它。
laravel 中有哪些服务提供者?
Laravel 应用程序中的服务提供者作为引导应用程序的核心点。 因此,提供程序用于将 laravel 的基本服务注入到服务容器中,以及将我们应用程序的服务、类及其依赖项注入到服务容器中。
此示例的提供程序可以在 config/app.php 中以名为“providers”的数组形式找到。 请参考下图:
假设你想使用任何第三方服务提供者,那么你必须在服务提供者数组的配置中申请。
您可以看到一些服务提供商已经在那里运行整个应用程序,例如 Auth,它是应用程序身份验证所必需的。
如何在 laravel 中创建服务提供者?
要使用服务提供者,您必须首先创建一个。 因此,我们现在将设置一个服务提供商。 您可以使用下面提供的命令来创建您需要的任何服务提供商。
php artisan make:provider MyServiceProvider
当您运行该命令时,将在您的应用程序中创建一个服务提供者,然后您可以使用它。
之后,打开您的应用程序并导航到 providers 文件夹,您将在其中找到您的服务提供商。
在这里,您将看到两个方法,register() 和 boot()。
register() 方法
了解 register() 方法允许我们定义与服务容器的绑定这一事实非常重要。 例如,请参见下面的代码:
$this->app 是 laravel 中的一个全局变量,可以通过应用访问单例类。
单身人士是一种特质。 当您应用此 trait 时,您是在通知应用程序,在应用程序中作为参数发送的任何类都应该在整个应用程序中只有一个副本(实例)。 这意味着 MyClass 将被解析一次,并且只有一个实例,可以使用 my_class 变量访问它。
boot() 方法
boot() 方法允许您访问之前使用 register 方法注册的所有服务。 因此,您可以使用此方法将整个服务包含到您的应用程序中。

如何注册服务提供商?
由于您现在已经构建了服务提供程序,因此您需要在配置文件中注册它以完成该过程。 您必须按照下图所示的方式在此处注册:
每次运行应用程序时,所有服务提供者都将首先加载。 服务提供者是 Laravel 应用程序的主要中心,他们总是在那里帮助你运行完整的应用程序,正如之前在本博客中所讨论的那样。
laravel 中的服务容器是什么?
Service Container 是一种强大的机制,它允许我们存储在单个服务器上执行 Laravel 应用程序所需的所有绑定。
应用程序中的所有内容都可以在服务容器的帮助下绑定在一起。
如何在 laravel 中使用服务容器?
考虑以下场景:我们有一个名为 MathService 的类,它负责执行某些基本操作,如加法、乘法等。 下面提供了该类的代码。
正如您在上面看到的,有两种方法可以使用数组求和函数计算数字数组的总和,以及使用数组乘积函数将作为数组提供的所有数字相乘。
数组 sum 函数使用数组 sum 函数计算数字数组的总和,而数组乘积函数将作为数组提供的所有数字相乘。
为了使用服务提供者,我们必须首先将服务绑定到服务容器。
然而,通过这样做,我们指示 Laravel 将 MathService 容器保存在名为 MathService 的容器中,并在我们需要类的实例时返回它。 这是一个类的一次性绑定,它可以用来从我们的程序中获取任意数量的实例。
如前所述,服务容器和提供者是每个 Laravel 应用程序的关键组件。 如前所述,我们可以设计自己独特的服务提供商,也可以将第三方服务提供商整合到我们的应用程序中。
例如,如果您想在 Laravel 中使用社交名流,您只需将其复制并粘贴到应用服务提供程序文件中,然后在应用程序的任何位置使用它即可。
总结一下
在配置您的应用程序时,会使用服务提供商。 除了服务容器绑定之外,路由、中间件和事件监听器等其他关键元素也在配置文件的这一部分中注册。
服务提供程序在请求本身被处理之前执行,确保在系统处理请求之前您想要的一切都已到位并设置好。 某些服务提供者的执行定期发生,而其他服务提供者仅在需要时执行(“延迟提供者”)。
当您使用服务容器时,您可以将其用于依赖注入(例如,控制器类中的参数注入)以及绑定和解析类(例如为给定合约实例化的类)。
Web 开发可能是一个艰难的过程。 这就是为什么 webdew 拥有一支由熟练的 Web 开发人员组成的团队来帮助制作网站和应用程序并使事情变得更容易的原因。
需要网页设计和网页开发方面的帮助吗? 请与我们联系!
编辑:阿姆鲁塔