Не могу загрузить Ressources с PhpFileLoader с синтаксисом пакета внутри Routing.php - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь загрузить все маршруты из всех комплектов в определенном пространстве имен динамически.Поэтому я настроил CustomRoute Loader как сервис и определю, какой маршрут добавить.Но PhpFileLoader не может найти Пакет.Я получил имя тебя Бандлс с $this->container->getParameter('kernel.bundles');, так что не может быть опечатка.Загрузка этих пакетов, жестко запрограммированных из-под routing.php, работает нормально, но не из класса обслуживания.Внутри routing.php я не могу определить, загружены ли пакеты, поэтому использование только routing.php не является решением.Что мне не хватает?Это мой код:

Routing.php

<?php


// app/config/routing.php
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

$path                    = "/Controller/";

$defaultAnnotationRoutes = [
                            'SomeDefaultBundle'];

$routes = new RouteCollection();

$routes->add('somedefaulRoute', new Route('/', array(
    '_controller' => 'SomeDefaultBundle:Welcome:page',
)));

$routes->addCollection(
    $loader->import("@FOSJsRoutingBundle/Resources/config/routing/routing.xml"
));

foreach ($defaultAnnotationRoutes as $bundleName) {


    $routingConfigPath = "@" . $bundleName . $path;

    $routes->addCollection(
    // loads routes from the given routing file stored in some bundle
        $loader->import($routingConfigPath, "annotation"));

}

$routes->addCollection(
    $loader->import('mapbender.routing_loader:load', "service"));

return $routes;

ServiceClass:

namespace Mapbender\CoreBundle\Routing;

use Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException;
use Symfony\Component\Config\Exception\FileLoaderLoadException;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\Loader\PhpFileLoader;
use Symfony\Component\Routing\RouteCollection;

class BundleLoader
{

    protected $container;
    protected $path                    = "/Controller/";
    protected $loader;

    /**
     * BundleLoader constructor.
     *
     * @param $container
     */
    public function __construct($container)
    {

        $this->container = $container;
        $rootdir = $this->container->get('kernel')->getRootDir();
        $this->loader = new PhpFileLoader(new FileLocator());

    }

    /**
     * @param      $resource
     * @param null $type
     * @return RouteCollection
     */
    public function load($resource, $type = null)
    {
        $routes  = new RouteCollection();
        $bundles = $this->container->getParameter('kernel.bundles');
        foreach ($bundles as $bundleName => $bundlePath) {

            if (preg_match('/CompanyVendor/', $bundleName, $matches)) {

                $routingConfigPath = "@" . $bundleName.  $this->path;

                try {
                    $routes->addCollection(
                        $this->loader->import($routingConfigPath)
                    );
                } catch (FileLoaderImportCircularReferenceException $e) {
                    throw $e;
                } catch (FileLoaderLoadException $e) {
                    throw $e;
                }
            }
        }

        return $routes;
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...