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