2016-03-29 37 views
2

私は自分のPasswordBrokerを使いたいのですが、デフォルトの変数 "emailView"を初期化した後に変更することはできません。LaravelでPasswordBrokerを拡張するには?

しかし私はカスタムクラスでそれを拡張することはできません。

Class App\Http\Controllers\Auth\MyPasswordBroker cannot 
    extend from interface Illuminate\Contracts\Auth\PasswordBroker 

これは私のコードです:

<?php namespace App\Http\Controllers\Auth; 
use Illuminate\Support\Facades\Password; 
use Illuminate\Contracts\Auth\PasswordBroker; 


class MyPasswordBroker extends PasswordBroker { 
    public function setEmailView($view) { 
     $this->emailView = $view; 
    } 
} 

答えて

1

あなたはインターフェースを "拡張" することはできません。インタフェースは、インタフェースを継承するすべてのクラスが一連の関数を実装するという制約にすぎません。詳細については、Interfaces and abstract class inheritance, implementation in extended classesを参照してください。あなたが本当に欲しい

は、implementsキーワードなので、

class MyPasswordBroker implements PasswordBroker { 
    public function setEmailView($view) { 
     $this->emailView = $view; 
    } 
} 

は、あなたが実装する必要がある機能のリストについては、https://laravel.com/api/5.0/Illuminate/Contracts/Auth/PasswordBroker.htmlを参照してください。

+0

この実装を使用すると、 'Target [Illuminate \ Contracts \ Auth \ UserProvider]はインスタンス化できません.'と表示されます:/ – Kalzem

3

だから、あなたはこの場合、インターフェイスからの拡張ではなく、インターフェイスからの拡張(Laravel-speakの契約)を行い、それをコンテナにバインドします。実装は次のようになり、次のとおりです。

<?php 

namespace App\Http\Controllers\Auth; 

use Illuminate\Support\Facades\Password; 
use Illuminate\Auth\Passwords\PasswordBroker; 

class MyPasswordBroker extends PasswordBroker 
{ 
    public function setEmailView($view) 
    { 
     $this->emailView = $view; 
    } 
} 

次に、あなたのAppServiceProviderregister方法では、あなたがこれはむしろLaravelの独自の実装よりも、契約に実装を登録します

$this->app->bind(\Illuminate\Contracts\Auth\PasswordBroker::class, \App\Http\Controllers\Auth::class) 

を置きます。

+0

レジスタの部分については、' Illuminate \ Contracts \ Auth \ PasswordBroker' – Kalzem

+0

AppServiceProviderの登録関数に追加しないと、 'Target [Illuminate \ Contracts \ Auth \ UserProvider]がインスタンス化できません。 MyPasswordBrokerを非常に特殊なケースで使用し、残りのサーバーのDefault PasswordBrokerで引き続き使用したいだけです。 – Kalzem

+0

申し訳ありません、それは 'register'ではなく' bind'でなければなりません。 – Phroggyy

関連する問題