Я создал пакет командой artisan workbench.
Все работает нормально, но я хочу использовать другой пакет composer внутри моего пакета.
Какой лучший / самый чистый способ сделать это?
По сути, вам просто нужно запросить пакет в вашем пакете 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);
}
Других решений пока нет …