vendor/oneup/flysystem-bundle/src/DependencyInjection/Configuration.php line 52

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Oneup\FlysystemBundle\DependencyInjection;
  4. use League\Flysystem\Visibility;
  5. use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
  6. use Symfony\Component\Config\Definition\Builder\TreeBuilder;
  7. use Symfony\Component\Config\Definition\ConfigurationInterface;
  8. class Configuration implements ConfigurationInterface
  9. {
  10. protected array $adapterFactories;
  11. public function __construct(array $adapterFactories)
  12. {
  13. $this->adapterFactories = $adapterFactories;
  14. }
  15. public function getConfigTreeBuilder(): TreeBuilder
  16. {
  17. $treeBuilder = new TreeBuilder('oneup_flysystem');
  18. $rootNode = $treeBuilder->getRootNode();
  19. $this->addAdapterSection($rootNode);
  20. $this->addFilesystemSection($rootNode);
  21. $rootNode
  22. ->children()
  23. ->end()
  24. ;
  25. return $treeBuilder;
  26. }
  27. private function addAdapterSection(ArrayNodeDefinition $node): void
  28. {
  29. $adapterNodeBuilder = $node
  30. ->fixXmlConfig('adapter')
  31. ->children()
  32. ->arrayNode('adapters')
  33. ->useAttributeAsKey('name')
  34. ->prototype('array')
  35. ->performNoDeepMerging()
  36. ->children()
  37. ;
  38. foreach ($this->adapterFactories as $name => $factory) {
  39. $factoryNode = $adapterNodeBuilder->arrayNode($name)->canBeUnset();
  40. $factory->addConfiguration($factoryNode);
  41. }
  42. }
  43. private function addFilesystemSection(ArrayNodeDefinition $node): void
  44. {
  45. $supportedVisibilities = [
  46. Visibility::PRIVATE,
  47. Visibility::PUBLIC,
  48. ];
  49. $node
  50. ->fixXmlConfig('filesystem')
  51. ->children()
  52. ->arrayNode('filesystems')
  53. ->useAttributeAsKey('name')
  54. ->prototype('array')
  55. ->children()
  56. ->scalarNode('adapter')->isRequired()->end()
  57. ->scalarNode('alias')->defaultNull()->end()
  58. ->scalarNode('mount')->defaultNull()->end()
  59. ->scalarNode('visibility')
  60. ->validate()
  61. ->ifNotInArray($supportedVisibilities)
  62. ->thenInvalid('The visibility %s is not supported.')
  63. ->end()
  64. ->end()
  65. ->end()
  66. ->end()
  67. ;
  68. }
  69. }