it-swarm.com.de

CodeIgniter HMVC Fehler object_to_array ()

HMVC: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads

Nach dem Herunterladen von CI und Kopieren über die HMVC wird die folgende Fehlermeldung angezeigt:

Eine nicht erfasste Ausnahme ist aufgetreten

Typ: Fehler

Nachricht: Aufruf an nicht definierte Methode MY_Loader :: _ ci_object_to_array ()

Dateiname: /Users/k1ut2/Sites/nine.dev/application/third_party/MX/Loader.php

Leitungsnummer: 300

Rückverfolgung:

Datei: /Users/k1ut2/Sites/nine.dev/application/controllers/Welcome.php Zeile: 23 Funktion: Ansicht

Datei: /Users/k1ut2/Sites/nine.dev/index.php Zeile: 315 Funktion: einmalig benötigt

22
whisky

Dies hier nur hinzuzufügen, da der von Clasyk bereitgestellte Link derzeit nicht funktioniert ...

Die kurze Version dieses Threads läuft darauf hinaus ...

In application/third_party/MX/Loader.php können Sie Folgendes tun:.

Unter public function view($view, $vars = array(), $return = FALSE) Suchen nach ... (Zeile 300)

return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));

Ersetzen Sie dies durch

if (method_exists($this, '_ci_object_to_array'))
{
        return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
} else {
        return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_prepare_view_vars($vars), '_ci_return' => $return));
}

Es ist das Ergebnis einer "kleinen" undokumentierten Änderung, die von den CI Devs implementiert wurde.

Wiredesignz erwartet einen Pull-Request, der auf Aktion wartet, damit er davon weiß ... 

In der Zwischenzeit können Sie das obige "diddle" implementieren und zurück zum Programmieren gehen :)

83
TimBrownlaw

HMVC funktioniert nicht mit 3.1.3 (aktuelle Version). Funktioniert aber mit allen Versionen bis 3.1.2. Ich habe das gerade erst ab 3.0.0 getestet.

3
whisky

Ich habe die Lösung. Das arbeitet für mich . Zeile 300 der Anwendung/Third_party/MX/Loader.php

Diese Zeile erzeugt einen Fehler mit CI 3.1.3

return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));

Durch diese Zeile ersetzen.

return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_prepare_view_vars($vars), '_ci_return' => $return));
}
2
zaman sandhu

Diesen gefunden Verwenden Sie diesen Ort in application/core/MY_Loader.php

Von hier https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/pull-requests/17/fix-loaderphp-for-ci-313/diff#comment-30560940

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

/* load the MX_Loader class */
require APPPATH."third_party/MX/Loader.php";

class MY_Loader extends MX_Loader
{
    /** Load a module view **/
    public function view($view, $vars = array(), $return = FALSE)
    {
        list($path, $_view) = Modules::find($view, $this->_module, 'views/');

        if ($path != FALSE)
        {
            $this->_ci_view_paths = array($path => TRUE) + $this->_ci_view_paths;
            $view = $_view;
        }

        return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => ((method_exists($this,'_ci_object_to_array')) ? $this->_ci_object_to_array($vars) : $this->_ci_prepare_view_vars($vars)), '_ci_return' => $return));
    }
}
2
Mr. ED

Fügen Sie diese Zeilen in application/third_party/MX/Loader.php nach Zeile 307 ein. 

protected function _ci_object_to_array($object) 
	{
    return is_object($object) ? get_object_vars($object) : $object;
    }

Für 3.1.3 funktioniert HMVC jedoch nicht.

besseres Glück.

1
Ganga