2

デフォルトの PasswordBroker では、初期化後に変数「emailView」を変更できないため、独自の PasswordBroker を使用したいと考えています。

しかし、カスタム クラスで拡張することはできません。

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 に答える