我想使用我自己的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;
}
}
然后,在AppServiceProvider
的register
方法中,您将放置
$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以获取需要实现的函数列表。