ECO es un marco PHP para PHP 5.5+
Ejemplo de instalación:
# wget shayanderson.com/eco.zip
# unzip ./eco.zip
Las rutas básicas se pueden configurar en app/com/route.php , por ejemplo:
// set routes
return [
// class method
' / ' => ' IndexController->home ' ,
// namespace
' login ' => ' AccountUserController->login ' ,
// callable
' logout ' => function () { /* do something */ },
// more routes
]; La solicitud / llamaría al método home en la clase IndexController en el archivo app/mod/IndexController.php .
La solicitud /login llamaría al método login en la clase AccountUserController en el archivo app/mod/Account/UserController.php .
Se pueden usar métodos HTTP específicos para las rutas:
eco:: route ( ' GET@api/user/:id ' , function ( $ id ) { /* GET method */ });
eco:: route ( ' DELETE@api/user/:id ' , function ( $ id ) { /* DELETE method */ });
eco:: route ( ' POST@api/user/:id? ' , function ( $ id = null ) { /* POST method */ });
// or handle multiple HTTP methods
eco:: route ( ' POST|PUT@api/user/:id? ' , function ( $ id = null ) { /* POST or PUT method */ });Se admiten estos métodos HTTP:
DELETE,GET,HEAD,PATCH,POST,PUT
Las devoluciones de llamada de ruta pueden ser un nombre llamable o llamable (el primer elemento de matriz debe ser el controlador/acción):
function auth () { /* do something */ }
eco:: route ( ' account/secure ' ,
[ ' AccountController->secure ' , ' auth ' , function () { /* invoked */ }]);ADVERTENCIA: Las devoluciones de llamada de ruta no funcionan con la configuración de ruta dinámica
Los establecedores de rutas dinámicas se pueden usar para aplicaciones más grandes que tienen muchas rutas (rutas de carga perezosa), por ejemplo:
eco:: route ( ' account* ' , ' AccountController::getRoutes() ' ); Ahora todas las solicitudes que comienzan con /account cargarán las rutas utilizando el método:
class AccountController
{
public static function getRoutes ()
{
return [
' account/login ' => ' AccountController->login ' ,
// do not have to use class name if in same class:
' account/logout ' => ' logout '
];
}
}La configuración de ruta dinámica (rutas de carga perezosa) también se puede establecer directamente como una matriz, ejemplo:
eco:: route ( ' account* ' , [
' AccountController ' , // the class name must be first (index:0)
' account/login ' => ' login ' ,
' account/logout ' => ' logout '
]);El enrutamiento CLI es fácil de usar, por ejemplo:
eco: route ( ' bin/test/:id ' , function ( $ id ) {
echo ' CLI test, id: ' . $ id ;
});Ahora se puede emitir un comando CLI:
$ php index.php bin/test/5
Bin test: 5
La ruta anterior también funcionaría en un navegador web. Para crear una ruta de solo CLI (no funcionará en el navegador web) agregue un
$al comienzo de la ruta, por ejemplo:
// this route will only work as CLI command
// the request '/bin/test/5' in a Web browser would result in a 404 error
eco: route ( ' $bin/test/:id ' , function ( $ id ) {
echo ' CLI test, id: ' . $ id ;
});Parámetros de ruta nombrados:
eco:: route ( ' user/:id ' , ' UserController->view ' ); El valor :id se pasará al método de clase o de clase:
class UserController
{
public function view ( $ id )
{
// do something
}
}Se pueden usar parámetros opcionales:
eco:: route ( ' page/:id/:title? ' , function ( $ id , $ title = null ) {});Ejemplo de parámetros comodín:
eco:: route ( ' product/:info+ ' , function ( $ info ) {
// if request is '/product/1/abc/x'
// $info is an array: ['1', 'abc', 'x']
});Las devoluciones de llamada de parámetros de ruta se pueden usar de varias maneras diferentes:
eco:: route ( ' page/:title:strtoupper ' , ' PageController->view ' );O Establecer devoluciones de llamada de parámetros en la matriz (el primer elemento de matriz debe ser el método de clase / llamable):
eco:: route ( ' page/:title ' , [ ' PageController->view ' , [ ' title ' => ' strtoupper ' ]]);Además, se pueden establecer devoluciones de llamada de parámetros de ruta global, por ejemplo:
// globally set route param callback
// now every ':id' param will use this callback
// global param callbacks are overwritten by local ones
eco:: param ( ' id ' , function ( $ id ) { return strtoupper ( $ id ); });
// or use multiple param names:
eco:: param ([ ' x ' , ' y ' , ' z ' ], function ( $ val ) { });Las devoluciones de llamada de ruta también se pueden usar con devoluciones de llamada de parámetros de ruta:
eco:: route ( ' page/:title ' , [
' PageController->view ' ,
' route_callback ' ,
function () { /* route callback */ },
// route param callback
[ ' title ' => ' strtoupper ' ]
]);Se pueden usar expresiones regulares del parámetro de ruta, si la coincidencia falla, la ruta no se invocará:
eco:: route ( ' user/:id@[0-9]+ ' , ...);El orden de la sintaxis es importante cuando se usa diferentes tipos de parámetros y/o combinando devoluciones de llamada y expresiones regulares, aquí está la sintaxis correcta:
// when using callback with regular expression
// the callback must come first:
eco:: route ( ' user/:id:strtoupper@[0-9]+ ' , ...);
// use optional param and callback:
eco:: route ( ' user/:id/:name?:strtoupper ' , ...);
// use optional param and regular expression:
eco:: route ( ' user/:id/:name?@[a-z]+ ' , ...);
// use optional param, callback and regular expression:
eco:: route ( ' user/:id/:name?:strtoupper@[a-z]+ ' , ...);
// use wildcard param and callback:
eco:: route ( ' user/:params+:strtoupper ' , ...);
// use wildcard param and regular expression:
eco:: route ( ' user/:params+@[a-z]+ ' , ...);
// use wildcard param, callback and regular expression:
eco:: route ( ' user/:params+:strtoupper@[a-z]+ ' , ...);El objeto de vista se puede usar en una ruta Acciones:
class PageController
{
public function get ( $ id )
{
$ page = PageModel:: get ( $ id );
// set view param
eco:: view ()-> set ( ' title ' , $ page -> title );
// or use view() helper function
// view()->set('title', $page->title);
// or like this:
view ()-> author = $ page -> author ;
// load template file 'page/view'
// and can also set view param 'content'
view ( ' page/view ' , [
' content ' => $ page -> content
]);
}
}También se puede acceder a los parámetros de ruta utilizando métodos de clase de
Router.
El ejemplo del archivo app/tpl/page/view.tpl :
<?php include PATH_TEMPLATE_GLOBAL . ' header.tpl ' ; ?>
<h1> <?= $ title ?> </h1>
<p>Author: <?= $ author ?> </p>
<?= $ content ?>
<?php include PATH_TEMPLATE_GLOBAL . ' footer.tpl ' ; ?> Ejemplo de mensajes de registro:
eco:: log ()-> error ( ' Bad error / fatal ' );
eco:: log ()-> warning ( ' Warning conditions ' );
eco:: log ()-> notice ( ' Notice message ' );
eco:: log ()-> debug ( ' File has loaded ' );Las categorías se pueden usar al registrar un mensaje:
// category 'payment'
eco:: log ()-> error ( ' Failed to access payment gateway ' , ' payment ' );También se puede agregar información de depuración:
eco:: log ()-> warning ( ' Request failed ' , /* category optional */ null ,
[ ' request ' => ' x ' , ' client ' => ' y ' ]);Obtenga un registro completo:
$ log = eco:: log ()-> get ();Configuración del manejador de registro personalizado Ejemplo:
eco:: log ()-> setHandler ( function ( $ message , $ level , $ category , $ info ){
// if sending message to database
// do no send if database connection error, example:
// if(substr($message, 0, 17) == 'SQLSTATE[HY000] [')
// {
// return false;
// }
// handle custom logging
return true ; // handled
});Si el controlador de registro personalizado no devuelve
trueel registrador interno continuará de manera normal
Ejemplos de error de activación:
eco:: error ( ' Error message ' );
// or use helper function
error ( ' Something bad ' );
// custom error code
error ( ' Page not found ' , 404 );
// add log category
error ( ' Failed to load user ' , null , ' account ' );
// by default the HTTP error response code is sent
// to not send HTTP code use:
error ( ' Page not found ' , 404 , ' category ' false ); Se puede acceder al último mensaje de error (y la categoría de error) enviada a la función eco::error() Usando:
$ error_message = eco:: errorGetLast ();
$ error_category = eco:: errorGetLastCategory ();Se puede usar una devolución de llamada 404 para manejar el 404 antes de llamar un error
Los ganchos se pueden usar para cargar archivos o usar devoluciones de llamada durante la ejecución, ejemplos:
// called before routing starts
eco:: hook (eco:: HOOK_BEFORE , function () { /* do something */ });
// called before the route callable or class method is called
// include a file example:
eco:: hook (eco:: HOOK_MIDDLE , PATH_LIB . ' hook/middle.php ' );
// called after dispatching
eco:: hook (eco:: HOOK_AFTER , function () { /* do something */ });La configuración de la aplicación y la configuración ecológica se manejan por separado.
El archivo de configuración de configuración ECO se encuentra en app/com/conf/eco.conf.php y contiene todas las configuraciones de marco. Toda la documentación para la configuración de la configuración ECO se puede encontrar en el archivo.
Los ajustes de configuración de la aplicación se pueden almacenar con ECO, ejemplo:
// load config file(s) using path
eco:: conf ( PATH_CONF . ' app.conf.php ' );
eco:: conf ( PATH_CONF . ' api.conf.php ' );
// or load config settings using array
eco:: conf ([ ' local ' => [ ' path ' => ' x ' , ' filename ' => ' y ' ]]);
// use config settings
$ app_username = eco:: conf ()-> app -> username ;
$ local_path = eco:: conf ()-> local -> path ; Los archivos de configuración deben devolver un ejemplo de matriz, app.conf.php :
return [
' app ' => [
' username ' => ' x ' ,
' password ' => ' y '
],
' core ' => [ /* more */ ]
];La configuración de configuración no se puede sobrescribir cuando se usa múltiples archivos, por lo que las teclas de matriz primaria deben ser únicas incluso en diferentes archivos. Nunca use la clave de matriz principal
_ecoque utiliza ECO para la configuración del marco interno.
Los ajustes de configuración también se pueden usar por separado de ECO, por ejemplo:
// do not store internally
$ conf = eco:: conf ( PATH_CONF . ' app.conf.php ' , false );
// use config settings
$ app_username = $ conf -> app -> username ;ECO ofrece los siguientes métodos:
eco::autoload($paths) - CLASE AUTOLOADEReco::breadcrumb() - Access Breadcrumb clase (Función de ayuda breadcrumb() disponible)eco::clear($key) - Clear Global Variableeco::conf($file_path, $store) - Registro / carga de la configuración de configuración de la aplicación ( conf() Función auxiliar disponible)eco::db($connection_id) - Función auxiliar de base de datos de acceso a acceso ( db() disponible)eco::error($message, $code, $category, $http_response_code) - activar una función de error ( error() auxiliar disponible)eco::filter() - Función de acceso de Filtro de datos de acceso ( filter() Función auxiliar disponible)eco::flash() - Función de acceso Flash de acceso de acceso ( flash() Disponible)eco::format() - Class de formato de datos de acceso ( format() Función auxiliar disponible)eco::get($key) - Obtenga una variable globaleco::has($key) - Compruebe si existe una variable globaleco::hook($name, $callback) - Agregar un ganchoeco::log() - Función de acceso a la clase de registro de acceso ( logger() disponible)eco::model() - Model Class Loader ( model() Función auxiliar disponible)eco::param($id, $callback) - Map Parameter Callback ( param() Función auxiliar disponible)eco::request() - Función ACCESS SELIT CLASS ( request() Helper disponible)eco::response() - Función ACCESS RESPUEST CLASS ( response() Ayudante disponible)eco::route($route, $action) - ruta de mapaeco::router() - Clase de enrutador central de accesoeco::run() - Ejecute la aplicacióneco::service() - Función de ayuda de clase de clase ( service() disponible)eco::session() - Función ACCESS Session Class ( session() Helper disponible)eco::set($key, $value) - Establecer una variable globaleco::stop() - Detener la aplicación de la aplicación ( stop() auxiliar disponible)eco::validate() - Access Data Validate Clase ( validate() Función auxiliar disponible)eco::view($template, $view_params) - archivo de plantilla de vista de carga y clase de vista de acceso ( view() Función auxiliar disponible) Las clases principales se pueden usar para simplificar las tareas de la aplicación común:
EcoCache - Clase central de caché del lado del servidorEcoDatabase - Class de base de datosEcoForm - HTML Form Core ClaseEcoHttp - HTTP Solicitud de clase Core ClaseEcoModel - clase de núcleo del modelo de base de datosEcoTable - Clase de núcleo de tabla HTML Estas clases de ayuda están disponibles:
EcoBenchmark - Benchmarking HelperEcoSystemBreadcrumb - Acceso con Función de ayudante eco::breadcrumb() o breadcrumb()EcoSystemFilter - Acceso con la función eco::filter() o filter() auxiliarEcoSystemSessionFlash - Acceso con la función eco::flash() o flash() auxiliarEcoSystemFormat - Acceso con la función de ayuda eco::format() o format()EcoSystemRequest - Acceso con la función eco::request() o request() auxiliarEcoSystemRegistryService - Acceso con Función de Helper eco::service() o service()EcoSystemSession - Acceso con la función eco::session() o session() auxiliarEcoSocketClient y EcoSocketServer - Creación de ayudantes de socketsEcoSystemValidate - Acccess con Función eco::validate() o validate() Las funciones auxiliar se pueden usar para acceder rápidamente a los métodos Eco Core u otra funcionalidad útil. Encuentre documentación de funciones auxiliar aquí.
ECO se puede extender extendiendo la clase Core EcoSystem . Inicialmente, esto está configurado en el archivo app/com/bootstrap.php :
// set Eco access class
class eco extends Eco System {} La clase de extensión se puede utilizar para agregar métodos o anular los métodos EcoSystem Overidable.
^ De vuelta a la cima