YAMF (otro marco MVC) es un pequeño marco PHP MVC diseñado para comenzar a usar el paradigma MVC rápidamente sin mucho trabajo de configuración. ¡Todo lo que necesita es un servidor web que acepta archivos .htaccess y está bastante listo!
Requisitos mínimos: PHP 7.0+.
Use this template en la página de repositorio principal del proyecto.config.php si es necesario. Ajuste los parámetros que desee allí o agregue nuevos parámetros a $app , como la lógica de la sesión. Por defecto, no necesita ajustar nada para poner en funcionamiento su sitio.config-private.sample.php a config-private.php y ajustarlo a sus necesidades. Por ejemplo, puede configurar $app->db para ser una instancia PDO para su base de datos local. Tenga en cuenta que config-private.php se cargará antes de que tenga lugar algo en config.php .use Yamf/XYZ , deberá usar el compositor. Usar compositor es bastante fácil: simplemente vaya a la página de descarga y ejecute el script en la parte superior. (Nota: si está en Windows, querrá seguir las instrucciones aquí en la página de introducción).composer install (si tiene un archivo composer.phar en su directorio, ejecute php composer.phar install ). Se sentará y pensará por un minuto. ¡No están aquí, y no están aquí a propósito! YAMF se escribió a propósito para no utilizar dependencias externas que no sean el AutolOader del compositor para reducir la barrera de entrada al uso del paradigma MVC en PHP. Si desea alguna de esas cosas, simplemente presionas con tu gerente de dependencia favorito (como compositor). Dado que el compositor ya es necesario para ejecutar este proyecto para la autoinformación de PSR-4, recomendamos usar el compositor. vendor/autoload.php ya está incluido para usted en init.php .
Para obtener una nota con respecto a la plantilla de vista, consulte la sección sobre subclasificación.
Si lee la siguiente documentación en YAMF, es probable que esté mucho mejor que simplemente saltar e intentar leer el código usted mismo. :) ¡Solo tomará unos minutos y vale la pena!
Para facilitar el paso fácil de los parámetros de configuración, como la configuración de la base de datos, etc., YAMF pasa una variable $app de clase YamfAppConfig a cada función del controlador. Puede configurar esta variable para almacenar su objeto PDO de base de datos, cambiar su extensión de vista o ubicación de carpeta, y muchas otras configuraciones. Si desea agregar sus propios valores a $app , puede crear una clase que se deriva de YamfAppConfig y cambiar la configuración de appConfigClass en config.php para apuntar a su clase personalizada. ¡Tenga en cuenta que su clase personalizada debe derivar de YamfAppConfig ! Consulte config.php para ver todas las configuraciones y valores que sean pasados por YAMF a través de $app . En particular, puedes:
viewsFolderName )viewExtension )defaultHeaderName / defaultFooterName )config-private.php ) $app está disponible automáticamente en sus puntos de vista por usted.
Lo primero que probablemente querrá hacer es agregar una nueva ruta. Para hacer eso, siga estos pasos:
app/Controllers del proyecto. Las subcarpetas están bien. El controlador en realidad no tiene que tener Controller en el nombre, pero asegúrese de que el nombre de la clase coincida con el nombre del archivo.public que toma dos parámetros: $app y $request (en ese orden).routes.php y asegúrese de comprender la documentación y los ejemplos de cómo funcionan las rutas.routes .POST si es necesario.Parent-Folder/Controller-Name .yamf/Responses/Response , que puede ser cualquier cosa, desde una View hasta una respuesta JSON, lo que sea que desee, de verdad. Vea la siguiente sección para obtener más información aquí.yamf/Responses/View . Cree un archivo PHP (Ver) en la carpeta views (nuevamente, las subcarpetas están bien y, en su método del controlador, return new View('name/of/view'); .En breve:
app/Controllersroutes.phpviews si es necesarioreturn new View('name/of/view'); Todos los métodos del controlador que se denominan como resultado de una ruta deben devolver un yamf/Responses/Response o una subclase de dicha clase. Aquí hay algunas descripciones sobre cómo usar cada uno. La mayoría se puede usar en una línea solo con el constructor.
Response : la clase base para una respuesta de una ruta.new Response($statusCode = 200)yamf/Responses/Response se subclase de esta clase principal, ¡todos pueden devolver un código de estado HTTP personalizado, si lo desea!ErrorMessage : una envoltura simple alrededor de la vista para enviar un código de estado 400 y la vista Error.php.new ErrorMessage($msg = '', $name = 'error', $title = '', $headerName = '', $footerName = '') . $name es el nombre de la vista.$error . No puedes cambiar esto sin subclases.views/header.php y views/footer.php .JsonResponse - Ejemplo de cómo puede enviar una respuesta JSON desde su controladornew JsonResponse($data, $jsonEncodeOptions = 0)$data a través de echo json_encode($this->data, $this->jsonEncodeOptions);NotFound : utilizado para devolver un mensaje 404 no encontrado al cliente.new NotFound($name = '404', $data = [], $title = '', $headerName = '', $footerName = '') . $name es el nombre de la vista.views/header.php y views/footer.php .Response .Redirect : permite una redirección 302 a otra página o rutanew Redirect($redirectPath, $isInternalRedirect = true)$isInternalRedirect se utiliza para redirigir a una ruta dentro del sitio web/ routes.php actual.php Datos . Si desea redirigir a una ruta interna, use Redirect como esta: new Redirect('/route/name); (Tenga en cuenta el inicio / ). Si no, use Redirect como esta: new Redirect('https://example.com', false); .View : se utiliza para devolver alguna vista HTML basada en PHP.new View($name, $data = [], $title = '', $headerName = '', $footerName = '') . $name es el nombre de la vista.compact . Vea el BlogController de la muestra.views/header.php y views/footer.php . Si tiene ideas para más tipos Response que deben incluirse en YAMF, ¡abra una solicitud de función (a través de la pestaña Problemas) o abra una solicitud de extracción!
Dos variables principales se envían a sus métodos de controlador desde la ruta: $app y $request . Tenga en cuenta que toda la salida View tendrá las variables de solicitud $app y $request disponibles para usar. No necesita enviarlos como un parámetro $data .
AppConfig $app $app son principalmente variables de configuración que ha configurado en config.php . Consulte ese archivo para un vistazo rápido a lo que está disponible. Algunos de los artículos más importantes son:
$app->db para una conexión de base de datosnull para evitar usarlos en absoluto. Además de ellos, hay dos variables disponibles que se configuran en init.php :
$app->isLocalHost : si la aplicación se ejecuta o no en el host local ( 127.0.0.1 o ::1 )$app->basePath : el directorio base para su aplicación web actual. Esto se puede usar para permitir aplicaciones web anidadas en su servidor web. Recomiendo hacer uso de esta variable en sus views al hacer enlaces locales al sitio web para que si mueve archivos o luego mueve las cosas a una subcarpeta, todo no se rompe. Para vincular a otra página en su sitio, simplemente use la función $app->yurl(string) (YAMF URL) como esta: <?= $app->yurl('/path/to/page') ?> . $request $request tendrá todos sus datos sobre su ruta y los diferentes parámetros que han llegado con su solicitud. Es de tipo yamf/Request . Tiene a estos miembros públicos disponibles:
$request->route -cadena de ruta sin procesar para esta solicitud$request->controller -Nombre de cadena del controlador$request->function -name de cadena de la función del controlador para llamar$request->routeParams : cualquier parámetro en la ruta como {id}. Formato: ['id' => valor]$request->get -cualquier parámetro Get encontrado en la URL-el mismo formato que $ _get (no se realiza un procesamiento adicional)$request->post : cualquier publicación de parámetros: el mismo formato que $ _post (sin procesamiento adicional realizado)$request->anchor : si se usa, la parte # de la URL (sin el #). El enrutador es lo suficientemente inteligente como para no igualar en URL como /blah/#/foo . La forma más fácil de extender este marco es derivar de Response (o alguna otra clase infantil Response ) y/o crear una clase principal para algunos de sus controladores. Por ejemplo, al derivar de View , puede cambiar la salida de vista para usar el motor de plantilla de twig en lugar de solo salida de PHP simple. Al crear una clase principal para sus controladores, puede agregar cosas como validación u otro procesamiento adicional de datos que deben suceder para todas sus rutas API, como verificar un nombre de usuario/contraseña o token. ¡Las opciones son infinitas y el potencial excelente!
¡Hay un ejemplo de usar ramita en lugar de PHP sin procesar en la rama de ramita!
Una característica ingeniosa que YAMF admite son las páginas web estáticas que no requieren una route o un controller . Si desea /about de ser una página simple, tire una página about.php en las views/static/ carpeta y - ¡BAM! - /about funciona en su sitio web. ¿Qué pasa con las subcarpetas como /blog/post-name ? ¡Eso también funciona! ¡Agregue un archivo views/static/blog/post-name.php y simplemente funciona (TM)! Puede usar esto para que todavía tenga URL bonitas en su sitio web sin molestarse en agregar rutas y controladores.
Puede configurar la ubicación de vistas estáticas en config.php .
Tenga en cuenta que el enrutador intenta hacer coincidir una ruta router.php antes de consultar las páginas estáticas.
Una característica que el enrutador admite que no está habilitado de inmediato es el acortamiento de la URL, por ejemplo, https://example.com/short-url . Requiere una conexión de base de datos, pero si agrega la conexión de la base de datos y tiene la tabla de base de datos apropiada (el esquema está en config.sample.php ), el acortamiento de URL se puede usar si lo desea. No está obligado a habilitar esta función.
He incluido una lógica de sesión predeterminada comentada en config.sample.php . Siéntase libre de usarlo, modificarlo o tirarlo. Si tiene sugerencias sobre cómo mejorar esta funcionalidad, abra una solicitud de extracción o un problema para generar más discusión.
¡Me alegro de que hayas preguntado! Siempre hay cosas que se pueden hacer en un proyecto de código abierto: ¡corrige errores, nuevas funciones y más! Consulte la pestaña Problemas de este repositorio y eche un vistazo a qué errores se han informado y qué características se han solicitado. Hay más información sobre la contribución en el documento contribuyente.
Licencia MIT. Asegúrese de incluir la licencia para este marco (¡junto con un enlace de GitHub si se siente generoso!) Al usarla en su sitio. ¡Gracias! :)
Un agradecimiento especial a Bootswatch por el tema de papel Bootstrap utilizado en la muestra.