40 lines
791 B
PHP
40 lines
791 B
PHP
|
<?php
|
||
|
|
||
|
namespace App\Services\Partners;
|
||
|
|
||
|
use App\Exceptions\PartnerCannotBeFound;
|
||
|
|
||
|
class PartnersFactory
|
||
|
{
|
||
|
/**
|
||
|
* Registered partners
|
||
|
*/
|
||
|
protected static $partners = [];
|
||
|
|
||
|
/**
|
||
|
* Return a partner instance for specified url, if available
|
||
|
*/
|
||
|
public function getPartner(string $url)
|
||
|
{
|
||
|
$host = parse_url($url, PHP_URL_HOST);
|
||
|
|
||
|
foreach (self::$partners as $partner) {
|
||
|
if ($partner::handles($host)) {
|
||
|
return $partner::make($url);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
throw new PartnerCannotBeFound();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Register a partner
|
||
|
*/
|
||
|
public static function registerPartner($partner)
|
||
|
{
|
||
|
if (!in_array($partner, self::$partners)) {
|
||
|
self::$partners[] = $partner;
|
||
|
}
|
||
|
}
|
||
|
}
|