Files
kupshop/bundles/KupShop/KupShopBundle/Routing/SubmoduleLoader.php
2025-08-02 16:30:27 +02:00

80 lines
2.6 KiB
PHP

<?php
namespace KupShop\KupShopBundle\Routing;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use KupShop\KupShopBundle\Util\StringUtil;
use KupShop\KupShopBundle\Util\System\BundleFinder;
use KupShop\KupShopBundle\Util\System\PathFinder;
use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException;
use Symfony\Component\Config\Loader\Loader;
use Symfony\Component\Routing\RouteCollection;
class SubmoduleLoader extends Loader
{
public function load($resource, $type = null)
{
$collection = new RouteCollection();
$bundleFinder = new BundleFinder(new PathFinder());
// Load routing.yml from app/config/
if (!isFunctionalTests()) {
try {
$this->loadRouting('./app/config/routing.yml', $collection);
} catch (FileLocatorFileNotFoundException $e) {
// skip if not exists
}
}
// Load all routing.yml files from all loaded KupShop bundles
$loadBundlesRoutingFile = function ($file) use ($bundleFinder, &$collection) {
foreach ($bundleFinder->getBundlesResource('Resources/config/'.$file) as $bundle => $path) {
// Avoid recursion
if ($bundle == 'KupShopBundle') {
continue;
}
$this->loadRouting($path, $collection);
}
};
$loadBundlesRoutingFile('routing.yml');
$env = ServiceContainer::getKernel()->getEnvironment();
$loadBundlesRoutingFile("routing_{$env}.yml");
if (findModule(\Modules::COMPONENTS)) {
$loadBundlesRoutingFile('routing-components.yml');
}
return $collection;
}
/**
* @param RouteCollection $collection
*
* @throws \Symfony\Component\Config\Exception\FileLoaderLoadException
*/
public function loadRouting($path, &$collection)
{
// Load routing.yml
try {
$this->resolve($path, 'yaml')->getLocator();
$importedRoutes = $this->import($path, 'yaml');
$collection->addCollection($importedRoutes);
} catch (\InvalidArgumentException $e) {
// Ignore if autorouting.yml does not exists
// HACK: Jak sakra rozlisit jestli neexistuje, nebo neni validni? Musim takhle hnusne podle textu :-( Oboji je to InvalidArgumentException
if (!StringUtil::startsWith($e->getMessage(), 'Unable to find file')) {
throw $e;
}
}
}
public function supports($resource, $type = null)
{
return 'kupshop' === $type;
}
}