
MVPHP es un marco simple y fácilmente pirateable para desarrollar aplicaciones web PHP mínimamente viables. Muchos marcos PHP tienen una curva de aprendizaje empinada y han abstraído profundamente su funcionalidad. MVPHP está diseñado para mantener las cosas simples, fáciles y más cercanas al PHP puro. También proporciona una implementación simple y personalizable de Bootstrap para que comience a crear una parte delantera sin mucha molestia.
Lo que incluye:
Qué no es:
MVPHP no es un marco PHP robusto y bien probado como Laravel, Symfony, Zend, etc. Este marco está destinado a desarrollar rápidamente aplicaciones web de PHP de prueba de concepto con gastos generales mínimos, pocas opiniones y mucha flexibilidad. Úselo bajo su propio riesgo! Cree un problema si encuentra un error o tiene alguna sugerencia.
composer install en la raíz del proyecto.npm install -g gulp-cli para instalar globalmente el Gulp CLInpm install en la raíz del proyecto para instalar las herramientas que necesitaremos para construir los archivos frontales.gulp para construir los archivos frontales.public .La idea básica detrás de este marco es comenzar con una clase simple que manejará toda la funcionalidad básica.
app.php es el archivo Bootstrap que primero carga nuestra configuración config.php , luego instancia nuestra clase principal creando el objeto $app . También se crea un objeto $auth para toda la funcionalidad relacionada con la autenticación. Señalamos una propiedad de nuestro objeto principal ( $app->auth ) para hacer referencia $auth para mantener las cosas simples y hacerlo accesible dentro del alcance de $app .
$ app = new MVPHP (); Casi todo lo que hagamos utilizará este objeto $app .
app.php también requiere el archivo routes.php en el directorio raíz, donde definiremos nuestras rutas iniciales. Verá varios ejemplos de trabajo en este archivo.
Hay algunas formas de definir una ruta y lo que debe hacer:
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff here
}); Un cierre es una función anónima que se ejecutará cuando la URI de solicitud coincida con la ruta. Para que los métodos en nuestra clase MVPHP principal sean accesibles dentro de esta función anónima, especificamos use ($app) . Esto importará la variable $app en el alcance variable de la función anónima.
$ app -> route ( ' /example/{id} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});Puede indicar parámetros variables en un URI con soportes. Se identifican en una matriz asociativa, ya que la clave es el nombre definido en la ruta y el valor es el valor real proporcionado en la URI de solicitud.
$ app -> route ( ' /example/{id:int} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});También puede definir restricciones para coincidir los parámetros de URI utilizando un colon seguido del tipo de restricción. Dejando fuera el valor de restricción predeterminado a la restricción "cadena".
Opciones de restricción:
Ejemplos de expresión regular:
Cualquier expresión que funcione con la función preg_match de PHP funcionará aquí. Esta herramienta es útil para probar expresiones antes de implementarlas.
// This example requires the ID value to be a 5 digit number
$ app -> route ( ' /example/{id:regex=^[0-9]{5}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});
// This example requires the ID to be lower or uppercase letters between 1-10 characters long
$ app -> route ( ' /example/{id:regex=^[a-zA-Z]{1,10}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
}); $ app -> route ( ' /example ' ); A veces, su aplicación tendrá muchas rutas y preferiría organizarlas en archivos separados que tenerlos en el archivo routes.php .
Si registra una ruta como esta, MVPHP buscará un archivo correlacionado con el mismo nombre en el directorio controllers . En el ejemplo anterior, una ruta registrada en /example buscará un archivo example.php en el directorio de controladores y la requerirá.
Ahora, puede registrar más rutas relacionadas con puntos finales /example en el archivo example.php . Por ejemplo, su archivo de controllers/example.php podría verse así:
// Reiterate this route and do something with it this time
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff
});
// Register any other related route endpoints here
$ app -> route ( ' /example/stuff ' , function () use ( $ app ) {
// Do stuff
});Si desea usar un archivo específico con un nombre diferente, simplemente lo especifique como el segundo parámetro:
$ app -> route ( ' /example ' , ' myfile ' ); Esto intentará requerir controllers/myfile.php .
El concepto de rutas, controladores y modelos se definen muy libremente en este marco. Evitamos usar un montón de clases diferentes en aras de la simplicidad. Un controlador, en el contexto de este marco, debería ser simplemente un lugar para mediar entre solicitudes y funcionalidad definió el modelo.
Mire los archivos en el directorio controllers para ver ejemplos.
Podemos probar diferentes métodos de solicitud utilizando el método action :
$ app -> route ( ' /example ' , function () use ( $ app ){
if ( $ app -> action ( ' post ' ) ) {
// Do stuff on POST
} elseif ( $ app -> action ( ' get ' ) ) {
// Do stuff on GET
}
}); Las plantillas de vista se almacenan en el directorio views . Podemos llamar a una vista (generalmente desde un controlador) como esta:
$ app -> view ( ' my-template ' ); Esto simplemente busca my-template.php en la carpeta Vistas y requiere el archivo. Si tenemos variables en el archivo de plantilla, tenemos que pasarlas al método de vista como este:
$ my_var1 = ' Stuff I want to echo in the template. ' ;
$ app -> view ( ' my-template ' , [
' my_var1 ' => $ my_var1
]); Ahora se puede acceder $my_var1 dentro del archivo de plantilla de vista.
No nos molestamos con un motor de plantilla (porque PHP es inherentemente un lenguaje de plantilla). Simplemente acceda a las variales en su HTML como este:
< p > < ?=$my_var1;? > </ p >Declaraciones condicionales:
< ?php if ( isset($my_var1) ):? >
< p > < ?=$my_var1;? > </ p >
< ?php endif;? >Entiendes la idea. Plantilla de PHP pura y simple.
Por defecto, la parte delantera usa Bootstrap. Puede encontrar todos los archivos de origen en el directorio frontend . Las instrucciones para construir los archivos de origen desde la carpeta frontend se definen en el archivo gulpfile.js en la raíz del proyecto.
Cuando ejecuta gulp por primera vez en la raíz del proyecto, los archivos SCSS y JavaScript se combinaron, minificaron, se copiaron en la carpeta public . Los archivos de proveedores JS y CSS que utilizamos (jQuery, bootstrap, etc.) también se copian a la carpeta public .
Antes de editar los archivos SCSS y JavaScript en el directorio frontend , puede ejecutar gulp watch en la raíz del proyecto. Gulp observará cualquier cambio que guarde en los archivos y los guardará a medida que avanza.
La clase models/Documents.php proporciona un método para escribir un archivo PDF desde una fuente HTML. Esta clase usa wkhtmltopdf y puede requerir que instale estas dependencias antes de que funcione:
sudo apt-get install xfonts-base xfonts-75dpi urw-fonts
En el futuro se agregarán más PDF y otros "documentos".
Profundiza en otros métodos de utilidad disponibles mirando el archivo models/MVPHP.php , que contiene nuestra clase principal. ¡Se agregarán más en el futuro!