有谁知道如何覆盖 laravel 密码代理中使用的功能?我知道文档:
https://laravel.com/docs/5.3/passwords#resetting-views
提供有关如何处理诸如视图和一些表面级别的事情的信息,但实际上根本不清楚,或者我可能没有阅读足够多的时间。
我已经知道如何覆盖ResetsPasswords.php
Trait,但覆盖的Password::broker()
是下一层的功能。
如果需要更多信息,我可以提供一些。
先感谢您。
有谁知道如何覆盖 laravel 密码代理中使用的功能?我知道文档:
https://laravel.com/docs/5.3/passwords#resetting-views
提供有关如何处理诸如视图和一些表面级别的事情的信息,但实际上根本不清楚,或者我可能没有阅读足够多的时间。
我已经知道如何覆盖ResetsPasswords.php
Trait,但覆盖的Password::broker()
是下一层的功能。
如果需要更多信息,我可以提供一些。
先感谢您。
我不得不面对同样的问题,需要重写一些 PasswordBroker 函数。经过对网络的大量调查和许多失败的尝试,我最终实现了以下实现:
在 App\Providers 中创建了一个CustomPasswordResetServiceProvider ,我在其中注册了一个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 中注释掉 line:
//Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
并添加:
App\Providers\CustomPasswordResetServiceProvider::class,
在 App\Services 文件夹中创建了一个CustomPasswordBrokerManager并复制了位于以下位置的默认PasswordBrokerManager
的上下文:
Illuminate\Auth\Passwords\PasswordBrokerManager.php
然后修改了函数解析以返回我的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类,它扩展了位于Illuminate\Auth\Passwords\PasswordBroker 的默认PasswordBroker
并覆盖了我需要的函数。
use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;
class CustomPasswordBroker extends BasePasswordBroker
{
// override the functions that you need here
}
不确定这是否是最好的实现,但它对我有用。
答案https://stackoverflow.com/a/42855948/2311074中的第 1 步和第 3 步缺少一些内容
步骤1
可能最安全的方法是简单地将类从Illuminate\Auth\Passwords\PassswordResetServiceProvider.php
to复制App\Provider\CustomPasswordResetServiceProvider
并更改:
namespace App\Providers;
CustomPasswordResetServiceProvider
use App\Services\CustomPasswordBrokerManager;
到顶部registerPasswordBroker
重命名 PasswordBrokerManager
为CustomPasswordBrokerManager
第2步。
除了更改解析方法外,还可以执行以下操作:
namespace App\Services;
use Illuminate\Auth\Passwords\DatabaseTokenRepository;
到顶部CustomPasswordBrokerManager