在我的 laravel 包中使用其他包[关闭]

Posted

技术标签:

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

我使用 artisan 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; 添加到我的文件中来使其工作;

以上是关于在我的 laravel 包中使用其他包[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 在包中使用自定义 USER-Model

将迁移放在 Laravel 5.1 包中的啥位置?

我需要使用其他条件在我的 laravel 页面中打印当前没有产品 [关闭]

如何在laravel的全日历包中更改一周的开始日期? [关闭]

Laravel:覆盖包特征功能

我如何扩展laravel转换器(任何其他组件)?