Sao
Sao es un framework de desarrollo web en PHP diseñado para simplificar y agilizar el proceso de creación de aplicaciones web potentes y elegantes. Fue creado como método de aprendizaje, pero sigue creciendo y desarrollándose aún más.
Install / Use
/learn @4rcan31/SaoREADME
Introducción a Sao - Un Framework PHP para Desarrollo Web
Sao es un potente framework de desarrollo web en PHP que tiene como objetivo simplificar y acelerar el proceso de creación de aplicaciones web eficientes y elegantes. Aunque se originó como una herramienta de aprendizaje, Sao ha evolucionado y se ha convertido en una opción viable para proyectos más grandes. Este framework se basa en el diseño Modelo Vista Controlador (MVC) y ofrece una variedad de características y herramientas para ayudar a los desarrolladores a construir aplicaciones web de alta calidad de manera eficiente.
Proyectos Destacados Desarrollados con Sao
Aquí te presentamos algunos proyectos destacados que se han desarrollado utilizando Sao:
- Proyecto FTechnology
- Repositorio: FTechnology en GitHub
- Descripción: Este proyecto se centra en el desarrollo de una aplicación para ventas de productos de mascotas y el control de Croquette, un dispensador de comida para mascotas basado en hardware. Sao se utiliza como el framework principal para crear esta aplicación, lo que demuestra su versatilidad y capacidad para abordar proyectos variados.
Instalación
Para descargar Sao, ejecuta:
git clone https://github.com/4rcan31/Sao.git
Una vez que esté instalado, debes eliminar la carpeta .git.
En Windows, usa el comando rmdir:
rmdir /s /q sao\.git
En sistemas Unix o Linux (incluyendo macOS), usa el comando rm:
rm -rf Sao/.git
Ahora solo necesitas cambiar el nombre de la carpeta Sao al nombre de tu proyecto. Utiliza el comando:
En Windows:
ren sao nombre_de_tu_app
En Unix, Linux o macOS:
mv Sao nombre_de_tu_app
Ahora puedes ingresar a tu proyecto ejecutando:
cd nombre_de_tu_app
Puedes verlo funcionando ejecutando
php jenu serve
Configuración
Ahora debes configurar algunos datos para tu aplicación, como la asignación de variables globales. Dirígete al archivo .env. En este archivo, encontrarás variables de configuración. Dentro del archivo .env, verás lo siguiente:
APP_NAME=Sao
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost
APP_PORT=8080
APP_ADDRESS="127.0.0.1"
APP_KEY=7a4bd04541c36b406506b28376aafcbdc8c7a0fe45076ffb5b8b10476be3f5a6
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=name_your_database
DB_USERNAME=root
DB_PASSWORD=
Configuración .env de la Aplicación
APP_NAME:Este es el nombre de la aplicación.APP_DEBUG:Este es un valor booleano para establecer si la aplicación está en modo depuración o en modo producción.APP_URL:Esta es la URL de la aplicación.APP_PORT:Este es el puerto.APP_ADDRESS:Esta es la dirección IP de la aplicación.APP_KEY:Esta es una clave que la aplicación utiliza (se utiliza principalmente en la aplicación de sesiones).
Configuración .env de la Base de Datos
Valores por defecto (generalmente no cambian)
DB_CONNECTION:Gestor al que se conectará (por el momento Sao solamente soporta a MySQL como driver).DB_HOST:Host al que se conectará.DB_PORT:Puerto del host al que se conectará.
Valores que generalmente cambian
DB_DATABASE:Nombre de la base de datos a la que se conectará.DB_USERNAME:Nombre de usuario para acceder al gestor de base de datos.DB_PASSWORD:Contraseña para acceder al gestor de base de datos (por defecto es vacía).
Verificar la Conexión a la Base de Datos
Puedes comprobar si la conexión a la base de datos ha sido exitosa. Para hacerlo, ejecuta (una vez que ya estés dentro de la carpeta de tu proyecto):
php jenu comprobate:connection:mysql
Estructura de Directorios
/app
Esta carpeta contiene toda tu aplicación y se divide en 6 carpetas adicionales.
/console
En esta carpeta, encontrarás un archivo llamado console.php. Aquí podrás definir los comandos necesarios para ejecutarlos posteriormente con la aplicación de comandos de Sao, llamada jenu.
/Controllers
Aquí se definen todos los controladores de tu aplicación, que pueden provenir de las solicitudes (request) o de otras fuentes.
/DataBase
Dentro de esta carpeta, encontrarás la subcarpeta:
/migrations
En esta subcarpeta se almacenan todas tus migraciones (tablas) para la base de datos. Para crear una migración, ejecuta:
php jenu make:migration nombre_de_tu_migración
/middlewares
En esta carpeta, puedes crear todos los middlewares de tu aplicación, ya sea para la gestión de sesiones, roles, etc. Estos middlewares se aplicarán a las rutas (no a las vistas).
/Models
Aquí se encuentran todos los modelos de tu base de datos. Básicamente, esta capa está más relacionada con la base de datos. Cada archivo en /Models representa una tabla y puede servir como controlador de tablas.
/Views
Esta carpeta es donde puedes crear todos tus archivos de vistas para tu aplicación. Dentro de ella, hay una subcarpeta ya creada llamada:
/layouts
La carpeta de "layouts" te permite almacenar partes (renders) de las vistas que se repiten en todas las páginas, como encabezados, pies de página y elementos estáticos que son comunes en el sitio web. Esto te permite reutilizarlos desde las vistas.
Uso de Sao
Para comenzar a utilizar Sao y crear tu primer "Hola Mundo", debes familiarizarte con las rutas. Sao utiliza varias bibliotecas y aplicaciones para funcionar, pero en esta sección nos centraremos en cómo hacer que una aplicación funcione. Empezaremos por la creación de rutas, que se encuentran en el directorio app/routes. Todos los archivos en esta carpeta serán manejados por el enrutador de Sao. Para crear una ruta, utiliza la siguiente función:
Route::get('/home', function($request){
res('Hola mundo');
});
Cuando visites la ruta /home, se enviará una respuesta en formato JSON que dirá "Hola mundo". La función res() toma un array o una cadena como parámetro y lo convierte en JSON para que sea la respuesta. Esto es solo un ejemplo de respuesta; puedes implementar lógica más compleja. Todos los datos de la solicitud están disponibles en la variable $request. Puedes acceder a datos específicos de la solicitud de la siguiente manera:
Request::$path;
Request::$method;
Request::$uri;
Request::$requestTime;
Request::$headers;
Request::$ip;
Request::$data;
Request::$cookies;
Request::$tokenRequest;
Ahora que tienes acceso a los datos de la solicitud, puedes realizar cualquier lógica que necesites. Puedes responder con JSON o incluso renderizar una vista. Si deseas renderizar una vista, puedes utilizar la función view().
Route::get('/home', function($request){
view('home');
});
La función view busca un archivo en app/views, en este caso, un archivo llamado home.php, y lo renderiza. La función view también admite un segundo parámetro para pasar datos a la vista:
view('home', $request);
Este segundo parámetro permite pasar datos a la vista para que puedan procesarse allí:
<?php
// Archivo home.php
$data = ViewData::get();
Una vez que se obtienen los datos, ViewData::get(); se vacía automáticamente (los datos en la clase se destruyen).
Si necesitas validar datos, puedes utilizar la función validate($data). Aquí tienes un ejemplo:
Route::get('/home', function($request){
$validate = validate($request);
$validate->rule('required', ['name', 'password', 'email']);
$validate->rule('email', ['email']);
$validationResult = $validate->validate();
});
La función validate es parte de las bibliotecas de Sao y se utiliza para validar datos, en este caso, los datos del $request. El método $validate->validate() devuelve un valor booleano: true si todas las validaciones son exitosas y false si alguna falla. Las reglas de validación disponibles son las siguientes:
required: Requerir un índice (verifica que exista y no esté vacío).contain: Verifica si una cadena contiene una subcadena.email: Valida si una cadena contiene al menos un símbolo "@".is: Valida el tipo de dato.in: Valida si un array existe dentro de otro.numeric: Valida si un valor es un número.phone: Valida si un valor es un número de teléfono.
Ten en cuenta que el validador en /core/validate/validate.php puede tener algunos errores en algunas de las reglas (excepto en required, email, contain y phone).
Puedes desarrollar toda tu aplicación en una sola ruta, pero es mejor dividirla en partes y usar controladores. Para usar controladores, puedes hacer lo siguiente:
Route::get('/home', function($request){
controller('ViewController', 'home', $request);
});
Lo que hace esto es buscar un archivo llamado app/Controllers/ViewController.php, instanciar su clase y ejecutar la función home(). El tercer parámetro es opcional y se puede utilizar para pasar datos a la función home().
Cuando creas controladores, el nombre del archivo y el nombre de la clase deben ser iguales. Por ejemplo:
<?php
// Archivo ViewController.php
class ViewController extends baseController{
public function home($request){
view('home');
}
}
Ahora puedes llamar a un controlador y seguir toda tu lógica de programación para construir tu aplicación. Sin embargo, todavía no puedes realizar consultas en tu base de datos. Para hacerlo, debes usar un modelo. Para llamara los modelos, utiliza la función model() de la siguiente manera:
<?php
// Archivo ViewController.php
class ViewController extends baseController{
public function home($request){
model('users');
}
}
Esta función buscará un archivo llamado app/Models/users.php e instanciará una clase llamada users.
Nota: Al crear modelos, el nombre del archivo y el nombre de la clase deben ser iguales. Lo que significa que no recibirás sugerencias de métodos de la clase users en tu IDE. Si deseas habilitar sugerenc
Related Skills
node-connect
352.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
