加载bundle时加载路由

时间:2015-03-18 23:30:11

标签: php symfony

我有一个API包,只有当我在子域上时才会加载,这是我在AppKernel中的内容:

if ($_SERVER['HTTP_HOST'] == 'api.mywebsite.fr')
{
    $bundles[] = new TV\ApiBundle\TVApiBundle();
}

现在我需要在我的软件包中的某个地方加载它自己的路由,没有必须使用我的软件包配置修改app/config/routing.yml文件。我尝试使用自定义路由器加载器,如http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html所述,但问题是教程的一部分:

AcmeDemoBundle_Extra:
    resource: .
    type: extra

有没有办法避免这种配置? 我希望我的捆绑包能够独立完成所有工作而无需修改app / config /.中的文件(除了AppKernel部分ofc:p)

此致

1 个答案:

答案 0 :(得分:2)

你检查过文档的最后一部分了吗?这部分在您的自定义加载器中添加资源和类型,这样您就不必在routing.yml中执行此操作。 http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html

namespace Acme\DemoBundle\Routing;

use Symfony\Component\Config\Loader\Loader;
use Symfony\Component\Routing\RouteCollection;

class AdvancedLoader extends Loader
{
    public function load($resource, $type = null)
    {
        $collection = new RouteCollection();

        $resource = '@AcmeDemoBundle/Resources/config/import_routing.yml';
        $type = 'yaml';

        $importedRoutes = $this->import($resource, $type);

        $collection->addCollection($importedRoutes);

        return $collection;
    }

    public function supports($resource, $type = null)
    {
        return $type === 'advanced_extra';
    }
}