有谁知道如何覆盖laravel密码代理中使用的函数?我知道文档:
https://laravel.com/docs/5.3/passwords#resetting-views
提供有关如何为视图和一些表面层次的事情做些什么的信息,但它根本不是很清楚,或者我可能没有阅读足够多次。
我已经知道如何覆盖ResetsPasswords.php
Trait但是覆盖Password::broker()
的功能是针对下一层的。
如果需要更多信息,我可以提供一些信息。
提前谢谢。
答案 0 :(得分:21)
我不得不面对同样的问题,需要覆盖一些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 中注明掉了一行:
//Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
并补充说:
App\Providers\CustomPasswordResetServiceProvider::class,
在App \ Services文件夹中创建了一个 CustomPasswordBrokerManager 并复制了位于以下位置的默认 PasswordBrokerManager 的上下文
照亮\验证\密码\ 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 类,该类扩展了位于以下位置的默认 PasswordBroker : 照亮\ Auth \ Passwords \ PasswordBroker并覆盖我需要的功能。
use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;
class CustomPasswordBroker extends BasePasswordBroker
{
// override the functions that you need here
}
不确定这是否是最好的实施方式,但它对我有用。
答案 1 :(得分:2)
答案https://stackoverflow.com/a/42855948/2311074
中的步骤1和3缺少一些内容第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