laravel7覆盖供应商软件包类

时间:2020-06-14 15:23:29

标签: php laravel-7

我对这个服务容器一无所知。

只需寻找一种简单的方法来覆盖Captcha类的getView()方法。

我的想法是创建一个扩展captcha类的新类:

<?php

namespace App\Http\Helpers\Captcha;

use Igoshev\Captcha\Captcha\Storage\StorageInterface;
use Igoshev\Captcha\Captcha\Generator\GeneratorInterface;
use Igoshev\Captcha\Captcha\Code\CodeInterface;

class CaptchaNew extends Igoshev\Captcha\Captcha
{
    /**
     * Get html image tag.
     *
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function getView()
    {
        //new code...
    }
}

AppServiceProvider方法下的register内,使用:

    $loader = AliasLoader::getInstance();

    $loader->alias('App\Http\Helpers\Captcha\CaptchaNew', 'Igoshev\Captcha\Captcha');

我也已经尝试过boot方法,但是也没有用。重写类的最佳方法是什么?也提供了一个“ serviceProvider”,但我想使事情保持简单,并且我一般不了解serviceProviders。

1 个答案:

答案 0 :(得分:0)

您可以在下面尝试这种方式来注册您的服务,而应使用绑定功能。 在AppServiceProvider中的register函数下,用下面的示例代码替换您的函数。但是请注意,绑定函数的第一个参数必须与供应商库的外观访问器相同(在本例中为\ Igoshev \ Captcha \ Captcha \ Captcha :: class,您可以看看here)。在软件包的服务提供者之后,在config / app.php中注册此外观:

$this->app->bind(\Igoshev\Captcha\Captcha\Captcha::class, function(){
     return new CaptchaNew($this->app['config']);
})