【问题标题】:Using other packages inside my laravel package [closed]在我的 laravel 包中使用其他包[关闭]
【发布时间】:2014-11-15 17:08:21
【问题描述】:

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

【问题讨论】:

  • 你能补充一些细节吗?你试过了吗?
  • 不...这就是我问的原因。
  • 那么问题是基于意见的,太宽泛了,希望能被关闭
  • 下面的这位先生明白我在说什么。不确定您还需要哪些其他信息
  • 这不是重点吗?可能有多种方法可以解决这个问题,但我不知道,所以我在这里问这个,人们比我更了解。是的,这个问题很简短,但我不明白这可能需要什么其他信息。

标签: php laravel package workbench


【解决方案1】:

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

class MyPackageServiceProvider extends ServiceProvider {

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

}

并在你的课堂上使用它:

class MyPackage {

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

    public function doWhatever() 
    {
        $this->package->do();
    }    
}

如果包只有静态函数,没有什么可以做的,你可能不得不直接在你的类中使用它:

Unirest::get("http://httpbin.org/get", null, null, "username", "password");

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

class MyRest implements MyClassInterface {

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

}

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

interface MyClassInterface {

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

}

【讨论】:

  • 如果我尝试使用的包有静态函数怎么办?如果有帮助,我会尝试包含 this package
  • 已编辑以提供有关静力学的信息。
  • 我实际上只是通过将use Unirest; 添加到我的文件中来使其工作;
猜你喜欢
  • 2015-09-27
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2018-01-24
  • 1970-01-01
  • 2013-12-30
相关资源
最近更新 更多