Использование других пакетов внутри моего пакета laravel

Я создал пакет командой artisan workbench.
Все работает нормально, но я хочу использовать другой пакет composer внутри моего пакета.
Какой лучший / самый чистый способ сделать это?

4

Решение

По сути, вам просто нужно запросить пакет в вашем пакете 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);

}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]