在我的 laravel 包中使用其他包

Rai*_*Rai 5 php package workbench laravel

我使用 artisan workbench 命令创建了一个包。一切正常,但我想在我的包中使用另一个 composer 包。最好/最干净的方法是什么?

Ant*_*iro 4

基本上你只需要在你的包composer.json中需要这个包并在你的服务提供者中实例化它,将该包注入到你的类中:

class MyPackageServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app['mypackage'] = $this->app->share(function($app)
        {
            return new MyPackage(
                new ThirdPartyPackage()
            );
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

并在你的课堂上使用它:

class MyPackage {

    public function __construct(ThirPartyPackage $package) 
    {
        $this->package = $package
    }

    public function doWhatever() 
    {
        $this->package->do();
    }    
}
Run Code Online (Sandbox Code Playgroud)

如果包只有静态函数,则无能为力,您可能必须直接在类中使用它:

Unirest::get("http://httpbin.org/get", null, null, "username", "password");
Run Code Online (Sandbox Code Playgroud)

您可以做的就是创建一个类来动态地使用该包:

class MyRest implements MyClassInterface {

    public function get($url, $headers = array(), $parameters = NULL, $username = NULL, $password = NULL)
    {
        return Unirest::get($url, $parameters, $headers, $username, $password);
    }

}
Run Code Online (Sandbox Code Playgroud)

并在包中使用您自己的类。通过不直接公开该包,您可以动态地使用它,并且以后仍然可以更改实现。您还应该为您的公共方法创建一个接口:

interface MyClassInterface {

   public function get($url, $headers = array(), $parameters = NULL, $username = NULL, $password = NULL);

}
Run Code Online (Sandbox Code Playgroud)