我想使用自己的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;
}
}
答案 0 :(得分:3)
所以在这种情况下你想要做的是从类扩展,而不是接口(Laravel中的契约),然后将其绑定到容器。实现如下所示:
<?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
的{{1}}方法中,您可以放置
register
这将在合同中注册您的实施,而不是Laravel自己的实施。
答案 1 :(得分:1)
您无法“扩展”界面。接口只是一个约束,表示任何继承接口的类都将实现一组函数。有关详细信息,请参阅Interfaces and abstract class inheritance, implementation in extended classes。
你真正想要的是implements关键字,所以
class MyPasswordBroker implements PasswordBroker {
public function setEmailView($view) {
$this->emailView = $view;
}
}
有关您需要实施的功能列表,请参阅https://laravel.com/api/5.0/Illuminate/Contracts/Auth/PasswordBroker.html。