Eliasis PHP Framework / Documentación · Versión 1.1.3
Eliasis es un framework web HMVC de código abierto para el desarrollo de sitios web dinámicos con PHP. Ligero, modular y optimizado para el desarrollo de plugins WordPress.
Este framework es soportado por versiones de PHP 5.6 o superiores y es compatible con versiones de HHVM 3.0 o superiores.
Puedes instalar Eliasis PHP Framework en tu proyecto utilizando Composer. Si vas a empezar un nuevo proyecto, recomendamos utilizar nuestra aplicacion básica como punto de partida:
composer create-project --prefer-dist eliasis-framework/app
cd app
composer install
Para aplicaciones existentes puedes ejecutar lo siguiente:
composer require eliasis-framework/eliasis
El comando anterior sólo instalará los archivos necesarios, si prefieres descargar todo el código fuente (incluyendo tests, directorio vendor, excepciones no utilizadas, documentos...) puedes utilizar:
composer require eliasis-framework/eliasis-framework --prefer-source
Solo necesitas un archivo PHP en el que incluyas la autocarga de clases con Composer para crear tu primera aplicación con Eliasis Framework.
/** * my-custom-app.php */ require __DIR__ . '/vendor/autoload.php';
Para crear una aplicación con Eliasis simplemente:
/** * my-custom-app.php */ use Eliasis\Framework\App; App::run(__DIR__);
Si no se especifica ningún ID, el identificador predeterminado de la aplicación será "Default".
Métodos vistos en esta sección:
El identificador admite las siguientes convenciones de clase: UpperCamelCase, lowerCamelCase & snake_case.
Los identificadores de aplicación permiten crear múltiples aplicaciones en un mismo sitio web, evitando colisiones y facilitando el acceso a ellas desde cualquier lugar:
App::run(__DIR__, 'app', 'MyApplication');
Idealmente diseñados para utilizar diferentes instancias de Eliasis Framework en múltples plugins de WordPress corriendo al mismo tiempo:
/** * wp-content/plugins/my-first-plugin/my-first-plugin.php */ require __DIR__ . '/vendor/autoload.php'; use Eliasis\Framework\App; App::run(__DIR__, 'wordpress-plugin', 'MyFirstPlugin');
/** * wp-content/plugins/my-second-plugin/my-second-plugin.php */ require __DIR__ . '/vendor/autoload.php'; use Eliasis\Framework\App; App::run(__DIR__, 'wordpress-plugin', 'MySecondPlugin');
Métodos vistos en esta sección:
Tienes dos opciones para saltar de una aplicación a otra. Pasando el ID de la aplicación como método (recomendado):
App::MyFirstApp->getCurrentID(); // MyFirstApp App::MySecondApp->getCurrentID(); // MySecondApp
O a través del método App::setCurrentID():
App:setCurrentID('MyFirstApp'); App::getCurrentID(); // MyFirstApp App:setCurrentID('MySecondApp'); App::getCurrentID(); // MySecondApp
En el caso de solo utilizar una aplicación en el sitio web, no hay necesidad de especificar ni establecer el ID de la aplicación.
Métodos vistos en esta sección:
La aplicación recopilará todos los archivos de configuración encontrados en el directorio "config":
Archivos de configuración deben retornar un array indexado y podrán contener cualquier tipo de dato:
/** * config/settings.php */ return [ 'slug' => 'my-custom-app', 'email' => [ 'rol' => [ 'admin' => 'admin@site.com', 'editor' => 'editor@site.com' ] ] ];
/** * config/paths.php */ use Eliasis\Framework\App; return [ 'path' => [ 'layout' => App::ROOT() . 'src/template/layout/', 'page' => App::ROOT() . 'src/template/page/', ], ];
Temas referidos en esta sección:
Para obtener los parámetros de configuración desde la aplicación tienes varias opciones.
Pasando el index como método:
App::slug(); App::email(); App::email('rol'); App::email('rol', 'admin');
Utilizando el método getOption():
App::getOption('slug'); App::getOption('email'); App::getOption('email', 'rol'); App::getOption('email', 'rol', 'admin');
Pasando el ID de la aplicación como método y usando el método getOption():
App::MyCustomApp()->getOption('slug'); App::MyCustomApp()->getOption('email'); App::MyCustomApp()->getOption('email', 'rol'); App::MyCustomApp()->getOption('email', 'rol', 'admin');
Cualquiera de las tres opciones devolverá el mismo resultado:
/* string(13) "my-custom-app" array(1) { ["rol"] => array(1) { ["admin"] => string(14) "admin@site.com" } } array(1) { ["admin"] => string(14) "admin@site.com" } string(14) "admin@site.com" */
Métodos vistos en esta sección:
Los controladores deben ser creados en el directorio "src/Controller" de la aplicación:
La estructura básica de un controlador en Eliasis Framework es la siguiente:
/** * src/Controller/Home.php */ namespace App\Controller; use Eliasis\Framework\Controller; class Home extends Controller { }
Puedes acceder fácilmente a la instancia de un controlador desde cualquier punto de la aplicación utilizando el método "App::getControllerInstance()".
El método "App::getControllerInstance" utiliza los espacios de nombre almacenados en "App::namespaces()" para obtener las instancias de los controladores, por lo tanto deben haber sido agregados anteriormente en el archivo "config/namespaces.php":
/** * config/namespaces.php */ return [ 'namespaces' => [ 'controller' => 'App\\Controller\\' ], ];
O haber sido añadido anteriormente a través del método "App::setOption()":
App::setOption('namespaces', [ 'controller' => 'App\\Controller\\' ];
Para obtener la instancia simplemente tienes que indicar el nombre de la clase del controlador y el ID del namespace. Este último parámetro es opcional, aunque es recomendable utilizarlo cuando se repiten nombres de clase:
App::getControllerInstance('Home');
App::getControllerInstance('Home', 'controller');
Métodos vistos en esta sección:
Los modelos deben ser creados en el directorio "src/Model" de la aplicación, estar al mismo nivel que el controlador y tener el mismo nombre:
La estructura básica de un modelo en Eliasis Framework es la siguiente:
/** * src/Model/Home.php */ namespace App\Model; use Eliasis\Framework\Model; class Home extends Model { }
Al instanciar un controlador, el modelo es instanciado automáticamente si es que existe. Puedes acceder a la instancia del modelo desde el controlador utilizando el atributo "model" en los métodos del controlador:
/** * src/Controller/Home.php */ public function createTables() { return $this->model->createTables(); }
Las plantillas pueden ser creadas en cualquier directorio aunque se recomienda hacerlo en el directorio "src/template":
Estructura básica de las plantillas:
/** * src/template/layout/header.php * * Header content. */
/** * src/template/page/home.php * * Home page content. */
/** * src/template/layout/footer.php * * Footer content. */
Puedes acceder a la instancia de la vista desde el controlador utilizando el atributo "view" en los métodos del controlador.
Utiliza el método "renderizate" para cargar las plantillas y enviarle parámetros personalizados:
/** * src/Controller/Home.php */ public function render() { $page = App::path('page'); $layout = App::path('layout'); $this->view->renderizate($layout, 'header', ['data' => 'Header']); $this->view->renderizate($page, 'home', ['data' => 'Home']); $this->view->renderizate($layout, 'footer', ['data' => 'Footer']); }
Desde cada plantilla podrás utilizar las opciones enviadas desde el método "renderizate" a través del método "View::getOption()":
/** * src/template/layout/header.php */ use Eliasis\Framework\View; View::getOption('data'); // Header
/** * src/template/page/home.php */ use Eliasis\Framework\View; View::getOption('data'); // Home
/** * src/template/layout/footer.php */ use Eliasis\Framework\View; View::getOption(); // ['data' => 'Footer']
Métodos vistos en esta sección:
Lista de "constantes" para manejo de ruta:
App::ROOT(); # /root/ App::CORE(); # /root/vendor/eliasis-framework/eliasis/ App::PUBLIC(); # /root/public/ App::TEMPLATES(); # /root/templates/ App::MODULES(); # /root/modules/ App::PLUGINS(); # /root/plugins/ App::COMPONENTS(); # /root/components/
También puedes acceder a estos parámetros a través de los diferentes métodos disponibles en Eliasis.
Temas referidos en esta sección:
Lista de "constantes" para manejo de URLs:
App::PUBLIC_URL(); # https://site.com/root/public/ App::TEMPLATES_URL(); # https://site.com/root/templates/ App::MODULES_URL(); # https://site.com/root/modules/ App::PLUGINS_URL(); # https://site.com/root/plugins/ App::COMPONENTS_URL(); # https://site.com/root/components/
También puedes acceder a estos parámetros a través de los diferentes métodos disponibles en Eliasis.
Temas referidos en esta sección:
App::run($baseDirectory, $type, $id);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$baseDirectory | Directorio raíz de la aplicación. | string | sí | |
$type | Tipo de aplicación: "app" | "wordpress.plugin". | string | no | "app" |
$id | Identificador único para la aplicación. | string | no | "Por defecto" |
@return (boolean true)
Ejecutar aplicación:
App::run(__DIR__);
Ejecutar aplicación con ID específico:
App::run(__DIR__, 'app', 'FirstApplication')
Ejecutar plugin WordPress con ID específico:
App::run(__DIR__, 'wordpress-plugin', 'FirstApplication')
Puedes ampliar información en las secciones:
App::setOption($option, $value);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$option | Nombre para la opción. | string | sí | |
$value | Valor de la opción. | mixed | sí |
@return (mixed) → Option set.
Establecer opciones:
App::setOption('string-test', 'string'); App::setOption('int-test', 8); App::setOption('bool-test', true); App::setOption('array-test', []);
Establecer opciones para múltiples aplicaciones:
App::MyApplicationOne()->setOption('test', 'One'); App::MyApplicationTwo()->setOption('test', 'Two'); App::setCurrentID('MyApplicationThree'); App::setOption('test', 'Three'); App::MyApplicationFour()->setOption('test', 'Four');
Puedes ampliar información en las secciones:
App::getOption(...$params);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$params | Índice o índices del parámetro que se desea obtener. | array | sí |
@return (mixed) → Parámetros solicitados.
Obtener opciones:
App::getOption('index'); App::getOption('index', 'index-1'); App::getOption('index', 'index-1', 'index-2');
Obtener opciones para múltiples aplicaciones:
App::MyApplicationOne()->getOption('test'); App::MyApplicationTwo()->getOption('test'); App::setCurrentID('MyApplicationThree'); App::getOption('test'); App::MyApplicationFour()->getOption('test');
Puedes ampliar información en las secciones:
App::getControllerInstance($class, $namespace);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$class | Nombre de la clase | string | sí | |
$namespace | Índice del namespace. | string | no | '' |
@return (object|false) → Instancia de la clase o falso.
Obtener la instancia del controlador:
App::getControllerInstance('Home'); App::getControllerInstance('Home', 'controller');
Puedes ampliar información en las secciones:
App::setCurrentID($id);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$id | ID de la aplicación. | string | sí |
@return (boolean)
Define the current application ID:
App::setCurrentID('MyApplicationOne'); App::setCurrentID('MyApplicationTwo');
Puedes ampliar información en las secciones:
App::getCurrentID();
@return (string) → ID de la aplicación.
Obtener el ID de la aplicación actual:
App::getCurrentID();
Puedes ampliar información en las secciones:
View::getInstance();
@return (object)
Obtener instancia de la vista:
View::getInstance();
View::addHeader($header);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$header | Encabezados HTTP. | string | sí |
@return (boolean true)
Agregar encabezado:
View::addHeader('HTTP/1.0 404 Not Found');
Puedes ampliar información en las secciones:
View::addHeaders($headers);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$headers | Encabezados HTTP. | array | sí |
@return (boolean true)
AAgregar encabezados:
View::addHeaders([ 'WWW-Authenticate: Negotiate', 'HTTP/1.0 404 Not Found' ]);
Puedes ampliar información en las secciones:
View::sendHeaders();
@return (boolean)
Puedes ampliar información en las secciones:
View::renderizate($path, $file, $data);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$path | Ruta del archivo. | string | sí | |
$file | Nombre del archivo. | string | sí | |
$data | Opciones para la vista. | array | no | null |
@return (boolean true)
Imprimir plantilla:
View::renderizate('path/to/file', 'template-name');
Imprimir plantilla con parámetros personalizados:
View::renderizate( 'path/to/file', 'template-name', ['test' => 'value'] ););
Puedes ampliar información en las secciones:
View::getOption(...$params);
Atributo | Descripción | Tipo de dato | Requerido | Por defecto |
---|---|---|---|---|
$params | Índice o índices del parámetro que se desea obtener. | array | sí |
@return (mixed) → Parámetros solicitados.
Get options:
View::getOption('index'); View::getOption('index', 'index-1'); View::getOption('index', 'index-1', 'index-2');
Puedes ampliar información en las secciones:
Necesitarás instalar eliasis-framework/complement para agregar componentes.
composer require eliasis-framework/complement
Necesitarás instalar para agregar módulos.
composer require eliasis-framework/complement
Necesitarás instalar para agregar plugins.
composer require eliasis-framework/complement
Necesitarás instalar para agregar plantillas.
composer require eliasis-framework/complement
Eliasis Framework está enfocado en la escalabilidad, permitiéndote desarrollar desde una aplicación con un simple controlador, hasta un sistema completo.
Para ello pone a disposición una serie de bibliotecas opcionales que al instalarlas en tu proyecto se integran en el núcleo de Eliasis:
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Asset
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Añadir scripts y estilos a la configuración de la aplicación:
/** * config/assets.php */ use Eliasis\Framework\App; $public = App::PUBLIC_URL(); return [ 'assets' => [ 'js' => [ 'myCustomScript' => [ 'name' => 'myCustomScript', 'url' => $public . 'js/scripts.js', 'attr' => 'defer', 'version' => '1.1.3', 'footer' => false ] ], 'css' => [ 'myCustomStyle' => [ 'name' => 'myCustomStyle', 'url' => $public . 'css/styles.css', 'version' => '1.1.1' ] ] ] ];
Agregar estilos:
/** * public/css/styles.css */
/** * src/Controller/Home.php */ use Josantonius\Asset\Asset; public function css() { Asset::add('style', App::assets('css')['myFirstStyle'] ); }
Agregar scripts:
/** * public/js/scripts.js */
/** * src/Controller/Home.php */ use Josantonius\Asset\Asset; public function js() { Asset::add('script', App::assets('js')['myFirstScript'] ); }
Para minimizar y/o unificar scripts y estilos basta con colocar el siguiente comando antes de ser agregados:
/** * my-custom-app.php */ use Josantonius\Asset\Asset; $public = App::PUBLIC_URL(); Asset::unify('UniqueID', $public . '/', true);
Para instalar esta biblioteca, simplemente:
composer require eliasis-framework/complement
Esta biblioteca es instanciada por Eliasis cuando se encuentra instalada.
Temas referidos en esta sección:
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Cookie
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Curl
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Database
Eliasis conectará con la base de datos utilizando la primera configuración encontrada en el parámetro "db" de la configuración de la aplicación:
/** * config/database.php */ return [ 'db' => [ 'app' => [ 'provider' => 'PDOprovider', 'host' => 'localhost', 'user' => 'db_user', 'name' => 'db_name', 'password' => 'db_password', 'settings' => ['charset' => 'utf8'], ], 'api-rest' => [ 'provider' => 'PDOprovider', 'host' => 'localhost', 'user' => 'db_user', 'name' => 'db_name', 'password' => 'db_password', 'settings' => ['charset' => 'utf8'], ], ], ];
Puedes acceder a la instancia de la base de datos utilizando el atributo "db" en los métodos del modelo. Para cambiar la conexión basta con utilizar el método "changeDatabaseConnection()" del modelo.
/** * src/Model/Home.php */ namespace App\Model; use Eliasis\Framework\Model; class Home extends Model { public function createTables() { $params = [ 'id' => 'INT(6) PRIMARY KEY', 'name' => 'VARCHAR(30) NOT NULL', 'email' => 'VARCHAR(50)' ]; $this->db->create($params) ->table('test') ->execute(); $this-model->changeDatabaseConnection('api-rest'); $this->db->create($params) ->table('test_two') ->foreing('id') ->reference('id') ->on('test') ->actions('ON DELETE CASCADE ON UPDATE CASCADE') ->engine('innodb') ->charset('utf8') ->execute(); } }
Para instalar esta biblioteca, simplemente:
composer require Josantonius/ErrorHandler
Esta biblioteca es instanciada por Eliasis cuando se encuentra instalada.
Puedes establecer métodos personalizados que se llamarán cuando haya algún error o excepción:
/** * my-custom-app.php */ $instance = App::getControllerInstance('Home', 'controller'); $method = 'errorHandler'; ErrorHandler::setCustomMethod($instance, $method);
Para instalar esta biblioteca, simplemente:
composer require Josantonius/File
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Hook
Al instalar esta biblioteca, Eliasis cargará los ganchos de acción que se encuentren en el index "hooks" de los archivos de configuración:
/** * config/set-hooks.php */ use Eliasis\Framework\App; $namespace = App::namespaces('controller'); $class = $namespace . 'Home'; return [ 'hooks' => [ ['header', [$class, 'header'], 8, 0], ['footer', [$class, 'footer'], 8, 0], ['css', [$class, 'css'], 8, 0], ['js', [$class, 'js'], 8, 0], ], ];
Se agregan los métodos al controlador:
/** * src/Controller/Home.php */ public function header() { return ''; } public function footer() { return ''; }
Y se ejecutan en cualquier punto de la aplicación:
/** * src/template/layout/header.php */ use Eliasis\Framework\View; use Josantonius\Hook\Hook; Hook::doAction('css'); Hook::doAction('header'); View::getOption('data');
/** * src/template/page/home.php */ use Eliasis\Framework\View; use Josantonius\Hook\Hook; Hook::doAction('home'); View::getOption('data');
/** * src/template/layout/footer.php */ use Eliasis\Framework\View; use Josantonius\Hook\Hook; Hook::doAction('footer'); Hook::doAction('js'); View::getOption('data');
Para instalar esta biblioteca, simplemente:
composer require Josantonius/HTTPStatusCode
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Ip
Y para obtener la IP del usuario, simplemente:
App::IP();
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Json
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/LanguageCode
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/LoadTime
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Logger
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/MimeType
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Request
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Router
Al instalar esta biblioteca, Eliasis cargará las rutas que se encuentren en el index "routes" de los archivos de configuración:
/** * config/set-routes.php */ use Eliasis\Framework\App; $namespace = App::namespaces('controller'); return [ 'routes' => [ 'my-route/' => $namespace . 'Home@render' ], ];
Se agrega el método al controlador:
/** * src/Controller/Home.php */ namespace App\Controller; use Eliasis\Framework\Controller; use Josantonius\Asset\Asset; class Home extends Controller { public function header() { return ''; } public function footer() { return ''; } public function css() { Asset::add('style', App::assets('css')['myFirstStyle'] ); } public function js() { Asset::add('script', App::assets('js')['myFirstScript'] ); } public function createTables() { return $this->model->createTables(); } public function render() { $page = App::path('page'); $layout = App::path('layout'); $this->view->renderizate($layout, 'header', ['data' => 'Header']); $this->view->renderizate($page, 'home', ['data' => 'Home']); $this->view->renderizate($layout, 'footer', ['data' => 'Footer']); } }
Al acceder a la URL "https://site.com/my-route/" se ejecutará el método "home" y este ejecutará el método "render".
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Session
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Str
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/Url
Esta biblioteca viene integrada en el núcleo de Eliasis.
Serie de bibliotecas opcionales para WordPress que puedes integrar en Eliasis:
Para instalar esta biblioteca, simplemente:
composer require Josantonius/WP_Image
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/WP_Menu
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/WP_Notice
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Para instalar esta biblioteca, simplemente:
composer require Josantonius/WP_Register
Esta biblioteca contiene métodos estáticos y no se implementa en el núcleo de Eliasis.
Listado de aplicaciones y plugins para WordPress desarrollados con Eliasis Framework.
2017 - 2018 Josantonius.
Código liberado bajo la licencia MIT