Php 使服务提供商拉威尔

Php 使服务提供商拉威尔,php,laravel,laravel-5,service-provider,Php,Laravel,Laravel 5,Service Provider,我最近在pusher实时系统上观看了jeffery way的视频。我一切正常。我的问题是指他在视频中发表的评论。他在route.php中有以下代码: App::bind('Pusher', function($app){ $options = array( 'cluster' => 'eu', 'encrypted' => true ); $keys = $app['con

我最近在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迁移到服务提供商,但没有进一步详细说明。我一直在找服务提供商,但还不太了解。如何正确地将此移动到服务提供商


在Laravel的服务提供商中注册所有服务是一个很好的做法。服务提供商位于app/providers文件夹中-确实应该将Pusher服务的定义移动到已经存在的AppServiceProvider文件夹中-只需在其注册方法中添加服务定义:

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'
    ],  
  ];