Laravel 5将其他对象绑定到合同

时间:2015-02-10 11:29:55

标签: laravel-5

我开始使用Laravel 5并试图了解合同,但我仍然对它们有一些疑问。

例如,我想更改Illuminate \ Contracts \ Auth \ PasswordBroker合约(在App \ Http \ Controllers \ Auth \ PasswordController中使用)

合同是一个接口,但不知何故,Laravel知道哪个实现属于该合同。

我想将实现更改为自定义实现。

但是加载我的自定义PasswordBroker类的正确方法是什么?

  1. 我应该在AppServiceProvider中绑定我的自定义类吗?

        $this->app->bind(
        'Illuminate\Contracts\Auth\PasswordBroker',
        'App\Services\MyPasswordBroker'
    );
    

1 个答案:

答案 0 :(得分:1)

Laravel本身绑定默认实现在哪里?

它在'Illuminate/Foundation/Application.php'

'auth.password'        => ['Illuminate\Auth\Passwords\PasswordBroker', 'Illuminate\Contracts\Auth\PasswordBroker'],

我可以覆盖默认绑定吗?

根据official documentations:是的。

  

通过覆盖此绑定,您可以在自己的应用程序中轻松扩展和覆盖此类。

但请记住在config / app.php中替换原始服务提供程序

  

请注意,此类扩展了HashServiceProvider,而不是默认的ServiceProvider基类。扩展服务提供者后,将config / app.php配置文件中的HashServiceProvider替换为扩展提供者的名称。

您的案例

因此,在您的情况下,您需要扩展'Illuminate \ Auth \ Passwords \ PasswordResetServiceProvider'以保留服务提供商中发生的其他事情。

查看default service provider

如果您有其他问题,请告诉我。