Skip to content

Instantly share code, notes, and snippets.

@visay
Created March 18, 2015 12:27
Show Gist options
  • Save visay/e7ec43ce23b5f7002518 to your computer and use it in GitHub Desktop.
Save visay/e7ec43ce23b5f7002518 to your computer and use it in GitHub Desktop.
I have 2 packages loaded in order of Package A then Package B. Both have setting of doctrine eventListener as below:
Package A Setting
-----------------
TYPO3:
Flow:
persistence:
doctrine:
eventListeners:
-
events: ['postRemove']
listener: 'My\PackageA\Domain\EventListener\MyPackageAEventListener'
Package B Setting
-----------------
TYPO3:
Flow:
persistence:
doctrine:
eventListeners:
-
events: ['postLoad', 'postPersist', 'preFlush', 'onFlush', 'loadClassMetadata']
listener: 'My\PackageB\Domain\EventListener\MyPackageBEventListener'
Then I run: ./flow configuration:show --type Settings --path TYPO3.Flow.persistence.doctrine.eventListeners
What I get is:
-
events:
- postLoad
- postPersist
- preFlush
- onFlush
- loadClassMetadata
listener: My\PackageB\Domain\EventListener\MyPackageBEventListener
Is that the expected behaviour?
@bwaidelich
Copy link

The reason for this is that all package settings get merged. Your examples translate to

array(..., 'eventListeners' => array(0 => 'events' => array('postRemove', ...)...)

and

array(..., 'eventListeners' => array(0 => 'events' => array('postLoad', ...)...)

note the two indexes 0, the second one will override the first one.
We should avoid using arrays in yaml and go for dictionaries instead:

TYPO3:
  Flow:
    persistence:
      doctrine:
        eventListeners:
          'MyPackageAEventListener'
            events: ['postRemove']
            listener: 'My\PackageA\Domain\EventListener\MyPackageAEventListener'

Now you can override the eventListener explicitly (using the 'MyPackageAEventListener' key) or append a new one, using its own key.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment