es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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étodo applyTitle() espera un arreglo como su segundo argumento, pero en su lugar recibe un objeto. El objeto es una instancia de Varien_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 a Mage::dispatchEvent(). Esto se puede hacer utilizando el método toArray().

    Aquí está el código corregido:

    [...]
    public function applyTitle($observer){
        $head = $observer->getLayout()->getBlock('head');
        if($head){
            $this->setData('title',Mage::getSingleton('title/title'));
        }
        Mage::dispatchEvent('title_assignment_before', $observer->toArray());
    
        Mage::Register('current_title',Mage::getSingleton('title/title'));
    
        $title = $this->getData('title');
        if($title){
            $head->setTitle($title->getTitle());
        }
    
        return $this;
    }
    [...]
    

Comments are closed.