2

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

2 回答 2

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

然后,在你AppServiceProviderregister方法中,你会放置

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

这会将你的实现注册到合约中,而不是 Laravel 自己的实现。

于 2016-03-29T19:44:20.160 回答
1

您不能“扩展”接口。接口只是一个约束,它表示任何继承接口的类都将实现一组功能。有关详细信息,请参阅接口和抽象类继承,扩展类中的实现。

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

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

有关您需要实现的功能列表,请参阅https://laravel.com/api/5.0/Illuminate/Contracts/Auth/PasswordBroker.html 。

于 2016-03-29T17:29:44.883 回答