Es una librería para la generación de HTML de terceros de forma segura
Permite a una programador externo al servicio de PHP, crear una serie de instrucciones lógicas para ser ejecutadas por PHP con el fin de generar un HTML como resultado. Para lo que solo se le permitirá acceder a una lista limitada de instrucciones predefinidas en la aplicación de PHP
PHP 7.1+, PHP 8.0+
Función eval
habilitada (No ejecuta código, solo utilizado como verificador de código PHP)
Etiqueta principal que de la estructura XHTML
Cualquier línea dentro de esta etiqueta sera agregada al resultado o interpretada, según según sea el caso
Todo el código debe estár dentro de estas etiquetas
<LogicXHTML>
<h1>Este título</h1>
<p>Este párrafo es parte el resultado</p>
</LogicXHTML>
Mediante el Converter podrá convertir el código XHTML en una función PHP que recibirá un Control para generar una salida
Las funciones se definen como parte del Control para ser llamadas desde el LogicXHTML
Las propiedades se definen como parte del Control mediante un Scope para ser leídas desde el LogicXHTML
Tanto las funciones como las propiedades son de solo lectura dentro del LogicXHTML
$control=new \LogicXHTML\Control();
$control->set_fn('saludo', function($nombre){
return 'Hola '.$nombre;
});
$control->fn_bind([
'myFn1'=>function(){},
'myFn2'=>function(){},
]);
// Agrega funciones útiles como operaciones matemáticas y manipulacion de string
$control->fn_bind(\LogicXHTML\Control::fn_plus());
// Se definen las propiedades mediante un Scope
$props=new \LogicXHTML\Scope();
$props->prop_1='Valor 1';
$props->prop_2='Valor 2';
$control->setProps($props);
$converter=\LogicXHTML\Converter::loadFile('archivo.xhtml'));
if($converter->convert()){
$fn=$converter->saveToFunction();
$fn($control);
$control->saveToOutput();
}
En el archivo.xhtml
se llaman las funciones con sus respectivos parametros, y la lectura de propiedades se hace por medio del simbolo $
<LogicXHTML>
<!--Esto imprime: Hola mundo-->
:{saludo("mundo")}:
<!--Esto imprime: Valor 1-->
:{$.prop_1}:
</LogicXHTML>
Las llaves de reemplazo permiten ejecutar código para incluirlo al resultado
<div>:{"Este texto se interpreta"}:</div>
Para el manejo de variables, primero debemos cononer los Scope
- R: Accede a la raíz, que es el scope inicial o principal
- L: Local. Accede solo al scope más inmediato, no accede a sus padres
- P: Parent. Accede solo al scope padre, no accede a otros superiores
- U: Superior. Accede a todos los scopes superiores, excepto al local
- _: Auto. Accede a todos los scopes, desde el local hasta la raíz
Para leer o escribir una variable, podemos indicar su nombre en los controles que lo permitan
<:DO>
R.var='Variable en la raíz'
P.var='Variable en el padre'
L.var='Variable en el local'
</:DO>
<!--Esto imprime: Variable en el local-->
:{var}:
<!--Esto imprime: Variable en el local-->
:{_.var}:
<!--Esto imprime: Variable en el local-->
:{L.var}:
<!--Esto imprime: Variable en el padre-->
:{U.var}:
<!--Esto imprime: Variable en el padre-->
:{P.var}:
<!--Esto imprime: Variable en la raíz-->
:{R.var}:
Estas estructuras lógicas esperan el resultado del código que les sucede junto con los caracteres :=
, excepto <:ELSE>
que depende del resultado de la estructura anterior
El comportamiento de la estructura depende del resultado
Ejecuta el código en su interior solo si la condición del resultado es equivalente a TRUE
Crea su propio Scope local para el uso de variables
<:DO>a=0</:DO>
<:IF>:= a==0
Este texto se agrega al resultado
</:IF>
<:IF>:= a==2
Este texto no se agrega al resultado
</:IF>
Mismo comporamiento que el <:IF>
pero la condición anterior no se debe cumplir
<:DO>a=1</:DO>
<:IF>:= a==0
Este texto no se agrega al resultado
</:IF>
<:ELSEIF>:= a==1
Este texto si se agrega al resultado
</:ELSEIF>
<:ELSEIF>:= a==2
Este texto no se agrega al resultado
</:ELSEIF>
Crea su propio Scope local para el uso de variables
Mismo comporamiento que el <:FOR>
pero la condición anterior no se debe cumplir
Crea su propio Scope local para el uso de variables
Mismo comporamiento que el <:FOREACH>
pero la condición anterior no se debe cumplir
La condición anterior no se debe cumplir. No tiene su propio Scope
No tiene un comportamiento especial, pero todo lo que se agregue a al resultado dentor de esta etiqueta, se asignará a la variable indicada en su atributo set
Crea su propio Scope local para el uso de variables
<:BUFFER set="temp">
<p>Parrafo guardado en la variable temp</p>
</:BUFFER>
<!--Imprime el contenido generado en el buffer-->
:{temp}:
Todo el contenido dentro de esta etiqueta se imprime en la salida, ninguna linea es interpretada
Todo el contenido dentro de esta etiqueta es interpretado, pero no se incluye en el resultado
Cada línea debe ser código ejecutable, o bien, un comentario (Los primero caracteres de la linea deben ser //)
Acciones especiales: Solo se pueden ejecutar desde una etiqueta <:DO>