Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

added failing test case regarding issue #9 #11

Closed
wants to merge 4 commits into from

Conversation

tylkomat
Copy link

@tylkomat tylkomat commented Jul 5, 2016

Should be also related to issue #10.

Because of the EventManagerAwareInitializer that is set in ServiceManagerConfig the already configured EventManager in SendResponseListener gets overridden and the ConsoleResponseSender is missing. Therefore any console related response can not be rendered.

@weierophinney
Copy link
Member

Because of the EventManagerAwareInitializer that is set in ServiceManagerConfig the already configured EventManager in SendResponseListener gets overridden

As noted in #12, that initializer does not override the EM instance if one is already present, only if none was found and/or it has no SharedEventManager composed.

Thanks for the test case; I'll use this as a starting point for diagnosing the root cause.

@weierophinney
Copy link
Member

Please see my comment on #12 for a workaround; I'll have a new version of zend-mvc tagged shortly addressing the issue.

weierophinney added a commit to weierophinney/zend-mvc that referenced this pull request Aug 29, 2016
Reported in:

- zendframework/zend-mvc-console#10
- zendframework/zend-mvc-console#11
- zendframework/zend-mvc-console#12

The `SendResponseListener` was lazy-instantiating an event manager on
first request to `getEventManager()`. However, because initializers run
after delegators, this meant that the EM instance composed did not have
a shared EM instance, which triggered the initializer to re-inject,
losing any listeners injected by delegators.

This patch introduces a factory for the `SendResponseListener`. The
factory creates the instance, and then injects it with an EM instance
pulled from the container; since these are guaranteed to have a shared
EM instance, the initializer will skip injection, keeping any listeners
injected by delegators.
weierophinney added a commit to zendframework/zend-mvc that referenced this pull request Aug 29, 2016
Reported in:

- zendframework/zend-mvc-console#10
- zendframework/zend-mvc-console#11
- zendframework/zend-mvc-console#12

The `SendResponseListener` was lazy-instantiating an event manager on
first request to `getEventManager()`. However, because initializers run
after delegators, this meant that the EM instance composed did not have
a shared EM instance, which triggered the initializer to re-inject,
losing any listeners injected by delegators.

This patch introduces a factory for the `SendResponseListener`. The
factory creates the instance, and then injects it with an EM instance
pulled from the container; since these are guaranteed to have a shared
EM instance, the initializer will skip injection, keeping any listeners
injected by delegators.
@weierophinney
Copy link
Member

To get the fix, please update your zend-mvc to 3.0.3:

$ composer require "zendframework/zend-mvc:^3.0.3"

weierophinney added a commit that referenced this pull request Aug 29, 2016
added failing test case regarding issue #9
weierophinney added a commit that referenced this pull request Aug 29, 2016
weierophinney added a commit that referenced this pull request Aug 29, 2016
Updates the test written for #11, and modifies it as follows:

- Uses the new `SendResponseListenerFactory` to create the
  `SendResponseListener` instance.
- Registers the `ConsoleResponseSenderDelegatorFactory` directly in the test
  setup, instead of wrapping it in a callable; we're only interested in the
  final state of the event manager.
- Updates the minimum zend-mvc requirement to 3.0.3, which introduces the
  `SendResponseListenerFactory`.
weierophinney added a commit that referenced this pull request Aug 29, 2016
weierophinney added a commit that referenced this pull request Aug 29, 2016
weierophinney added a commit that referenced this pull request Aug 29, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants