39 lines
917 B
PHP
39 lines
917 B
PHP
|
<?php
|
||
|
|
||
|
namespace App\Services\BundleRenderers;
|
||
|
|
||
|
use App\Classes\Bundle;
|
||
|
use App\Exceptions\BundleRendererCannotBeFound;
|
||
|
|
||
|
class BundleRendererFactory
|
||
|
{
|
||
|
/**
|
||
|
* Registered bundle renderers
|
||
|
*/
|
||
|
protected static $bundleRenderers = [];
|
||
|
|
||
|
/**
|
||
|
* Return a bundle renderer instance for specified bundle, if available.
|
||
|
*/
|
||
|
public function getBundleRendererFor(Bundle $bundle)
|
||
|
{
|
||
|
foreach (self::$bundleRenderers as $bundleRenderer) {
|
||
|
if ($bundleRenderer::handles($bundle)) {
|
||
|
return $bundleRenderer::make($bundle);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
throw new BundleRendererCannotBeFound();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Register a bundle renderer
|
||
|
*/
|
||
|
public static function registerBundleRenderer($bundleRenderer)
|
||
|
{
|
||
|
if (!in_array($bundleRenderer, self::$bundleRenderers)) {
|
||
|
self::$bundleRenderers[] = $bundleRenderer;
|
||
|
}
|
||
|
}
|
||
|
}
|