¡La forma más rápida de crear sitios web simples usando PHP!
Instalación
Sobre Velox
Arquitectura
Configuración
Clases
Funciones
Comandos
Temas
Extensor de Velox
MVC
Plantilla
Autenticación
Colegio de cambios
Documentación
Si le gusta este proyecto y desea apoyar su desarrollo, ¡sería apreciado!

Mira la demostración o juega con el repl .
¿Tienes ganas de leer? Consulte la API completa en el sitio web de documentación en marwanalsoltany.github.io/velox .
composer create-project marwanalsoltany/velox my-velox-app Nota: Es posible que deba agregar el --stability=dev según la versión/rama. También es posible que desee agregar la bandera --no-dev para no instalar dependencias de desarrollo.
git clone https://github.com/MarwanAlsoltany/velox.git my-velox-appHecho: si no desea usar otros paquetes de terceros. Instalar Velox usando GIT es suficiente.
Descargue Velox como .zip o .tar.gz y extravelo en el directorio raíz web de su servidor.
Consejo: si desea probar Velox rápidamente y no tiene ningún servidor web disponible, use cualquier método de instalación y ejecute php bin/app-serve desde el directorio de Velox Inside. Este comando girará un servidor web de desarrollo en localhost:8000 (tenga en cuenta que debe tener al menos PHP instalado en su sistema).
Velox es un micro-marco ligero que hace que la creación de un sitio web simple usando PHP Joyful. Le ayuda a crear sitios web a prueba de futuro más rápido y de manera más eficiente. Proporciona componentes que facilitan el proceso de creación de un sitio web utilizando PHP. Velox no tiene dependencias, el paquete Velox y todo lo que necesita está incluido en el proyecto en sí. Todo lo que proporciona Velox es una forma de trabajar con Config , aprobar datos , registrar rutas , interactuar con la base de datos , representar vistas , manejar excepciones , código AutoDOAD y resolver activos. Proporciona la vista y las partes del controlador de un patrón de diseño MVC . Mirando desde v1.3.0 , Velox también proporciona la parte del modelo , por lo que es un marco MVC completamente destinado y a partir de v1.4.0 también viene enviado con un sistema de autenticación simple. Velox también se puede usar como generador de sitios estáticos si todo lo que necesita son archivos HTML al final.
Velox fue creado para resolver un problema específico, es una forma de construir un sitio web que esté entre dinámico y estático, una forma de crear un sitio web simple con pocas páginas sin ser obligado a usar un marco o un CMS que viene con una tonelada de cosas que nunca se utilizarán, es liviano, mínimo y directo.
No se recomienda usar Velox si tiene un proyecto intermediario, sería mejor usar un marco bien establecido. Velox no es una iniciativa para reinventar la rueda, puede ver a Velox como un kit de inicio para pequeños proyectos.
Velox tiene un caso de uso muy especial, sitios web simples, y aquí se entiende sitios web realmente simples. La ventaja es que no tienes cosas que no necesitas. Comparar Velox con Laravel o Symfony es irrelevante, ya que estos marcos juegan en un área totalmente diferente, también vale la pena mencionar que Velox es mucho más simple que Lumen o Slim.
| Directorio | Descripción |
|---|---|
bootstrap | Aquí es donde Velox arrancha la aplicación. Normalmente no tiene que cambiar nada en este directorio, a menos que desee extender la funcionalidad Velox más allá de las cosas básicas. |
bin | Aquí es donde se colocan los ejecutables de PHP. Puede agregar libremente el suyo o eliminar todo el directorio. |
app | Aquí es donde se colocará su propia lógica de backend. Trabajarás principalmente aquí para la parte de backend de tu aplicación. |
classes | Aquí es donde Velox Source archivan en vivo. No debería tocar nada aquí a menos que desee hacer su propia versión de Velox. |
functions | Aquí es donde viven todas las funciones que se cargan en la aplicación. Puede agregar libremente el suyo o eliminar todo el directorio. |
includes | Aquí es donde se colocarán todos los archivos que deben precargarse. Puede agregar libremente el suyo o eliminar todo el directorio. |
themes | Aquí es donde se colocarán todos sus temas frontend. Trabajarás principalmente aquí para la parte frontend de tu aplicación. |
config | Aquí es donde vivirán todos los archivos de configuración. Se pueden acceder a todos los archivos aquí usando la clase Config en tiempo de ejecución. |
storage | Aquí es donde Velox escribirá cachés y registros. También puede usar este directorio para almacenar los activos de toda la instalación. |
public | Aquí es donde debe poner su index.php con un enlace simbólico para activos estáticos ( assets/ directorio, por ejemplo) para la máxima seguridad. Puede eliminar libremente este directorio si lo desea. |
vendor | Aquí es donde se colocarán las dependencias de su compositor. Puede eliminar libremente este directorio si no desea usar el compositor. |
Consejo: la mayoría de los archivos enumerados en estos directorios están documentados. Eche un vistazo a ellos para aprender más sobre Velox.
El punto de entrada para una aplicación Velox es el index.php , aquí debe requerir el bootstrap/autoload.php , registrar algunas rutas con sus controladores usando la Router::class e iniciar el enrutador. Esto es todo lo que necesitas para tener una aplicación Velox que funcione.
<?php
require ' bootstrap/autoload.php ' ;
Router:: handle ( ' / ' , function () {
return View:: render ( ' home ' , [ ' title ' => ' Home ' ]);
});
Router:: start (); Además, puede agregar MiddleWares usando Router::middleware() y/o Configurar controladores para respuestas 404 y 405 usando el valor de configuración {global.errorPages.CODE} .
Alternativamente, puede extraer la "Parte de registro de rutas" en su propio archivo y dejar que Velox lo sepa usando bootstrap/additional.php . A partir de v1.2.0 Velox lo hace de forma predeterminada, el archivo includes/routes/web.php es donde debe registrar sus rutas. El enrutador también comenzará automáticamente si no se inicia explícitamente.
Nota: Para que Velox funcione de manera correcta y segura, debe redirigir todas las solicitudes al punto de entrada de la aplicación ( index.php ) y bloquear todas las solicitudes a otros archivos PHP en el servidor (eche un vistazo a .htaccess.dist para comenzar con Apache).
La siguiente tabla enumera todos los archivos de configuración que vienen enviados con Velox.
| Archivo de configuración | Descripción |
|---|---|
global.php | Este archivo de configuración contiene algunas variables globales utilizadas por casi todas las clases (configuración de todo el estado). |
router.php | Este archivo de configuración se puede utilizar para anular los parámetros predeterminados Router::class . |
session.php | Este archivo de configuración contiene la configuración de la sesión, es utilizado por la Session::class . |
database.php | Este archivo de configuración contiene credenciales de la base de datos, es utilizado por la Database::class . |
auth.php | Este archivo de configuración contiene configuración de autenticación, es utilizado por la Auth::class . |
theme.php | Este archivo de configuración se puede usar para editar/extender la configuración del tema. |
view.php | Este archivo de configuración se puede usar para personalizar todo sobre las vistas. Es utilizado por la View::class . |
data.php | Este archivo de configuración se puede usar para proporcionar cualquier datos arbitrarios, que luego se inyectarán en la Data::class . |
cli.php | Este archivo de configuración se puede usar para habilitar/deshabilitar los comandos o cambiar sus argumentos. |
Hecho: también puede agregar libremente sus propios archivos de configuración, todo lo que necesita hacer es crear un nuevo archivo en /config y agregar su configuración a él. Velox sabrá sobre este archivo y lo cargará en la aplicación. Puede acceder a su configuración a través de Config::get('filename.whateverKeyYouWrote') .
Las clases de Velox se dividen en cuatro espacios de nombres:
MAKSVeloxMAKSVeloxBackendMAKSVeloxFrontendMAKSVeloxHelperLa siguiente tabla enumera todas las clases disponibles con su descripción:
| Clase | Descripción |
|---|---|
VeloxApp | Una clase que sirve como un contenedor de servicio básico para Velox. |
BackendEvent | Una clase que ofrece la funcionalidad de manejo de eventos simples (despacho y escucha). |
BackendConfig | Una clase que carga todo desde el directorio /config y lo convierte en una matriz a la que se puede acceder a través de la notación de puntos. |
BackendRouter | Una clase que sirve como enrutador y un punto de entrada para la aplicación. |
BackendGlobals | Una clase que sirve como abstracción/envoltorio para trabajar con superglobals. |
BackendSession | Una clase que ofrece una interfaz simple para funcionar con sesiones. |
BackendController | Una clase abstracta que sirve como controlador base que se puede extender para hacer manejadores para el enrutador. |
BackendDatabase | Una clase que representa la base de datos y maneja las operaciones de la base de datos. |
BackendModel | Una clase abstracta que sirve como un modelo base que se puede extender para crear modelos personalizados. |
BackendAuth | Una clase que sirve como un sistema de autenticación para los usuarios. |
FrontendData | Una clase que sirve como una bolsa/tienda de datos abstraídos a la que se puede acceder a través de Notation. |
FrontendView | Una clase que hace ver archivos (diseños, páginas y parciales) con la capacidad de incluir archivos adicionales, dividir el contenido de la página en secciones y vistas de caché. |
FrontendHTML | Una clase que sirve como una interfaz fluida para escribir HTML en PHP. También ayuda a crear elementos HTML en la marcha. |
FrontendPath | Una clase que sirve como resolución de rutas para diferentes rutas/URL de la aplicación. |
HelperDumper | Una clase que arroja variables y excepción en un buen formato. |
HelperMisc | Una clase que sirve como titular para varias funciones de utilidad misceláneas. |
Nota: Todo esto es lo que el paquete Velox proporciona fuera de la caja.
Hecho: la App , Event , Config , Router , Globals , Session , Database , Auth , Data , View , HTML , clases Path están alias en el espacio de nombres raíz para la facilidad de uso.
Las funciones de Velox se dividen en estos archivos:
helpers.php : Aquí es donde viven el ayudante para las clases de Velox, estas son principalmente funciones que devuelven una instancia de clase o alias algún método.html.php : Aquí es donde viven HTML Helper Functions, estos no son más que alias para las funciones PHP más utilizadas con HTML.La siguiente tabla enumera todas las funciones disponibles y a qué clase/grupo pertenecen:
| Clase/grupo | (S) función (s) |
|---|---|
App::class | app() ,abort() ,terminate() |
Event::class | event() |
Config::class | config() |
Router::class | router() ,handle() ,redirect() ,forward() |
Database::class | database() |
Globals::class | globals() |
Session::class | session() ,flash() ,csrf() |
Auth::class | auth() |
View::class | view() ,render() ,render_layout() ,render_page() ,render_partial() ,section_push() ,section_reset() ,section_start() ,section_end() ,section_yield() ,include_file() |
Data::class | data() ,data_has() ,data_get() ,data_set() |
HTML::class | html() |
Path::class | path() ,app_path_current() ,app_url_current() ,app_path() ,app_url() ,theme_path() ,theme_url() ,assets_path() ,assets_url() |
Dumper::class | dd() ,dump() ,dump_exception() |
| Ayudantes de HTML | he() , hd() , hse() , hsd() , st() , nb() |
Hecho: también puede agregar libremente sus propias funciones, todo lo que necesita hacer es crear un nuevo archivo en /functions y agregar sus funciones a él. Velox sabrá sobre este archivo y lo cargará en la aplicación.
Velox viene con algunos comandos útiles que puede usar para hacer algunas tareas repetitivas. Puede ejecutar estos comandos usando el php bin/{command-name} .
La siguiente tabla enumera todos los comandos disponibles con su descripción.
| Dominio | Descripción |
|---|---|
app-serve | Este comando inicia un servidor de desarrollo. |
app-mirror | Este comando refleja la aplicación en el directorio /public . |
config-cache | Este comando almacena la configuración actual. |
config-dump | Este comando descarga la configuración actual con la resaltura de sintaxis. |
cache-clear | Este comando borra los cachés. |
Puede personalizar estos comandos utilizando el archivo config/cli.php . Aquí puede habilitarlos/deshabilitarlos o proporcionarles diferentes argumentos para ellos.
Si desea que todos estos comandos sean accesibles a través de una sola interfaz. Echa un vistazo a mi otra mezcla de paquetes, lo que hará eso por ti y aún más.
Velox se basa en la idea de los temas , un tema se divide en cuatro directorios:
assets/ directorio es donde se colocarán todos sus activos estáticos asociados con este tema.layouts/ directorio es donde define sus diseños. Un diseño en la terminología de Velox es el encuadre exterior de una página web.pages/ directorio es donde coloca el contenido específico en cada página, la página se envolverá con algún diseño de su elección y finalmente se representa. Una página en Velox Terminology es el contenido real de una página web.partials/ directorio es donde coloca todas sus piezas reutilizables del tema, que luego se utilizarán en sus diseños, páginas u otros parciales. Un buen ejemplo para los parciales podría ser: componentes , incluye y elementos de contenido . Puede personalizar el comportamiento de los temas utilizando el archivo config/theme.php . Aquí puede establecer el tema activo con la clave active . Los temas pueden heredar entre sí mediante la configuración de los padres con la clave parent . También puede cambiar la estructura del directorio de temas si desea usar la tecla paths . Otras configuraciones (almacenamiento en caché, por ejemplo) que vale la pena echarle un vistazo, se pueden encontrar con temas en el archivo config/view.php .
Consejo: puede echar un vistazo al tema velox proporcionado para ver cómo todas las cosas funcionan juntas en la práctica.
themes/velox/layouts/main.phtmlthemes/velox/pages/home.phtmlthemes/velox/partials/text-image.phtml Para agregar sus propias clases, use la app/ directorio, aquí es donde debe poner su propia lógica comercial. Tenga en cuenta que debe seguir PSR-4 para que Velox cargue sus clases. Consulte app/Controller/DefaultController.php , para obtener una idea.
Aquí hay una lista de algunos archivos importantes que debe considerar al trabajar con Velox:
autoload/additional.php .config/data.php .includes/routes/web.php (a partir de v1.2.0 ).includes/events/system.php (a partir de v1.2.0 ). <?php
namespace App Model ;
use MAKS Velox Backend Model ;
class Person extends Model
{
protected static ? string $ table = ' persons ' ;
protected static ? array $ columns = [ ' id ' , ' first_name ' , ' last_name ' , ' age ' , ...];
protected static ? string $ primaryKey = ' id ' ;
public static function schema (): string
{
// return SQL to create the table
}
} <?php
use App Model Person ;
// creating/manipulating models
$ person = new Person (); // set attributes later via setters or public assignment.
$ person = new Person([ ' first_name ' => $ value , . . . ]); // set attributes in constructor
$ person -> get ( ' first_name ' ); // get an attribute
$ person -> set ( ' last_name ' , $ value ); // set an attribute
$ person -> getFirstName (); // case will be changed to 'snake_case' automatically.
$ person -> setLastName ( $ value ); // case will be changed to 'snake_case' automatically.
$ person -> firstName ; // case will be changed to 'snake_case' automatically.
$ person -> lastName = $ value ; // case will be changed to 'snake_case' automatically.
$ attributes = $ person -> getAttributes (); // returns all attributes.
$ person -> save (); // persists the model in the database.
$ person -> update ([ ' first_name ' => $ value ]); // updates the model and save changes in the database.
$ person -> delete (); // deletes the model from the database.
Person:: create ( $ attributes ); // creates a new model instance, call save() on the instance to save it in the database.
Person:: destroy ( $ id ); // destroys a model and deletes it from the database.
// fetching models
$ count = Person:: count (); // returns the number of models in the database.
$ person = Person:: first ();
$ person = Person:: last ();
$ person = Person:: one ([ ' first_name ' => ' John ' ]);
$ persons = Person:: all ([ ' last_name ' => ' Doe ' ], $ order , $ offset , $ limit );
$ person = Person:: find ( $ id ); // $id is the primary key of the model.
$ persons = Person::find( ' first_name ' , ' John ' , ' last_name ' , ' Doe ' . . .); // or
$ persons = Person:: find ([ ' first_name ' => ' John ' , ' last_name ' => ' Doe ' ]);
$ persons = Person:: findByFirstName ( ' John ' ); // fetches using an attribute, case will be changed to 'snake_case' automatically.
$ persons = Person:: where ( ' first_name ' , ' = ' , $ value ); // fetches using a where clause condition.
$ persons = Person:: where ( ' last_name ' , ' LIKE ' , ' %Doe ' , [[ ' AND ' , ' age ' , ' > ' , 27 ], ...], ' age DESC ' , $ limit , $ offset );
$ persons = Person:: fetch ( ' SELECT * FROM @table WHERE `first_name` = ? ' , [ $ value ]); // fetch using raw SQL query. <?php
namespace App Controller ;
use MAKS Velox Backend Controller ;
use App Model Person ;
class PersonsController extends Controller
{
public function indexAction ()
{
$ persons = Person:: all ();
return $ this -> view -> render ( ' persons/index ' , [
' title ' => ' Persons ' ,
' persons ' => $ persons
]);
}
// other CRUD actions ...
/**
* Persons search action.
*
* @route("/persons/search", {GET})
*/
public function searchAction ()
{
// ...
}
/**
* Persons middleware.
*
* @route("/persons/*", {GET, POST})
*/
public function personsMiddleware ()
{
// ...
}
} Hecho: las operaciones CRUD (a saber: index , create , store , show , edit , update , destroy ) están registradas y configuradas de forma predeterminada. Para registrar sus propias rutas automáticamente, use la anotación @route("<path>", {<http-verb>, ...}) . Consulte Controller::registerRoutes() DocBlock para obtener más información.
Hecho: Para que el modelo esté disponible como propiedad para el controlador ( $this->model ), use Controller::associateModel() . Ver Controller::associateModel() DocBlock para obtener más información.
Consejo: Si en el modo de producción, como un atajo, lanzar una excepción con un código que coincida con el valor de configuración {global.errorPages.CODE} representará la página de error correspondiente. Por ejemplo, al lanzar new Exception('Not found', 404) forman el controlador, la página de error 404 configurada se representará y se pasará el mensaje de excepción. Si la página no está configurada, la página de error 500 se representará como un respaldo.
Velox no tiene ninguna forma de validar los datos. Echa un vistazo a mi otro paquete Mighty, lo que hará eso por ti y aún más.
{# theme/pages/persons/index.phtml #}
{! @extends 'theme/pages/persons/base' !}
{! @block content !}
{! @super !}
< h1 > {{ $title } } </ h1 >
{! @if ( isset ( $persons ) && count ( $persons ) ) !}
< ul >
{! @foreach ( $persons as $person ) !}
< li > {{ $person -> firsName } } {{ $person -> lastName } } </ li >
{! @endforeach !}
</ ul >
{! @endif !}
{! @endblock !} Consejo: Consulte el modelo Person y el PersonsController para ver un ejemplo realista.
Velox viene con su propio motor de plantilla. Este motor de plantilla es muy intuitivo y fácil de llevarse bien, si tiene experiencia con cualquier otro motor de plantilla, aprenderlo sería cuestión de minutos. Tenga en cuenta que el uso de este motor de plantilla es opcional. Simplemente puede usar PHP sin procesar en sus puntos de vista.
La siguiente tabla enumera todas las etiquetas disponibles y lo que hacen:
| Etiqueta | Descripción |
|---|---|
{! @extends 'path/to/template' !} | Extender una plantilla, se heredarán los bloques de esta plantilla. |
{! @include 'path/to/file' !} | Incluya un archivo, esto se representará antes de la inclusión (no se puede acceder a las variables de contexto). |
{! @embed 'path/to/file' !} | Incrustar un archivo, esto se incluirá tal como está (puede acceder a las variables de contexto). |
{! @block name !}{! @endblock !} | Cree un bloque para envolver algún código. |
{! @super !} | Úselo dentro de un bloque en una plantilla extendida para heredar el contenido del bloque principal. |
{! @block(name) !} | Imprima un bloque. Debe llamarse al menos una vez para representar un bloque. |
{! @foreach ($vars as $var) !}{! @endforeach !} | Estructuras de control (bucles, si declaraciones, ...). Todas las estructuras de control de PHP están disponibles ( if , else , elseif , do , while , for , foreach , continue , switch , break , return , require , include ) con la misma sintaxis, pero simplemente prefijada con un símbolo @ si una estructura de control es la primera palabra en la etiqueta. |
{! $var = '' !} | Asignaciones de variables. El contenido puede ser una variable o cualquier expresión de PHP válida. |
{{ $var }} | Imprima una variable. El contenido puede ser una variable o cualquier expresión de PHP que pueda ser lanzada a una cadena. |
{{{ $var }}} | Imprima una variable sin escapar. El contenido puede ser una variable o cualquier expresión de PHP que pueda ser lanzada a una cadena. |
{# This is a comment #} | Comenta algo. Este será un comentario de PHP (no estará disponible en HTML final). |
Consejo: eche un vistazo a las opiniones persons sobre PersonsController en el tema Velox para un ejemplo realista.
A partir de v1.4.0 Velox viene enviado con un sistema de autenticación integrado simple. Este sistema es muy simple y fácil de usar.
<?php
use MAKS Velox Backend Auth ;
// instantiate the Auth class
$ auth = new Auth (); // or Auth::instance();
// register a new user
$ status = $ auth -> register ( ' username ' , ' password ' );
// unregister a user
$ status = $ auth -> unregister ( ' username ' );
// log in a user
$ status = $ auth -> login ( ' username ' , ' password ' );
// log out a user
$ auth -> logout ();
// authenticate a user model
Auth:: authenticate ( $ user );
// check if there is a logged in user
$ status = Auth:: check ();
// retrieve the current authenticated user
$ user = Auth:: user ();
// add HTTP basic auth
Auth:: basic ([ ' username ' => ' password ' ]); Consejo: Consulte el UsersController para ver un ejemplo realista.
Velox es un proyecto de código abierto con licencia bajo la licencia MIT .
Copyright (c) 2021 Marwan al-Soltany. Reservados todos los derechos.