2017-09-15 4 views
2

は、これは私のサービスプロバイダーである:Laravel:提供されたクラスをインスタンス化するときに登録されたサービスプロバイダが呼び出されないのはなぜですか?

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\Config; 
use Illuminate\Support\ServiceProvider; 

class ESServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     $this->app->singleton('\Elastica\Search', function ($app) { 
      $client = new \Elastica\Client(array(
       'host' => env('ES_HOST'), 
       'port' => env('ES_PORT'))); 
      $search = new \Elastica\Search($client); 
      $search->addIndex(Config::get('constants.es_index'))->addType(Config::get('constants.es_type')); 
      return $search; 
     }); 
    } 
} 

var_dump()/dd()を使用して検証)呼び出されません\Elastica\Search\閉鎖(singleton()への第二のparam)のインスタンスを注入します。プロバイダは正しく登録されています - 上記のように検証されています。どうして?

答えて

2

Laravel 5.4以上の理由は、singleton()の最初のパラメータ(および類似のバインド関数)にはスラッシュを付けることができないためです。したがって、'Elastica\Search'に変更すると問題が解決されます。これは、これを実現するために、デバッグの時間について教えて取った - うまくいけば、この記事は誰か、この時間の節約になります...この変化を説明する

Laravelのウェブサイトの記事を:http://laravel-guide.readthedocs.io/en/latest/upgrade/ - Binding Classes With Leading Slashesを検索します。

関連する問題