2017-04-15 77 views

回答

3

您可以尝试以下操作:

第1步:

创建扩展SEOMeta类的子类,并覆盖getCanonical功能。

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

步骤2:

创建重写类的服务提供。 bind函数的第一个参数必须与SEOMeta Facade(check here)的Facade存取器相同。在config/app.php注册该门面后,服务提供商seotools包。 :

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

您已成功设置。希望这会有所帮助。

编辑:

以上提到的方法将只覆盖单个类。如果你想改变多个类的逻辑。最好的办法是分岔项目。更改代码并将其推送到您的分支。使用分叉的项目作为您的作曲家依赖项。按照链接了解如何使用私有存储库作为作曲家依赖项:https://getcomposer.org/doc/05-repositories.md#using-private-repositories

+0

非常感谢。你已经解释了这个方法很不错。 我遵循这种方法,仍然无法实现我的目的,看起来像它更复杂 – Mehdi

+0

** getCanonical **方法已被调用与**生成**函数行128在同一类中。我复制过去并覆盖那还没有运气。 查看更深我发现**生成**功能已被称为下面的班级线123: https://github.com/artesaos/seotools/blob/master/src/SEOTools/SEOTools。php 能否请您进一步解释一下,我要走的路我可能最终会覆盖整个包... – Mehdi

+0

我在我的视图中使用的包如下: ''{!! SEO :: generate()!!} 我在配置下有seotool.php,设置如下: '''canonical'=> null,//设置为空使用Url :: current()'' – Mehdi

2

这很简单,就像我们重写派生类中的任何父类函数一样。

创建你自己的类并扩展你的包类SEOMeta并重新声明你想重写的函数,并把你的逻辑放在里面。不要忘记在你的自定义类的上层使用你的包类SEOMeta的命名空间。

现在在您的控制器中使用您的自定义类而不是包类。

例如 使用Path \ to \ SEOMeta;

类urclassname扩展SEOMeta {

公共职能overridemethodname(){

//把UR逻辑在这里。 }

}

+0

伙计。这不是普通的班级。它是laravel的门面。 –