vendor/sonata-project/admin-bundle/src/Route/AdminPoolLoader.php line 65

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of the Sonata Project package.
  5.  *
  6.  * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Sonata\AdminBundle\Route;
  12. use Sonata\AdminBundle\Admin\Pool;
  13. use Symfony\Component\Config\Loader\Loader;
  14. use Symfony\Component\Config\Resource\FileResource;
  15. use Symfony\Component\Routing\RouteCollection as SymfonyRouteCollection;
  16. /**
  17.  * @author Thomas Rabaix <thomas.rabaix@sonata-project.org>
  18.  */
  19. final class AdminPoolLoader extends Loader
  20. {
  21.     public const ROUTE_TYPE_NAME 'sonata_admin';
  22.     /**
  23.      * @var Pool
  24.      */
  25.     private $pool;
  26.     public function __construct(Pool $pool)
  27.     {
  28.         // Remove this check when dropping support for support of symfony/symfony-config < 5.3.
  29.         // @phpstan-ignore-next-line
  30.         if (method_exists(parent::class, '__construct')) {
  31.             parent::__construct();
  32.         }
  33.         $this->pool $pool;
  34.     }
  35.     /**
  36.      * NEXT_MAJOR: Add the ?string param typehint when Symfony 4 support is dropped.
  37.      *
  38.      * @param mixed       $resource
  39.      * @param string|null $type
  40.      */
  41.     public function supports($resource$type null): bool
  42.     {
  43.         return self::ROUTE_TYPE_NAME === $type;
  44.     }
  45.     /**
  46.      * NEXT_MAJOR: Add the ?string param typehint when Symfony 4 support is dropped.
  47.      *
  48.      * @param mixed       $resource
  49.      * @param string|null $type
  50.      */
  51.     public function load($resource$type null): SymfonyRouteCollection
  52.     {
  53.         $collection = new SymfonyRouteCollection();
  54.         foreach ($this->pool->getAdminServiceIds() as $id) {
  55.             $admin $this->pool->getInstance($id);
  56.             foreach ($admin->getRoutes()->getElements() as $route) {
  57.                 $name $route->getDefault('_sonata_name');
  58.                 \assert(\is_string($name));
  59.                 $collection->add($name$route);
  60.             }
  61.             $reflection = new \ReflectionObject($admin);
  62.             if (false !== $reflection->getFileName() && file_exists($reflection->getFileName())) {
  63.                 $collection->addResource(new FileResource($reflection->getFileName()));
  64.             }
  65.         }
  66.         return $collection;
  67.     }
  68. }