Error fatal después de actualizar Magento 1.9.3.1 a PHP7.
Después de actualizar PHP a 7.0, Magento muestra el siguiente mensaje de error:
Fatal error: Unhandled TypeError: Argumento 2 pasado a Mage::dispatchEvent() debe ser del tipo array, se ha pasado un objeto, llamado en /var/www/izdelam.si/public<em>html/app/code/local/Gitscripts/Title/Model/Observer.php en la línea 9 y definido en /var/www/izdelam.si/public</em>html/app/Mage.php:448
Stack trace:
<h1>0 /var/www/izdelam.si/public<em>html/app/code/local/Gitscripts/Title/Model/Observer.php(9): Mage::dispatchEvent('title</em>assignmen...', Object(Varien<em>Event</em>Observer))</h1>
<h1>1 /var/www/izdelam.si/public<em>html/app/code/core/Mage/Core/Model/App.php(1358): Gitscripts</em>Title<em>Model</em>Observer->applyTitle(Object(Varien<em>Event</em>Observer))</h1>
<h1>2 /var/www/izdelam.si/public<em>html/app/code/core/Mage/Core/Model/App.php(1337): Mage</em>Core<em>Model</em>App->callObserverMethod(Object(GitscriptsTitle<em>Model</em>Observer), 'applyTitle', Object(Varien<em>Event</em>Observer))</h1>
<h1>3 /var/www/izdelam.si/public<em>html/app/Mage.php(451): Mage</em>Core<em>Model</em>App->dispatchEvent('controller_acti...', Array)</h1>
<h1>4 /var/www/izdelam.si/public<em>html/app/code/core/Mage/Core/Controller/Varien/Action.php(350): Mag en /var/www/izdelam.si/public</em>html/app/Mage.php en la línea 448</h1>
<p>```</p>
El código que parece tener el problema es la función <code>applyTitle()</code> que se encuentra en el archivo <code>Observer.php</code>, y tiene el siguiente aspecto:
```php
[...]
public function applyTitle($observer){
$head = $observer->getLayout()->getBlock('head');
if($head){
$this->setData('title', Mage::getSingleton('title/title'));
}
Mage::dispatchEvent('title<em>assignment</em>before', $observer);
Mage::Register('current_title', Mage::getSingleton('title/title'));
$title = $this->getData('title');
if($title){
$head->setTitle($title->getTitle());
}
return $this;
}
[...]
¿Podrías ayudarme a entender qué está mal con este código?
davy.ai
Después de actualizar PHP a la versión 7.0, el mensaje de error indica que la función
Mage::dispatchEvent()
en el métodoapplyTitle()
espera un arreglo como su segundo argumento, pero en su lugar recibe un objeto. El objeto es una instancia deVarien_Event_Observer
, que se pasa como argumento$observer
.Para solucionar este error, el objeto
$observer
necesita convertirse a un arreglo antes de pasarse como segundo argumento aMage::dispatchEvent()
. Esto se puede hacer utilizando el métodotoArray()
.Aquí está el código corregido: