【问题标题】:How to override a Laravel package function如何覆盖 Laravel 包函数
【发布时间】:2017-09-11 08:57:55
【问题描述】:

我正在使用 https://github.com/artesaos/seotools 包进行 seo。 我正在尝试覆盖位于 https://github.com/artesaos/seotools/blob/master/src/SEOTools/SEOMeta.php 的 getCanonical 函数并将其输出为小写。你能指导我怎么做吗?

【问题讨论】:

    标签: laravel package


    【解决方案1】:

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

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

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

    例如

    use Path\to\SEOMeta;
    
    class urclassname extends SEOMeta{
    
        public function overridemethodname(){
    
            // put ur logic here.
        }
    
    }
    

    【讨论】:

    • 老兄。这不是任何普通的课程。它是 laravel 的门面。
    【解决方案2】:

    您可以尝试以下操作:

    第 1 步:

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

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

    第 2 步:

    为被覆盖的类创建服务提供者。 bind 函数的第一个参数必须与SEOMeta Facade (check here) 的外观访问器相同。在 seotools 包的服务提供者之后,在config/app.php 注册这个门面。 :

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

    你已经准备好了。希望这会有所帮助。

    编辑:

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

    【讨论】:

    • 非常感谢。您已经很好地解释了这种方法。我按照这个方法还是没能达到我的目的,看起来有点复杂
    • getCanonical 方法已在 generate 函数第 128 行中的同一类中调用。我复制过去并覆盖它仍然没有运气。深入研究后,我发现 generate 函数已在第 123 行下面的类中被调用:github.com/artesaos/seotools/blob/master/src/SEOTools/… 你能否进一步解释一下,我要走的路我可能最终会覆盖整个包......
    • 我在我的视图中使用的包如下:{!! SEO::generate() !!},我在配置下有 seotool.php,设置如下:'canonical' => null, // Set null for using Url::current()
    • 如果是这种情况,最好的选择是创建项目的分支。并在您的作曲家中使用分叉项目。
    • @PankitGami。谢谢它按预期工作。但是你能解释一下当我们绑定合约类时它是如何覆盖方法的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2015-04-13
    • 2018-11-09
    • 2023-01-01
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多