如何在Symfony 2.5中拆分验证yaml文件?

 非常异族图腾 发布于 2023-01-11 14:27

此代码适用于Symfony 2.4.5,但它不适用于Symfony 2.5:

这是我的HRAPI扩展类,它在Symfony 2.4.5中工作,但在Symfony 2.5中没有

processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');

        // load validation configuration
        $yamlMappingFiles = $container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files');
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/site_user.yml';
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/human_resource.yml';
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/tag.yml';
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/company.yml';
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/programming_language.yml';
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/technology.yml';
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/language.yml';
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/management.yml';
        $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/calendar_entry.yml';
        $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $yamlMappingFiles);
    }
}

它显示错误:

ParameterNotFoundException:您已请求不存在的参数"validator.mapping.loader.yaml_files_loader.mapping_files".

任何想法如何为Symfony 2.5做?

1 个回答
  • Symfony 2.5改变了验证文件的加载方式.以下是如何执行此操作(使用Finder组件动态加载):

    创建编译器传递:

    namespace MyBundle\DependencyInjection\Compiler;
    
    use Symfony\Component\Finder\Finder;
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
    use Symfony\Component\Config\Resource\DirectoryResource;
    
    class ValidatorPass implements CompilerPassInterface
    {
        public function process(ContainerBuilder $container)
        {
            $validatorBuilder = $container->getDefinition('validator.builder');
            $validatorFiles = array();
            $finder = new Finder();
    
            foreach ($finder->files()->in(__DIR__ . '/../../Resources/config/validation') as $file) {
                $validatorFiles[] = $file->getRealPath();
            }
    
            $validatorBuilder->addMethodCall('addYamlMappings', array($validatorFiles));
    
            // add resources to the container to refresh cache after updating a file
            $container->addResource(new DirectoryResource(__DIR__ . '/../../Resources/config/validation'));
        }
    }
    

    然后,在Bundle中添加此编译器传递:

    namespace MyBundle;
    
    use Symfony\Component\HttpKernel\Bundle\Bundle;
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    use MyBundle\DependencyInjection\Compiler\ValidatorPass;
    
    class MyBundle extends Bundle
    {
        // . . . .
    
        public function build(ContainerBuilder $container)
        {
            parent::build($container);
    
            $container->addCompilerPass(new ValidatorPass());
        }
    
        // . . . .      
    }
    

    2023-01-11 14:30 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有