如何在Laravel中扩展PasswordBroker?

时间:2016-03-29 17:18:38

标签: php laravel laravel-facade

我想使用自己的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;
    }
}

2 个答案:

答案 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