如何覆盖Laravel包函数

时间:2017-04-15 05:52:20

标签: laravel package

我使用https://github.com/artesaos/seotools包进行搜索引擎优化。 我试图覆盖位于https://github.com/artesaos/seotools/blob/master/src/SEOTools/SEOMeta.php的getCanonical函数,并将其输出为小写。你能指导我怎么做?

2 个答案:

答案 0 :(得分:3)

您可以尝试以下操作:

第1步:

创建一个扩展SEOMeta类的子类并覆盖getCanonical函数。

Class XyzSEOMeta extends SEOMeta {
    public function getCanonical () {
       // Write your logic here
    }
}

第2步:

为重写的类创建服务提供者。 bind函数的第一个参数必须与SEOMeta Facade(here)的外观访问者相同。在 seotools 包的服务提供商之后,在config/app.php中注册此外观。 :

Class XyzSEOMetaServiceProvider extends ServiceProvider {
    public function register(){
        $this->app->bind('seotools.metatags', function(){
           return new XyzSEOMeta($this->app['config']);
        })
    }
}

你们都准备好了。希望这会有所帮助。

修改

上面提到的方法只会覆盖单个类。如果要更改多个类的逻辑。最好的方法是分叉项目。更改代码并将其推送到您的分支。使用forked项目作为您的作曲家依赖项。按照链接了解如何使用私有存储库作为编写器依赖:check here

答案 1 :(得分:2)

就像我们在派生类中重写任何父类函数一样非常简单。

创建自己的类并扩展包类SEOMeta并重新声明要覆盖的函数并将逻辑放入其中。不要忘记在自定义类的上方使用包类SEOMeta的命名空间。

现在在控制器旁边使用自定义类而不是包类。

e.g 使用Path \ to \ SEOMeta;

class urclassname扩展了SEOMeta {

public function overridemethodname(){

//把你的逻辑放在这里。 }

}