制作服务提供商 Laravel

Making ServiceProvider Laravel

最近在pusher实时系统上看了jeffery way的一段视频。我一切正常。我的问题是指他在视频中发表的评论。他的 route.php:

中有这段代码
        App::bind('Pusher', function($app){
        $options = array(
            'cluster' => 'eu',
            'encrypted' => true
        );
        $keys = $app['config']->get('services.pusher');
        return new Pusher($keys['public'], $keys['secret'], $keys['app_id'], $options);
    });

他评论说这应该从 routes.php 转移到服务提供商,但没有进一步详细说明。我一直在寻找服务提供商,但还不太了解。我如何正确地将此移动到服务提供商?

https://github.com/laracasts/Pusher-Lesson/blob/master/app/routes.php

最好在 Laravel 的服务提供商中注册所有服务。服务提供商位于 app/Providers 文件夹中 - Pusher 服务的定义确实应该移动到 AppServiceProvider 已经在那里 - 只需在其 register 方法中添加服务定义:

class AppServiceProvider extends ServiceProvider
{
  public function register()
  {
    $this->registerPusher();
  }

  private registerPusher() {
    $this->app->bind('Pusher', function($app){
      $options = array(
        'cluster' => 'eu',
        'encrypted' => true
    );
    $keys = $app['config']->get('services.pusher');
    return new Pusher($keys['public'], $keys['secret'], $keys['app_id'], $options);
    });
  }
}

或者如果您想将相关服务组合在一起,您可以创建一个新服务(例如 PusherServiceProvider):

class PushServiceProvider extends ServiceProvider
{
  public function register()
  {
    $this->registerPusher();
  }

  private registerPusher() {
    $this->app->bind('Pusher', function($app){
      $options = array(
        'cluster' => 'eu',
        'encrypted' => true
    );
    $keys = $app['config']->get('services.pusher');
    return new Pusher($keys['public'], $keys['secret'], $keys['app_id'], $options);
    });
  }
}

如果您决定选择第二个选项,则需要在 config/app.php 文件中注册新提供商 - 只需添加它提供商 数组的名称:

<?php

  return [
    'providers' => [
      // existing providers
      'App\Providers\PushServiceProvider'
    ],  
  ];