如何在Laravel中扩展PasswordBroker


How to extend PasswordBroker in Laravel?

我想使用我自己的PasswordBroker,因为默认的PasswordBroker在初始化后无法修改其变量"emailView"。

但我不能在自定义类中扩展它。

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;
    }
}

因此,在这种情况下,您想要做的是从类而不是接口(Laravel中的Contract)进行扩展,然后将其绑定到容器。实现如下所示:

<?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方法中,您将放置

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

这将把您的实现注册到合同中,而不是Laravel自己的实现。

不能"扩展"接口。接口只是一个约束,表示任何继承接口的类都将实现一组函数。有关更多信息,请参阅接口和抽象类继承,扩展类中的实现。

你真正想要的是implements关键字,所以

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

请参阅https://laravel.com/api/5.0/Illuminate/Contracts/Auth/PasswordBroker.html以获取需要实现的函数列表。