Laravelのパスワードブローカー内で使用される関数をオーバーライドする方法を知っている人はいますか?私はドキュメントを知っています:
https://laravel.com/docs/5.3/passwords#resetting-views
ビューやいくつかの表面レベルのものなどについて何をすべきかについての情報を提供しますが、それは実際にはまったく明確ではないか、おそらく私はそれを十分に読んでいません。
_ResetsPasswords.php
_トレイトをオーバーライドする方法はすでに知っていますが、Password::broker()
の機能をオーバーライドするのはの次のレイヤーです。
さらに必要な情報があれば、親切に提供できます。
前もって感謝します。
私は同じ問題に直面しなければならず、PasswordBroker関数のいくつかをオーバーライドする必要がありました。 Webで多くの調査を行い、多くの試みが失敗した後、私は次の実装に行き着きました。
CustomPasswordResetServiceProviderをApp\Providers内に作成しました。ここで、CustomPasswordBrokerManagerインスタンスを登録しました。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\CustomPasswordBrokerManager;
class CustomPasswordResetServiceProvider extends ServiceProvider{
protected $defer = true;
public function register()
{
$this->registerPasswordBrokerManager();
}
protected function registerPasswordBrokerManager()
{
$this->app->singleton('auth.password', function ($app) {
return new CustomPasswordBrokerManager($app);
});
}
public function provides()
{
return ['auth.password'];
}
}
config/app.phpコメントアウト行://Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
そして追加:App\Providers\CustomPasswordResetServiceProvider::class,
App\Servicesフォルダー内にCustomPasswordBrokerManagerを作成し、次の場所にあるデフォルトのPasswordBrokerManagerのコンテキストをコピーしました。
Illuminate\Auth\Passwords\PasswordBrokerManager.php
次に、関数resolveを変更して、私のCustomPasswordProviderクラスのインスタンスを返します。
protected function resolve($name)
{
$config = $this->getConfig($name);
if (is_null($config)) {
throw new InvalidArgumentException("Password resetter [{$name}] is not defined.");
}
return new CustomPasswordBroker(
$this->createTokenRepository($config),
$this->app['auth']->createUserProvider($config['provider'])
);
}
最後に、App\Servicesフォルダー内に、デフォルトを拡張するCustomPasswordBrokerクラスを作成しましたPasswordBroker次の場所にあります。
Illuminate\Auth\Passwords\PasswordBrokerし、必要な機能を上書きしました。
use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;
class CustomPasswordBroker extends BasePasswordBroker
{
// override the functions that you need here
}
これが最良の実装であるかどうかはわかりませんが、私にとってはうまくいきました。
答えのステップ1と3にはいくつか欠けているものがあります https://stackoverflow.com/a/42855948/2311074
ステップ1
おそらく最も安全な方法は、クラスをIlluminate\Auth\Passwords\PassswordResetServiceProvider.php
からApp\Provider\CustomPasswordResetServiceProvider
にコピーして変更することです。
namespace App\Providers;
への名前空間CustomPasswordResetServiceProvider
へのクラス名use App\Services\CustomPasswordBrokerManager;
を上部に追加しますregisterPasswordBroker
名前をPasswordBrokerManager
からCustomPasswordBrokerManager
に変更しますステップ2。
Resolveメソッドを変更する以外に、次のことも行います。
namespace App\Services;
に変更しますuse Illuminate\Auth\Passwords\DatabaseTokenRepository;
を一番上に追加しますCustomPasswordBrokerManager
に変更します