third_party my_loader method con _ci_object_to_array php codeigniter hmvc-codeigniter

my_loader - php con codeigniter



CodeIgniter HMVC object_to_array() error (5)

Agregue estas líneas en application / third_party / MX / Loader.php después de la línea 307,

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

Sin embargo, para 3.1.3 HMVC no funciona.

Mejor suerte.

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

Después de descargar CI y copiar en el HMVC, aparece el siguiente error:

Se encontró una excepción no detectada

Error de tecleado

Mensaje: Llamada a método no definido MY_Loader :: _ ci_object_to_array ()

Nombre de archivo: /Users/k1ut2/Sites/nine.dev/application/third_party/MX/Loader.php

Número de línea: 300

Backtrace:

Archivo: /Users/k1ut2/Sites/nine.dev/application/controllers/Welcome.php Línea: 23 Función: ver

Archivo: /Users/k1ut2/Sites/nine.dev/index.php Línea: 315 Función: require_once


Encontró esto Use este lugar en application / core / MY_Loader.php

Desde aquí 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)); } }


HMVC no funciona con 3.1.3 (versión actual). Pero funciona con todas las versiones hasta 3.1.2. Sólo probé esto desde 3.0.0 en adelante.


Simplemente agregando esto aquí ya que el enlace proporcionado por Clasyk no está funcionando actualmente ...

La versión corta de ese hilo se reduce a esto ...

En application / third_party / MX / Loader.php puedes hacer lo siguiente ...

En public function view($view, $vars = array(), $return = FALSE) Busque ... (Línea 300)

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

Reemplace esto con

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 el resultado de un "pequeño" cambio indocumentado que implementaron los desarrolladores de CI, ¡lo cual está bien!

Hay una solicitud de extracción en Wiredesignz que espera acción para que él lo sepa ...

Mientras tanto, puede implementar el "comando" anterior y volver a la codificación :)


Tengo la solución. Esto está funcionando para mí. En la línea 300 de application / third_party / MX / Loader.php

Esta línea genera un error con CI 3.1.3.

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

Reemplazar con esta línea.

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