miércoles, 3 de agosto de 2016

inyectar php en javascript (angularJS) o convertir objeto php a objeto javascript

Con la función json_encode podemos convertir un objecto php (array multidimensional) en objecto javascript.

/* definición de objecto php */
$arrayPhp = array(
        'key0' => array(
                  atributo1 => valor1,
                  atributo2 => valor2, 
                  atributo3 => valor3
         ), 
         'key1' => array(
                  atributo1 => valor1,
                  atributo2 => valor2, 
                  atributo3 => valor3
         )
);
/* conversión de objeto php a json */

<?php $objJson = json_encode($arrayPhp); ?>

Ahora ya tenemos un objeto json que podemos inyectar en funciones javascript e inicializar nuestros objetos javascript.

/* inicialización de objectos javascript a través del objeto json */

<div data-ng-init='inicializarAngularJs($objJson)'></div>

/* Se supone un entorno que soporta angular en el html. La función inicializarAngularJS puede inicializar objectos de clase en angular
    ejemplo.
*/
 
    $scope.inicializarAngularJS = funcion(pObj){
        $scope.dat.miObjetoAngular = pObj;
     }

/*
    Ahora miObjetoAngular estará inicializado con el contenido de $arrayPhp y podremos accder a propiedades como: $scope.dat.miObjetoAngular.key0.atributo1 cuyo contenido será  valor1
*/

¡Importante! Cuida los detalles. La función inicializarAngularJS va entre comillas simples, debido a que la conversión del objeto json usa internamente comillas dobles y podemos tener problemas. El parámetro se pasa directamente sin entrecomillar.

Nota: Si usamos caracteres que pueden generar conflictos (comillas dobles que rompan la cadena de código...) debemos "limpiar" el contenido del objJson.

Para limpiar caracteres "problemáticos de codificar" podemos usar la función de reemplazo:

$pString = str_replace("'", '', $varALimpiar);
$varALimpiar = preg_replace('/[^a-zA-Z0-9\']/', ' ',$pString);

el contenido de $varALimpiar sería eliminando las comillas simples y todos los caracteres que no fuesen letras de la a-z mayusculas o minusculas y numeros.

Saludos!

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...