Ответ 1
Мне пришлось столкнуться с той же проблемой, что и для переопределения некоторых функций PasswordBroker. После большого расследования в Интернете и многих неудачных попыток сделать это я закончил следующую реализацию:
-
Создал 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,
-
Внутри приложения \Services папка создала CustomPasswordBrokerManager и скопировала контекст по умолчанию PasswordBrokerManager, расположенный по адресу:
Осветить\Auth\Пароли\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 }
Не уверен, что это лучшая реализация, но это сработало для меня.