Laravel 5.7(服务容器和服务提供商)

时间:2019-01-03 08:18:45

标签: laravel laravel-5.7

需要通过示例了解laravel服务容器和服务提供者。。在此先感谢

3 个答案:

答案 0 :(得分:0)

  

服务容器是您注册服务的地方。

     

服务提供商通过将服务添加到容器中来提供服务。

通过 Laracast 引用。小心了解。

服务容器https://laracasts.com/series/laravel-from-scratch-2017/episodes/24

服务提供商https://laracasts.com/series/laravel-from-scratch-2017/episodes/25

答案 1 :(得分:0)

您好,欢迎来到stackoverflow!

服务容器是我们的应用程序bindings的存储位置。 服务提供商是我们将绑定注册到服务容器的类。在较旧的Laravel版本中,我们没有这些提供程序,人们总是在问将绑定放在何处。答案令人困惑。 “最有意义的地方。”!然后,Laravel引入了这些服务提供商 Providers 目录,以方便人们使用。

为了易于理解,我将提供一个基本示例:

interface AcmeInterface {
    public function sayHi();
}

class AcmeImplementation implements AcmeInterface {
    public function sayHi() {
        echo 'Hi!';
    }
}

// Service Container
$app = new \Illuminate\Database\Container;

// Some required stuff that are also service providing lines 
// for app config and app itself.

$app->singleton('app', 'Illuminate\Container\Container');
$app->singleton('config', 'Illuminate\Config\Repository');

// Our Example Service Provider
$app->bind(AcmeInterface::class, AcmeImplementation::class);

// Example Usage:
$implementation = $app->make(AcmeInterface::class);
$implementation->sayHi();

如您所见;

  • 首先,我们创建容器(在现实生活中,Laravel在bootstrap/app.php内为我们完成了此操作)
  • 然后我们注册我们的服务(在我们的 Service Provider 类和config/app.php内部)
  • 最后,我们获得并使用我们的注册服务。 (在控制器,模型,服务内部。)

答案 2 :(得分:0)

  

服务提供商

服务提供者是所有Laravel应用程序引导的中心位置。您自己的应用程序以及Laravel的所有核心服务都是通过服务提供商引导的。

因此,每当要将服务注入其他服务时,都可以将其添加到构造函数或方法中,并由服务提供商自动从服务容器中注入。

让我们看一个简单的例子来理解它。

class MyDemoClass
{
public function __construct(AwesomeService $awesome_service)
  {
    $awesome_service->doAwesomeThing();
  }
}
  

服务容器

我将通过一个现实世界来简化它 假设您的应用程序需要Facebook的PHP SDK来访问Facebook的API,并且您的控制器是这样的:

<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
use Facebook\Facebook;
class FacebookApiAccessController extends Controller
{
    protected $facebook;
    public function __construct(Facebook\Facebook $facebook)
    {
        $this->facebook = $facebook;
    }
    //.. action methods here
}

现在,您需要告诉Service Container如何构造Facebook\Facebook的实例。

<?php
$container->singleton('Facebook\Facebook', function() {
  return new \Facebook\Facebook([
    'app_id' => config('services.facebook.app_id'),
    'app_secret' => config('services.facebook.app_secret'),
    'default_graph_version' => 'v2.10',
  ]);
});

注意,我将方法称为“单一”而不是“绑定”。唯一的区别是,缓存了用“单例”注册的服务,随后的解析服务的调用返回了缓存的服务。

  

最后,我建议您阅读this article以了解并了解   服务容器,依赖注入和   反思。