Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
useAttributeAsKey example
->
end
(
)
;
}
private
function
addGlobalsSection
(
ArrayNodeDefinition
$rootNode
)
: void
{
$rootNode
->
fixXmlConfig
(
'global'
)
->
children
(
)
->
arrayNode
(
'globals'
)
->
normalizeKeys
(
false
)
->
useAttributeAsKey
(
'key'
)
->
example
(
[
'foo' => '@bar', 'pi' => 3.14
]
)
->
prototype
(
'array'
)
->
normalizeKeys
(
false
)
->
beforeNormalization
(
)
->
ifTrue
(
fn
(
$v
)
=> \
is_string
(
$v
)
&&
str_starts_with
(
$v
, '@'
)
)
->
then
(
function
D
$v
)
{
if
(
str_starts_with
(
$v
, '@@'
)
)
{
return
substr
(
$v
, 1
)
;
}
return
[
'id' =>
substr
(
$v
, 1
)
, 'type' => 'service'
]
;
}
)
public
function
getConfigTreeBuilder
(
)
: TreeBuilder
{
$tb
=
new
TreeBuilder
(
'scalar_normalized_types'
)
;
$rootNode
=
$tb
->
getRootNode
(
)
;
$rootNode
->
children
(
)
->
arrayNode
(
'simple_array'
)
->
beforeNormalization
(
)
->
ifString
(
)
->
then
(
fn
(
$v
)
=>
[
$v
]
)
->
end
(
)
->
prototype
(
'scalar'
)
->
end
(
)
->
end
(
)
->
arrayNode
(
'keyed_array'
)
->
useAttributeAsKey
(
'name'
)
->
prototype
(
'array'
)
->
beforeNormalization
(
)
->
ifString
(
)
->
then
(
fn
(
$v
)
=>
[
$v
]
)
->
end
(
)
->
prototype
(
'scalar'
)
->
end
(
)
->
end
(
)
->
end
(
)
->
arrayNode
(
'object'
)
->
addDefaultsIfNotSet
(
)
->
beforeNormalization
(
)
->
ifTrue
(
fn
(
$v
)
=> !\
is_array
(
$v
)
)
$v
=
[
'enabled' => true,
'workflows' =>
$workflows
,
]
;
}
return
$v
;
}
)
->
end
(
)
->
children
(
)
->
arrayNode
(
'workflows'
)
->
useAttributeAsKey
(
'name'
)
->
prototype
(
'array'
)
->
fixXmlConfig
(
'support'
)
->
fixXmlConfig
(
'place'
)
->
fixXmlConfig
(
'transition'
)
->
fixXmlConfig
(
'event_to_dispatch', 'events_to_dispatch'
)
->
children
(
)
->
arrayNode
(
'audit_trail'
)
->
canBeEnabled
(
)
->
end
(
)
->
enumNode
(
'type'
)
->
values
(
[
'workflow', 'state_machine'
]
)
$this
->
addRoleHierarchySection
(
$rootNode
)
;
return
$tb
;
}
private
function
addRoleHierarchySection
(
ArrayNodeDefinition
$rootNode
)
: void
{
$rootNode
->
fixXmlConfig
(
'role', 'role_hierarchy'
)
->
children
(
)
->
arrayNode
(
'role_hierarchy'
)
->
useAttributeAsKey
(
'id'
)
->
prototype
(
'array'
)
->
performNoDeepMerging
(
)
->
beforeNormalization
(
)
->
ifString
(
)
->
then
(
fn
(
$v
)
=>
[
'value' =>
$v
]
)
->
end
(
)
->
beforeNormalization
(
)
->
ifTrue
(
fn
(
$v
)
=> \
is_array
(
$v
)
&&
isset
(
$v
[
'value'
]
)
)
->
then
(
fn
(
$v
)
=>
preg_split
(
'/\s*,\s*/',
$v
[
'value'
]
)
)
->
end
(
)
->
prototype
(
'scalar'
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
;
/** * @return void */
public
function
addConfiguration
(
NodeDefinition
$node
)
{
$node
->
fixXmlConfig
(
'user'
)
->
children
(
)
->
arrayNode
(
'users'
)
->
useAttributeAsKey
(
'identifier'
)
->
normalizeKeys
(
false
)
->
prototype
(
'array'
)
->
children
(
)
->
scalarNode
(
'password'
)
->
defaultNull
(
)
->
end
(
)
->
arrayNode
(
'roles'
)
->
beforeNormalization
(
)
->
ifString
(
)
->
then
(
fn
(
$v
)
=>
preg_split
(
'/\s*,\s*/',
$v
)
)
->
end
(
)
->
prototype
(
'scalar'
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
public
function
testDoesNotAllowNewKeysInSubsequentConfigs
(
)
{
$this
->
expectException
(
InvalidConfigurationException::
class
)
;
$tb
=
new
TreeBuilder
(
'root', 'array'
)
;
$tree
=
$tb
->
getRootNode
(
)
->
children
(
)
->
node
(
'test', 'array'
)
->
disallowNewKeysInSubsequentConfigs
(
)
->
useAttributeAsKey
(
'key'
)
->
prototype
(
'array'
)
->
children
(
)
->
node
(
'value', 'scalar'
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
->
buildTree
(
)
;
$a
=
[
->
end
(
)
;
return
$rootNode
;
}
private
function
createApiSection
(
)
: ArrayNodeDefinition
{
$rootNode
=
(
new
TreeBuilder
(
'api'
)
)
->
getRootNode
(
)
;
$rootNode
->
children
(
)
->
arrayNode
(
'rate_limiter'
)
->
useAttributeAsKey
(
'name'
)
->
arrayPrototype
(
)
->
children
(
)
->
booleanNode
(
'enabled'
)
->
defaultTrue
(
)
->
end
(
)
->
scalarNode
(
'lock_factory'
)
->
defaultValue
(
'lock.factory'
)
->
end
(
)
->
scalarNode
(
'policy'
)
->
end
(
)
->
scalarNode
(
'limit'
)
->
end
(
)
->
scalarNode
(
'cache_pool'
)
->
defaultValue
(
'cache.rate_limiter'
)
->
end
(
)
->
scalarNode
(
'interval'
)
->
end
(
)
->
scalarNode
(
'reset'
)
->
end
(
)
->
arrayNode
(
'rate'
)
->
children
(
)
->
example
(
'example setting'
)
->
end
(
)
->
end
(
)
->
end
(
)
->
arrayNode
(
'scalar_prototyped'
)
->
prototype
(
'scalar'
)
->
end
(
)
->
end
(
)
->
variableNode
(
'variable'
)
->
example
(
[
'foo', 'bar'
]
)
->
end
(
)
->
arrayNode
(
'parameters'
)
->
useAttributeAsKey
(
'name'
)
->
prototype
(
'scalar'
)
->
info
(
'Parameter name'
)
->
end
(
)
->
end
(
)
->
arrayNode
(
'connections'
)
->
prototype
(
'array'
)
->
children
(
)
->
scalarNode
(
'user'
)
->
end
(
)
->
scalarNode
(
'pass'
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
->
arrayNode
(
'cms_pages'
)
->
children
(
)
->
scalarNode
(
'first'
)
->
end
(
)
->
scalarNode
(
'second'
)
->
end
(
)
->
scalarNode
(
'third'
)
->
end
(
)
->
end
(
)
->
end
(
)
->
arrayNode
(
'messenger'
)
->
children
(
)
->
arrayNode
(
'transports'
)
->
normalizeKeys
(
false
)
->
useAttributeAsKey
(
'name'
)
->
arrayPrototype
(
)
->
fixXmlConfig
(
'option'
)
->
children
(
)
->
scalarNode
(
'dsn'
)
->
end
(
)
->
scalarNode
(
'serializer'
)
->
defaultNull
(
)
->
end
(
)
->
arrayNode
(
'options'
)
->
normalizeKeys
(
false
)
->
defaultValue
(
[
]
)
->
prototype
(
'variable'
)
->
end
(
)
->
end
(
)
/** * @dataProvider getEncoderTests */
public
function
testNormalizeEncoders
(
$denormalized
)
{
$tb
=
new
TreeBuilder
(
'root_name', 'array'
)
;
$tree
=
$tb
->
getRootNode
(
)
->
fixXmlConfig
(
'encoder'
)
->
children
(
)
->
node
(
'encoders', 'array'
)
->
useAttributeAsKey
(
'class'
)
->
prototype
(
'array'
)
->
beforeNormalization
(
)
->
ifString
(
)
->
then
(
fn
(
$v
)
=>
[
'algorithm' =>
$v
]
)
->
end
(
)
->
children
(
)
->
node
(
'algorithm', 'scalar'
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
->
end
(
)
->
buildTree
(
)
;
$rootNode
->
children
(
)
->
arrayNode
(
'translator'
)
->
fixXmlConfig
(
'fallback'
)
->
fixXmlConfig
(
'source'
)
->
children
(
)
->
arrayNode
(
'fallbacks'
)
->
prototype
(
'scalar'
)
->
end
(
)
->
defaultValue
(
[
]
)
->
end
(
)
->
arrayNode
(
'sources'
)
->
useAttributeAsKey
(
'source_class'
)
->
prototype
(
'scalar'
)
->
end
(
)
->
end
(
)
->
arrayNode
(
'books'
)
->
children
(
)
->
arrayNode
(
'page'
)
->
example
(
'page 1'
)
->
defaultValue
(
[
'number' => 1, 'content' => ''
]
)
->
prototype
(
'array'
)
->
children
(
)
->
integerNode
(
'number'
)
->
end
(
)
->
scalarNode
(
'content'
)
->
end
(
)
try
{
$tree
=
$node
->
getNode
(
)
;
$this
->
assertFalse
(
$shouldThrowWhenNotUsingAttrAsKey
)
;
$this
->
assertEquals
(
$defaults
,
$tree
->
getDefaultValue
(
)
)
;
}
catch
(
InvalidDefinitionException
$e
)
{
$this
->
assertTrue
(
$shouldThrowWhenNotUsingAttrAsKey
)
;
}
$node
=
new
ArrayNodeDefinition
(
'root'
)
;
$node
->
useAttributeAsKey
(
'attr'
)
->
addDefaultChildrenIfNoneSet
(
$args
)
->
prototype
(
'array'
)
;
try
{
$tree
=
$node
->
getNode
(
)
;
$this
->
assertFalse
(
$shouldThrowWhenUsingAttrAsKey
)
;
$this
->
assertEquals
(
$defaults
,
$tree
->
getDefaultValue
(
)
)
;
}
catch
(
InvalidDefinitionException
$e
)
{
$this
->
assertTrue
(
$shouldThrowWhenUsingAttrAsKey
)
;
}
}