2017-03-12 15 views
2

私のPHPの知識に基づいて、Laravelのファサードがどのように機能するのかわからず、Storage facadeを拡張して新しい機能を追加しようとしました。Laravel Storageファサードを拡張するには?

class MyStorageFacade extends Facade { 
    /** 
    * Get the binding in the IoC container 
    * 
    * @return string 
    */ 
    protected static function getFacadeAccessor() 
    { 
     return 'MyStorage'; // the IoC binding. 
    } 
} 

ながら起動するサービスプロバイダ:

私はこのコードを持っている

$this->app->bind('MyStorage',function($app){ 
    return new MyStorage($app); 
}); 

そして、ファサードは、次のとおりです。

class MyStorage extends \Illuminate\Support\Facades\Storage{ 
} 

それを使用して:

use Namespace\MyStorage\MyStorageFacade as MyStorage; 
MyStorage::disk('local'); 

を、私はこのエラーを取得する:

FatalThrowableError in Facade.php line 237: Call to undefined method Namespace\MyStorage\MyStorage::disk()

またMyStorageフォームIlluminate\Filesystem\Filesystemを拡張しようとしましたし、他の方法で同じエラーを得た:

BadMethodCallException in Macroable.php line 74: Method disk does not exist.

答えて

1

あなたのMyStorageはクラスでは、FilesystemManagerないストレージファサードクラスを拡張する必要があります。

class MyStorage extends \Illuminate\Filesystem\FilesystemManager { 
} 
0

ファサードは、スタティック・コールFacade::methodresolove("binding")->method(それ以下)に変換する便利なクラスです。ファイルシステムから拡張し、IoCに登録し、ファサードをそのまま維持し、ファサードを静的に使用する必要があります。

class MyStorageFacade extends Facade {  
    protected static function getFacadeAccessor() 
    { 
     return 'MyStorage'; // This one is fine 
    } 
} 

class MyStorage extends Illuminate\Filesystem\FilesystemManager { 
} 

$this->app->bind('MyStorage',function($app){ 
    return new MyStorage($app); 
}); 

MyStorageFacade::disk(); //Should work. 
+0

私が述べたように、私はそれをテストし、このエラーを取得しました:Macroable.phpライン74で 'BadMethodCallExceptionを:メソッドのディスクが – Omid

+0

@Omid' disk'は本当にどこにもかかわらず、定義されていないがexist.'しません。 – apokryfos

+0

その場合、 '\ Storage :: disk( 'local')'はどのように動作しますか? @apokryfos – Omid

関連する問題