如何在Laravel 5.8应用程序中扩展Laravel包



我是Laravel的新手,并感谢您描述如何扩展供应商文件夹中的Laravel软件包,如果我更新软件包,则不会受到影响。

我将尝试创建一个简短的指南,如果需要,我们将扩展。

我建议将所有文件放入单独的目录/名称空间中。如果您决定以后创建自己的作曲家包。

,您将受益于此。

举例来说,我将扩展Bumbummen99/ShoppingCart软件包,该软件包叉了Great Gloudemans/Shoppingcart,为Laravel 5.8和一些较小的功能提供了支持。您当然会首先需要安装该软件包:

composer require bumbummen99/shoppingcart
  • 首先制作几个文件夹。您可以在文件夹/类中使用任何名称,这是我使用的,相对于项目root:

app/Repositories/ExtendedCart
app/Repositories/ExtendedCart/Facades

  • 创建文件

app/Repositories/ExtendedCart/ExtendedCart.php

此类将扩展软件包的主要类:

namespace AppRepositoriesExtendedCart;
use GloudemansShoppingcartCart;
class ExtendedCart extends Cart
{
    public function myMethod(){
        return 'myMethod';
    }
}
  • 然后成为您的服务提供商。创建文件:

app/Repositories/ExtendedCart/ExtendedCartServiceProvider.php
(我不使用工匠作为生成/移动提供者会产生错误的名称空间(

这是您的服务提供商内容,在这里您引用了扩展包装类的类。注意您覆盖原始包装中的绑定。

namespace AppRepositoriesExtendedCart;
use GloudemansShoppingcartShoppingcartServiceProvider;
class ExtendedCartServiceProvider extends ShoppingcartServiceProvider
{
    public function register()
    {
        $this->app->bind('cart', 'AppRepositoriesExtendedCartExtendedCart');
    }
}

然后在config/app.php

中注册您的服务提供商
'providers' => [
    ...
    //Add this line to the end of providers array
    AppRepositoriesExtendedCartExtendedCartServiceProvider::class,
]
  • 最后创建一个立面,该立面将实例化类(否则您将获得非静态方法异常(。创建此文件:

app/repositories/extendedCart/aptedcart/extendedcart.php

这是文件的内容:

namespace AppRepositoriesExtendedCartFacades;
use IlluminateSupportFacadesFacade;
class ExtendedCart extends Facade {
    protected static function getFacadeAccessor() { return 'cart'; }
}

您都准备使用扩展方法。您可以安全地升级原始软件包,甚至可以使用默认的立面:

namespace AppHttpControllers;
use Cart;
class SomeController extends Controller{
    public function someFunction(){
        Cart::instance('default')->myMethod();
        //This should return 'myMethod'
    }
}

我希望这会有所帮助,祝你好运!

相关内容

  • 没有找到相关文章

最新更新