Symfony 自定义路由加载器:导入错误

Posted

技术标签:

【中文标题】Symfony 自定义路由加载器:导入错误【英文标题】:Symfony custom route loader : import error 【发布时间】:2013-10-11 05:57:51 【问题描述】:

我正在尝试根据我的数据库中的值从不同的捆绑包中动态加载 yml 路由文件。我已经按照cookbook 创建了一个自定义路由加载器,但是在导入文件时出现错误。我正在开发 Symfony 2.3。当我在 routing.yml 文件中手动添加集合时,我的路由工作正常。

我创建了一个服务来加载资源:

class ExtraLoader implements LoaderInterface

    private $loaded = false;

    public function load($resource, $type = null)
    
        if (true === $this->loaded) 
            throw new \RuntimeException('Do not add the "extra" loader twice');
        

        $loader = new AdvancedLoader($this->getResolver());
        $routes = new RouteCollection();

        $route = $loader->import('@ERPExsecBBundle/Resources/config/routing.yml');
        $route->addPrefix('/Production/');
        $routes->addCollection($route);

        $this->loaded = true;

        return $routes;
    

    [...]

以及食谱中描述的高级加载器:

class AdvancedLoader extends Loader

    public function __construct($resolver) 
        $this->resolver = $resolver;
    

    public function load($resource, $type = null)
    
        $collection = new RouteCollection();
        $type = 'yaml';
        $importedRoutes = $this->import($resource, $type);
        $collection->addCollection($importedRoutes);
        return $importedRoutes;
    

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

但我遇到了一个错误:

致命错误:未捕获的异常 'Symfony\Component\Config\Exception\FileLoaderLoadException' 带有消息“无法加载资源“@ERPExsecBBundle/Resources/config/routing.yml”。确保“ERPExsecBBundle/Resources/config/routing.yml”包已正确注册并加载到应用程序内核类中。在第 77 行的 C:\Program Files\wamp\www\alimerp\vendor\symfony\symfony\src\Symfony\Component\Config\Loader\Loader.php

为什么会出现这个错误?

【问题讨论】:

【参考方案1】:

在食谱中他们说:

# app/config/routing.yml
AcmeDemoBundle_Extra:
    resource: .
    type: extra

其中“类型”应与您的 AdvancedLoader 的类型相匹配

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

您应该尝试在 app/config/routing.yml 中将“extra”替换为“advanced_extra”

【讨论】:

【参考方案2】:

您是否在 AppKernel.php 中注册了捆绑包 ERPExsecBBundle ?

【讨论】:

是的,实际上,当我在 routing.yml 文件中手动添加路由时,我的路由工作正常,但是一旦通过我的服务注册,我就会得到错误。我认为AdvancedLoader的实现可能有问题。

以上是关于Symfony 自定义路由加载器:导入错误的主要内容,如果未能解决你的问题,请参考以下文章

从 Symfony 3.4 迁移到 Symfony 4.4 后,自定义投票器无法按预期工作

pypy 的导入钩子(自定义模块加载器)不起作用

在自定义页面中创建自定义路由

Symfony:自定义会话保存处理程序最大执行时间

Symfony2 不会加载自定义身份验证提供程序,加载 DaoAuthenticationProvider

添加自定义加载微调器(SVG)reactjs