Browse Source

Fix #19108: Optimize `Component::hasEventHandlers()` and `Component::trigger()`

tags/2.0.44
Anton 3 years ago committed by GitHub
parent
commit
cccb65a70d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      framework/CHANGELOG.md
  2. 20
      framework/base/Component.php

1
framework/CHANGELOG.md

@ -35,6 +35,7 @@ Yii Framework 2 Change Log
- Bug #19031: Fix displaying console help for parameters with declared types (WinterSilence)
- Bug #19030: Add DI container usage to `yii\base\Widget::end()` (papppeter)
- Bug #19096: Fix `Request::getIsConsoleRequest()` may return erroneously when testing a Web application in Codeception (WinterSilence)
- Enh #19108: Optimize `Component::hasEventHandlers()` and `Component::trigger()` (WinterSilence)
2.0.43 August 09, 2021

20
framework/base/Component.php

@ -465,13 +465,17 @@ class Component extends BaseObject
{
$this->ensureBehaviors();
if (!empty($this->_events[$name])) {
return true;
}
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
return true;
}
}
return !empty($this->_events[$name]) || Event::hasHandlers($this, $name);
return Event::hasHandlers($this, $name);
}
/**
@ -594,10 +598,12 @@ class Component extends BaseObject
/**
* Triggers an event.
* This method represents the happening of an event. It invokes
* all attached handlers for the event including class-level handlers.
*
* This method represents the happening of an event. It invokes all attached handlers for the event
* including class-level handlers.
*
* @param string $name the event name
* @param Event $event the event parameter. If not set, a default [[Event]] object will be created.
* @param Event|null $event the event instance. If not set, a default [[Event]] object will be created.
*/
public function trigger($name, Event $event = null)
{
@ -606,15 +612,15 @@ class Component extends BaseObject
$eventHandlers = [];
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (StringHelper::matchWildcard($wildcard, $name)) {
$eventHandlers = array_merge($eventHandlers, $handlers);
$eventHandlers[] = $handlers;
}
}
if (!empty($this->_events[$name])) {
$eventHandlers = array_merge($eventHandlers, $this->_events[$name]);
$eventHandlers[] = $this->_events[$name];
}
if (!empty($eventHandlers)) {
$eventHandlers = call_user_func_array('array_merge', $eventHandlers);
if ($event === null) {
$event = new Event();
}

Loading…
Cancel
Save