此代码适用于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做?
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());
}
// . . . .
}