1ab|a de Conten|do 1 refac|o .................................................................................................................. 14 1.1 Antes ue Leei este Bocumento.................................................................................................................. 14 1.2 Como esta oiganizauo este Bocumento................................................................................................. 14 1.S Convenciones Tipogificas.......................................................................................................................... 1S 1.4 A Quien est 0iientauo este Texto........................................................................................................... 16 1.S Infoimacion sobie maicas y piouuctos iefeienciauos ................................................................... 16 1.6 Refeiencias a sitios web ue teiceios....................................................................................................... 16 1.7 Sus comentaiios estn bienveniuos ........................................................................................................ 17 2 Introducc|n ........................................................................................................... 18 2.1 Bifeiencias con la veision Comunitaiia................................................................................................. 18 2.2 Licencia ................................................................................................................................................................ 19 3 Insta|ac|n.............................................................................................................. 20 S.1 Intiouuccion ...................................................................................................................................................... 2u S.2 Configuiacion con Apache Web Seivei 2.x........................................................................................... 2u S.S Configuiacion con Niciosoft ISS e ISAPI Rewiite.............................................................................. 22 S.4 Configuiacion ue PBP.................................................................................................................................... 2S S.S Configuiacion con Zenu Application Seivei ........................................................................................ 2S S.6 Cieai una Instancia ue Kumbia Enteipiise.......................................................................................... 24 S.7 Solucion a pioblemas ue instalacion....................................................................................................... 24 4 ju es kumb|a Lnterpr|se Iramework?................................................................. 27 4.1 Sobie Aplicaciones Web ............................................................................................................................... 27 4.2 Sobie PBP y la Web ........................................................................................................................................ 27 4.S Intiouuccion ...................................................................................................................................................... 27 4.4 Caiacteiisticas uel Fiamewoik.................................................................................................................. 28 4.S PBP en entoinos ciiticos.............................................................................................................................. 29 S Arqu|tectura ........................................................................................................... 30 S.1 Intiouuccion ...................................................................................................................................................... Su S.2 Capas en una Aplicacion............................................................................................................................... Su S.S 0sanuo Nouelo-vista-Contiolauoi.......................................................................................................... S1 S.4 ventajas ue usai NvC .................................................................................................................................... S2 S.S Loose CouplingTight Coupling ................................................................................................................ SS 6 Caso de Uso: Ap||cac|n de Ca[ero 8ancar|o............................................................ 34 6.1 Intiouuccion ...................................................................................................................................................... S4 6.2 Anlisis ue los Requeiimientos ................................................................................................................. S4 6.S Esqueleto ue la Aplicacion........................................................................................................................... S8 6.4 Configuiai la conexion a la base ue uatos............................................................................................. S8 6.S Cieai los mouelos ue Base ue Batos........................................................................................................ S9 6.6 Cieai el Inicio ue Sesion ............................................................................................................................... 42 6.7 Autenticanuo al Cliente................................................................................................................................. 4S 6.8 0n Nen paia la Aplicacion ........................................................................................................................ 47 6.9 visualizacion uel saluo uel cliente............................................................................................................ 48 6.1u Cieai el TiansactionActivity.................................................................................................................... S1 7 Ap||cac|ones en kumb|a Lnterpr|se ......................................................................... SS 7.1 Intiouuccion ...................................................................................................................................................... SS 7.2 Instancias uel fiamewoik ............................................................................................................................ SS LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S
7.S Estiuctuia ue uiiectoiios ue una Instancia.......................................................................................... SS 7.4 Publicai conteniuo esttico......................................................................................................................... S7 7.S Bootstiap............................................................................................................................................................. S8 7.6 Cieai la accion poi uefecto en una Aplicacion.................................................................................... S9 7.7 Cieai un pioceuimiento ue inicializacion ue la aplicacion............................................................ S9 7.8 Betectai un cambio en la ejecucion ue una instancia a otia......................................................... 6u 8 Componente Contro||er .......................................................................................... 61 8.1 Intiouuccion ...................................................................................................................................................... 61 8.2 Como funciona el componente Contiollei........................................................................................... 61 8.S Cieai un Contiolauoi..................................................................................................................................... 6S 8.4 Seivicios uel Componente Routei............................................................................................................ 64 8.S Seivicios piopoicionauos poi Bispatchei ............................................................................................ 66 8.6 Excepciones ueneiauas en el Bispatchei.............................................................................................. 67 8.7 Peticiones BTTP a Contiolauoies............................................................................................................. 69 8.7.1 AJministror orcbivos oJjuntos en uno peticin.............................................................................. 70 8.7.2 APl Je ControllerRequest........................................................................................................................... 70 8.8 Respuestas BTTP ue Contiolauoies........................................................................................................ 74 8.8.1 Fstoblecer el tipo Je soliJo Je lo Peticin.......................................................................................... 7S 8.8.2 APl Je ControllerResponse........................................................................................................................ 76 8.9 Contiolai acciones no encontiauas ......................................................................................................... 77 8.1u Filtios en contiolauoies............................................................................................................................. 78 8.11 Eniutamiento en contiolauoies ............................................................................................................. 79 8.11.1 Ciclo Je enrutomiento.............................................................................................................................. 79 8.11.2 Fnrutor usonJo Router::routeTo......................................................................................................... 79 8.11.S Fnrutor usonJo Router::routeTo0Rl{) ............................................................................................. 80 8.12 Inicializacion ue Contiolauoies.............................................................................................................. 81 8.1S Estauo ue peisistencia ue Contiolauoies........................................................................................... 82 8.1S.1 ventojos Jel FstoJo Je Persistencio................................................................................................... 8S 8.1S.2 ConsiJerociones Jel estoJo Je Persistencio.................................................................................... 8S 8.1S.S Tronsocciones y Concurrencio Jel FstoJo Je Persistencio ...................................................... 8S 8.1S.4 Fventos Jel estoJo Je Persistencio..................................................................................................... 84 8.14 La Clase ContiolleiBase ............................................................................................................................. 8S 8.1S La Clase Contiollei ....................................................................................................................................... 8S 8.16 Contiolauoies usanuo ApplicationContiollei .................................................................................. 8S 8.16.1 ControloJores usonJo HultiTbreoJController.............................................................................. 8S 8.17 Seivicios Web usanuo WebSeiviceContiollei.................................................................................. 86 8.17.1 u es un Web Service?............................................................................................................................ 86 8.17.2 Poro que son necesorios los Web Services....................................................................................... 87 8.17.S Arquitecturo 0rientoJo o Servicios {S0A) ...................................................................................... 87 8.17.4 Creor un Web Service ............................................................................................................................... 88 8.17.S WebServiceClient........................................................................................................................................ 90 8.17.6 0btenienJo el WSBl Je un Servicio Web......................................................................................... 91 8.17.7 0rquestocin Je servicios ....................................................................................................................... 92 8.17.8 Corocteristicos Je Servicios Web en Kumbio Fnterprise.......................................................... 94 8.18 Contiolauoies StanuaiuFoim................................................................................................................. 94 8.18.1 Corocteristicos Je StonJorJIorm....................................................................................................... 9S 8.18.2 limitontes Je StonJorJIorm................................................................................................................ 9S 8.19 Plugins ue Contiolauoies .......................................................................................................................... 9S 8.19.1 Creor un Pluqin Je ControloJor........................................................................................................... 9S 9 Componente UDDI .................................................................................................. 97 LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4
9.1 Intiouuccion ...................................................................................................................................................... 97 9.2 Requeiimientos................................................................................................................................................ 97 10 Componente 8us|nessrocess............................................................................... 98 1u.1 Intiouuccion.................................................................................................................................................... 98 1u.2 }ob Executoi .................................................................................................................................................... 98 1u.S Cieai un Pioceso ue Negocio................................................................................................................... 98 11 Componente I||ter ................................................................................................ 99 11.1 Intiouuccion.................................................................................................................................................... 99 11.2 Estiuctuia uel Componente ..................................................................................................................... 99 11.S 0sai filtios en foima uiiecta..................................................................................................................1u1 11.4 Cieai chains ue Filtios..............................................................................................................................1u2 11.S 0sai filtios en Contiolauoies ................................................................................................................1u2 11.6 Filtiai la entiaua ue usuaiio..................................................................................................................1uS 11.7 Cieai un filtio ue usuaiio........................................................................................................................1u4 11.7.1 Requerimientos Je un filtro Je usuorio..........................................................................................10S 12 Act|onne|pers ..................................................................................................... 107 12.1 Intiouuccion..................................................................................................................................................1u7 12.2 Nensajes usanuo Flash.............................................................................................................................1u7 12.2.1 6eneror mensojes contextuoles..........................................................................................................107 12.2.2 Combior el estilo por Jefecto Je los mensojes .............................................................................107 12.2.S Combior el estilo en formo Jinmico...............................................................................................108 12.2.4 Fnvior multiples mensojes Jel mismo tipo en formo simultoneo........................................108 12.2.S Hostror mensojes por su tipo..............................................................................................................109 12.2.6 Cocbeor mensojes poro mostrorlos en lo prximo peticin..................................................109 12.S Conuiciones SQL con FoimCiiteiia.....................................................................................................11u 12.S.1 Criterios Je Ronqos..................................................................................................................................112 12.S.2 0nir vorios conJiciones .........................................................................................................................11S 12.4 Infoimacion uel Navegauoi con Biowsei ........................................................................................114 12.4.1 APl Je Browser ..........................................................................................................................................114 12.S Autocompletai con Sciiptaculous........................................................................................................116 13 Componente Va||dator........................................................................................ 118 1S.1 Intiouuccion..................................................................................................................................................118 14 Segur|dad con kumb|a Lnterpr|se........................................................................ 119 14.1 Intiouuccion..................................................................................................................................................119 14.2 Caiacteiisticas ue Seguiiuau..................................................................................................................119 14.S Necanismos ue Seguiiuau.......................................................................................................................12u 14.4 Seguiiuau a nivel ue Capa ue Aplicacion ..........................................................................................12u 14.S Seguiiuau a nivel ue Capa ue Tianspoite.........................................................................................121 14.6 Implementai Seguiiuau Beclaiativa ..................................................................................................122 14.7 Implementai Seguiiuau Piogiamacional .........................................................................................124 14.8 Befinii Realms, 0suaiios y uiupos paia Autenticacion.............................................................124 14.8.1 Reolms...........................................................................................................................................................124 14.8.2 0suorios........................................................................................................................................................12S 14.8.S 6rupos ...........................................................................................................................................................12S 1S Componente ACL (L|sta de Contro| de Acceso) .................................................... 126 1S.1 Intiouuccion..................................................................................................................................................126 1S.2 Estiuctuia uel Componente ...................................................................................................................126 LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S
1S.S Que es un Recuiso. ..................................................................................................................................127 1S.4 Que es un Rol. ............................................................................................................................................127 1S.S Que es un Acceso......................................................................................................................................127 1S.6 Tipos ue Reglas ............................................................................................................................................127 1S.7 ACL en Accion...............................................................................................................................................127 1S.8 Beiencia ue Roles .......................................................................................................................................129 1S.9 Auaptauoies ue ACL ..................................................................................................................................129 1S.9.1 AclHoJel .......................................................................................................................................................1S0 1S.9.2 AclHemory...................................................................................................................................................1S0 1S.9.S AclXHl ..........................................................................................................................................................1S0 1S.1u API ue un Auaptauoi...............................................................................................................................1S2 1S.11 API ue AclResouice..................................................................................................................................1SS 1S.12 API ue AclRole ...........................................................................................................................................1SS 16 Componente Auth............................................................................................... 134 16.1 Intiouuccion..................................................................................................................................................1S4 16.2 Auaptauoies ue Auth.................................................................................................................................1S4 16.S Auministiacion ue Iuentiuau.................................................................................................................1SS 16.4 Expiiacion ue Sesion .................................................................................................................................1SS 16.S Contiol ue Autenticacion concuiiente ..............................................................................................1SS 16.6 Autenticacion con Nouelos.....................................................................................................................1S6 16.7 Autenticacion con Keibeiosv................................................................................................................1S7 16.8 Autenticacion con Rauius........................................................................................................................1S8 16.9 Autenticacion con Bigest .........................................................................................................................1S9 16.1u Autenticacion con LBAP........................................................................................................................14u 17 Componente Aud|tLogger ................................................................................... 142 17.1 Intiouuccion..................................................................................................................................................142 17.2 Cieai un componente ue contiol .........................................................................................................14S 18 Componente Secur|ty.......................................................................................... 143 18.1 Intiouuccion..................................................................................................................................................14S 18.2 Subcomponente SecuiityFiiewall........................................................................................................144 18.2.1 lntroJuccin...............................................................................................................................................144 18.2.2 Como se evoluon los reqlos ..................................................................................................................144 18.2.S Tipos Je Atributos Je uno Reqlo........................................................................................................14S 19 ers|stenc|a, 1ransacc|ones y Concurrenc|a......................................................... 146 19.1 Intiouuccion..................................................................................................................................................146 20 Componente Db.................................................................................................. 147 2u.1 Intiouuccion..................................................................................................................................................147 2u.2 Capas ue acceso ...........................................................................................................................................147 2u.S Auaptauoies uel componente Bb.........................................................................................................148 2u.4 ueneiacion ue SQL......................................................................................................................................149 2u.S Conexiones a gestoies ielacionales poi uefecto............................................................................1Su 20.S.1 ConsiJerociones poro 0rocle...............................................................................................................1S1 20.S.2 ConsiJerociones poro Hicrosoft Sl Server.................................................................................1S4 20.S.S ConsiJerociones poro HySl..............................................................................................................160 20.S.4 ConsiJerociones poro lBH lnformix.................................................................................................16S 20.S.S ConsiJerociones con Slite.................................................................................................................167 2u.6 Pool ue Conexiones ....................................................................................................................................167 20.6.1 Conexiones Je Bojo Nivel ......................................................................................................................168 LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 6
20.6.2 Trozor Conexiones ...................................................................................................................................169 2u.7 ueneiai Piofiles ue ejecucion ue SQL................................................................................................169 2u.8 Nanejai Excepciones ue Bb....................................................................................................................17u 20.8.1 Tipos Je Fxcepciones lonzoJos por el componente Bb............................................................170 20.8.2 lnformocin extenJiJo Je excepciones qeneroJos por Bb.....................................................171 2u.9 Tipos ue Resultauo al 0btenei ue Registios ...................................................................................174 2u.1u Leei iegistios.............................................................................................................................................174 2u.11 Nanipulai Registios................................................................................................................................178 2u.12 Auministiai Tiansacciones..................................................................................................................18u 2u.1S Cieai, Ceiiai y obtenei infoimacion ue conexiones.................................................................182 2u.14 Infoimacion ue Eiioies .........................................................................................................................18S 2u.1S 0btenei el valoi ue la columna iuentiuau .....................................................................................18S 2u.16 0btenei infoimacion ue Tablas .........................................................................................................184 2u.17 Cieai y Eliminai Tablas.........................................................................................................................184 2u.18 Fecha uel gestoi ielacional ..................................................................................................................186 2u.19 Bebug, Seguimiento y Tiaza................................................................................................................187 21 Componente Act|ve kecord - CkM...................................................................... 188 21.1 Intiouuccion..................................................................................................................................................188 21.2 Cuanuo usai ActiveRecoiu......................................................................................................................189 21.S Entiuaues........................................................................................................................................................189 21.S.1 Requerimientos Je los Closes Je FntiJoJes...................................................................................189 21.S.2 Atributos Je los FntiJoJes....................................................................................................................190 21.4 Atiibutos y Campos peisistentes.........................................................................................................19u 21.S Llaves Piimaiias..........................................................................................................................................191 21.6 Convenciones en llaves piimaiias.......................................................................................................192 21.7 Fechas Auto-Asignables ...........................................................................................................................192 21.8 Nultipliciuau en Relaciones ue Entiuaues .......................................................................................192 21.8.1 Convenciones en Relociones.................................................................................................................19S 21.8.2 Relociones 0niJireccionoles ................................................................................................................19S 21.8.S Relociones BiJireccionoles...................................................................................................................19S 21.8.4 Hucbos o uno .............................................................................................................................................19S 21.8.S 0no o Hucbos.............................................................................................................................................19S 21.8.6 0no o 0no ....................................................................................................................................................19S 21.8.7 Hucbos o Hucbos .....................................................................................................................................19S 21.9 API ue ActiveRecoiu..................................................................................................................................19S 21.9.1 0riqen Je Botos.........................................................................................................................................19S 21.9.2 volcoJo Je Heto-Botos..........................................................................................................................196 21.9.S Bebuq y Sequimiento..............................................................................................................................196 21.9.4 Tronsocciones ............................................................................................................................................197 21.9.S Consultor reqistros ..................................................................................................................................197 21.9.6 Contor reqistros ........................................................................................................................................200 21.9.7 PromeJior reqistros ................................................................................................................................200 21.9.8 Reolizor sumotorios................................................................................................................................201 21.9.9 0btener el volor mximo Je un otributo........................................................................................201 21.9.10 0btener el volor minimo Je un otributo......................................................................................202 21.9.11 Asiqnor volores o instoncios .............................................................................................................202 21.9.12 voliJocin.................................................................................................................................................202 21.9.1S lnformocin Je otributos ...................................................................................................................202 21.9.14 Creocin y octuolizocin Je reqistros...........................................................................................20S 21.9.1S Fliminocin Je reqistros.....................................................................................................................204 LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 7
21.9.16 0perociones en Botcb ..........................................................................................................................204 21.9.17 lecturo,escrituro Je Atributos .......................................................................................................20S 21.9.18 voliJocin.................................................................................................................................................20S 21.9.19 HultipliciJoJ Je relociones ...............................................................................................................20S 21.9.20 Eerencio.....................................................................................................................................................207 21.9.21 Fxcepciones ..............................................................................................................................................207 21.1u Iuentifieis ....................................................................................................................................................2u7 21.10.1 Fstoblecer el 6eneroJor......................................................................................................................208 21.10.2 Alqoritmo Ei,lo.....................................................................................................................................208 21.10.S Alqoritmo 00lB......................................................................................................................................209 21.10.4 6eneroJor 0niqlJ..................................................................................................................................209 21.10.S 6eneroJor Notive...................................................................................................................................210 21.10.6 Columnos lJentiJoJ y Secuencios ..................................................................................................210 21.11 Convenciones en Iuentificauoies ......................................................................................................211 21.12 Los Neta-uatos en ActiveRecoiuNetauata ...................................................................................212 21.12.1 Tipos Je Heto-Botos AlmocenoJos................................................................................................212 21.12.2 Heto-Botos en etopos Je Besorrollo.............................................................................................212 21.12.S APl Je ActiveRecorJHetoBoto.........................................................................................................21S 21.1S Cuisoies y Resulsets ue Consultas ...................................................................................................214 21.1S.1 0tilizor el cursor como tipo IorworJ-0nly ................................................................................21S 21.1S.2 0tilizor el cursor como Scrolloble..................................................................................................21S 21.1S.S APl Je ActiveRecorJResulset ............................................................................................................21S 21.14 Nensajes ue ActiveRecoiu ...................................................................................................................217 21.14.1 APl Je ActiveRecorJHessoqe............................................................................................................217 21.1S Tiansacciones en ActiveRecoiu.........................................................................................................218 21.1S.1 AJministrocion Je Tronsocciones ..................................................................................................219 21.1S.2 Sincronizocin Je Recursos con Tronsocciones .......................................................................221 21.1S.S ConsiJerociones Je Sincronizocin................................................................................................222 21.1S.4 APl Je TronsoctionBefinition...........................................................................................................22S 21.1S.S APl Je ActiveRecorJTronsoction....................................................................................................22S 21.1S.6 Timeouts en Tronsocciones...............................................................................................................226 21.16 valiuauoies ue Integiiuau ue Batos.................................................................................................227 21.16.1 voliJoJores poro otributos No-Nulos...........................................................................................229 21.16.2 Trotor el resultoJo Je un proceso Je voliJocin.....................................................................229 21.16.S voliJoJores Je 0suorio.......................................................................................................................2S0 21.16.4 Fventos en lo voliJocin.....................................................................................................................2S2 21.16.S lmplementor un evento Je voliJocin..........................................................................................2SS 21.16.6 Betener,Concelor uno operocin...................................................................................................2S6 21.16.7 Fstoblecer un evento con un nombre no estnJor..................................................................2S6 21.16.8 Fvento cuonJo el proceso Je voliJocin Jetiene lo operocin..........................................2S7 21.16.9 Besbobilitor eventos Je voliJocin................................................................................................2S8 21.17 Llaves Foineas viituales.....................................................................................................................2S8 21.17.1 Creor uno llove forneo virtuol .......................................................................................................2S9 21.17.2 0pciones Je los lloves forneos .......................................................................................................240 21.18 Entiuaues Tempoiales ...........................................................................................................................241 21.18.1 Creor un TempororyActiveRecorJ .................................................................................................242 21.18.2 Comportomiento Je un TempororyActiveRecorJ....................................................................242 21.18.S Tronsocciones con FntiJoJes Temporoles .................................................................................24S 21.18.4 0sor un TempororyActiveRecorJ...................................................................................................24S 21.19 ActiveRecoiu}oin......................................................................................................................................24S 21.19.1 Aqrupomientos con ActiveRecorJ}oin..........................................................................................248 LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 8
21.19.2 Pormetros Je ActiveRecorJ}oin....................................................................................................248 21.2u ActiveRecoiu0nion .................................................................................................................................249 21.21 SessionRecoiu ...........................................................................................................................................249 21.22 PiopeityAccessois y Nutatois...........................................................................................................2Su 21.2S Bynamic0puate y BynamicInseit .....................................................................................................2Su 21.24 Nanejo ue Excepciones..........................................................................................................................2S1 21.24.1 Copturor excepciones Jentro Je moJelos ...................................................................................2S2 21.24.2 lnformocin Je Fxcepciones .............................................................................................................2S2 21.2S Plugins ue Nouelos..................................................................................................................................2SS 21.2S.1 Creor un Pluqin Je ActiveRecorJ....................................................................................................2SS 21.26 0iganizacion ue Nouelos......................................................................................................................2SS 21.27 Auto-inicializacion ue Nouelos..........................................................................................................2S4 21.27.1 Activor iniciolizocin Jinmico.......................................................................................................2SS 22 Componente Lnt|tyManager ............................................................................... 2S6 22.1 Intiouuccion..................................................................................................................................................2S6 22.2 0btenei una nueva instancia ue un Nouelo....................................................................................2S6 22.S API uel Componente EntityNanagei ..................................................................................................2S7 22.S.1 HtoJos poro iniciolizor moJelos y obtener instoncios Je ellos .........................................2S7 22.S.2 HtoJos poro oJministror relociones Je multipliciJoJ..........................................................2S8 22.S.S HtoJos oJminitror poro FntiJoJes Temporoles......................................................................2S9 22.S.4 0riqenes Je Jotos .....................................................................................................................................260 22.S.S AJministror qeneroJores Je entiJoJes ..........................................................................................260 22.S.6 lloves forneos virtuoles.....................................................................................................................260 23 Componente 1ransact|onManager ...................................................................... 262 2S.1 Intiouuccion..................................................................................................................................................262 2S.2 Contexto ue Scope Peisistente..............................................................................................................262 2S.S Event Listeneis ............................................................................................................................................262 2S.4 Estauos ue las entiuaues..........................................................................................................................26S 2S.S Asignai el objeto al estauo auministiauo.........................................................................................26S 2S.6 API ue TiansactionNanagei...................................................................................................................264 24 resentac|n....................................................................................................... 26S 24.1 Intiouuccion..................................................................................................................................................26S 2S Componente V|ew .............................................................................................. 266 2S.1 Intiouuccion..................................................................................................................................................266 2S.2 }eiaiquia ue vistas en la piesentacion...............................................................................................266 2S.2.1 visto Principol ...........................................................................................................................................267 2S.2.2 Requerimientos Je lo visto Principol ..............................................................................................268 2S.2.S Requerimientos vistos o nivel Je ControloJor ............................................................................268 2S.2.4 Requerimientos Je loyouts Je ControloJores.............................................................................269 2S.2.S Requerimientos Je vistos Porcioles en ControloJores.............................................................269 2S.2.6 Requerimientos Je vistos Porcioles 6eneroles............................................................................269 2S.2.7 Requerimientos Je Plontillos Templotes....................................................................................270 2S.S Inseicion automtica y manual ue vistas .........................................................................................27u 2S.4 Implementai los tipos ue vistas............................................................................................................271 2S.S Tiansfeiii valoies uel contiolauoi a la vista ..................................................................................274 2S.S.1 Tronsferir meJionte otributos publicos .........................................................................................274 2S.S.2 Tronsferir meJionte setPoromToview...........................................................................................27S 2S.6 Contiolai Niveles ue Renueiizacion...................................................................................................276 2S.7 0tilizai mouelos en la piesentacion...................................................................................................277 LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 9
2S.8 Plugins ue view............................................................................................................................................277 2S.8.1 Creor un Pluqin Je view........................................................................................................................277 2S.9 API uel Componente view.......................................................................................................................278 2S.9.1 }erorquio Je renJerizocin..................................................................................................................278 2S.9.2 AJministror presentocin.....................................................................................................................278 2S.9.S visuolizor vistos proqromocionolmente........................................................................................279 2S.1u Cieai un componente ue Piesentacion peisonalizauo............................................................28u 2S.11 Cieai un componente ue piesentacion ue Excepciones no captuiauas...........................281 2S.12 Integiai otios Engines ue piesentacion.........................................................................................282 2S.12.1 Comportomiento Je lo inteqrocin................................................................................................282 2S.12.2 Componentes SoportoJos...................................................................................................................28S 26 Componente 1ag................................................................................................. 28S 26.1 Intiouuccion..................................................................................................................................................28S 26.2 Establecei el valoi ue helpeis cieauos con Tag.............................................................................28S 26.S Compoitamiento ue helpeis ..................................................................................................................286 26.4 API uel Componente Tag .........................................................................................................................286 26.4.1 Creor enloces..............................................................................................................................................286 26.4.2 Componentes Je interfoz Je usuorio ...............................................................................................289 26.4.S Componentes Je listos,combos..........................................................................................................290 26.4.4 Trotomiento Je etiquetos HFTA .......................................................................................................296 26.4.S Trotomiento e lnclusin Je orcbivos CSS.......................................................................................296 26.4.6 Componentes poro fecbos.....................................................................................................................297 26.4.7 lncluir recursos }ovoscript ...................................................................................................................298 26.4.8 lnteroccin con lo presentocin ........................................................................................................299 27 ne|pers IavaScr|pt............................................................................................... 301 27.1 Intiouuccion..................................................................................................................................................Su1 27.2 Clase Foimat .................................................................................................................................................Su1 27.2.1 lnstoncionJo lo close ..............................................................................................................................S01 27.2.2 Iunciones Je Iormot ..............................................................................................................................S0S 27.S Clase valiuatoi .............................................................................................................................................Su4 27.S.1 lnstoncionJo lo close ..............................................................................................................................S04 28 Componente DIDocument................................................................................ 306 28.1 Intiouuccion..................................................................................................................................................Su6 28.2 Cieai un uocumento PBF ........................................................................................................................Su6 28.S Agiegai una tabla al uocumento..........................................................................................................Su6 28.4 Tipos ue Papel Sopoitauos .....................................................................................................................Su8 28.S API ue PufBocument..................................................................................................................................Su8 29 Componente keport ........................................................................................... 31S 29.1 Intiouuccion..................................................................................................................................................S1S 29.2 Alcance uel componente..........................................................................................................................S1S 29.S Auaptauoies ue Repoit ............................................................................................................................S1S 29.4 Paginacion en iepoites.............................................................................................................................S17 29.S Ejemplo ue un listauo usanuo Repoit................................................................................................S17 29.6 Nouo vista Pievia.......................................................................................................................................S18 29.7 API ue Repoit................................................................................................................................................S19 30 Componente Ieed............................................................................................... 320 Su.1 Intiouuccion..................................................................................................................................................S2u Su.2 LeeiImpoitai uocumentos RSS..........................................................................................................S2u LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u
Su.S Cieai uocumentos RSS .............................................................................................................................S2u Su.4 API ue Feeu....................................................................................................................................................S21 31 Componente Core............................................................................................... 322 S1.1 Intiouuccion..................................................................................................................................................S22 S1.2 }eiaiquia ue Clases.....................................................................................................................................S22 S1.2.1 Close 0bject.................................................................................................................................................S22 S1.2.2 CoreConfiq...................................................................................................................................................S22 S1.2.S Corelocole...................................................................................................................................................S22 S1.2.4 CoreClossPotb............................................................................................................................................S22 S1.S Seivicios uel Componente Coie............................................................................................................S22 S1.S.1 0btener el lnstonce Nome ....................................................................................................................S22 S1.S.2 Zono Eororio Je los Aplicociones......................................................................................................S22 S1.S.S Combior el Cborset Je lo oplicocin.................................................................................................S2S S1.S.4 Combior lo locolizocin por Jefecto ................................................................................................S24 S1.S.S 0btener lo versin Jel Iromework...................................................................................................S24 S1.4 Subcomponente CoieConfig...................................................................................................................S24 S1.4.1 APl Jel subcomponente CoreConfiq .................................................................................................S2S S1.S Subcomponente CoieClassPath............................................................................................................S2S S1.S.1 Reemplozor un componente Jel Iromework...............................................................................S26 S1.S.2 APl Je CoreClossPotb..............................................................................................................................S26 S1.6 Subcomponente CoieType......................................................................................................................S26 S1.6.1 APl Je CoreType........................................................................................................................................S27 S1.7 Cieai Plugins ue Aplicacion....................................................................................................................S27 S1.7.1 Creor un Pluqin Je Aplicocin ............................................................................................................S27 32 Componente |ug|nManager .............................................................................. 329 S2.1 Intiouuccion..................................................................................................................................................S29 S2.2 Aiquitectuia ue Plug-Ins .........................................................................................................................S29 S2.S API ue PluginNanagei ..............................................................................................................................S29 33 Internac|ona||zac|n y Loca||zac|n...................................................................... 332 SS.1 Intiouuccion..................................................................................................................................................SS2 34 Componente Loca|e ............................................................................................ 333 S4.1 Intiouuccion..................................................................................................................................................SSS S4.2 Befinii la localizacion en una sesion ue 0suaiio...........................................................................SSS S4.2.1 0btener lo locolizocin oJecuoJo.....................................................................................................SSS S4.S Establecei la localizacion poi uefecto................................................................................................SS4 S4.4 0btenei tiauucciones localizauas........................................................................................................SS4 S4.S API uel Componente Locale....................................................................................................................SSS S4.6 Subcomponente LocaleNath..................................................................................................................SSS 3S Componente 1ras|ate.......................................................................................... 336 SS.1 Intiouuccion..................................................................................................................................................SS6 SS.2 Auaptauoies sopoitauos poi Tiaslate...............................................................................................SS6 SS.S Como funciona la tiauuccion.................................................................................................................SS6 SS.4 0tilizai tiauucciones .................................................................................................................................SS7 SS.4.1 ConsiJerociones poro el oJoptoJor Arroy....................................................................................SS8 SS.4.2 ConsiJerociones poro el oJoptoJor Csv .........................................................................................SS8 SS.4.S ConsiJerociones poro el oJoptoJor lni...........................................................................................SS8 SS.4.4 ConsiJerociones poro el oJoptoJor Botobose ............................................................................SS8 LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 11
36 Componente Date............................................................................................... 339 S6.1 Intiouuccion..................................................................................................................................................SS9 S6.2 Poique uebe usai este componente ...................................................................................................SS9 S6.S Timestamps ilimitauos.............................................................................................................................SS9 S6.4 Establecei el Timezone ............................................................................................................................S4u S6.S 0btenei paites o fiagmentos ue fechas ............................................................................................S4u S6.6 Posicion en el Tiempo...............................................................................................................................S41 S6.7 Infoimacion ue Fechas .............................................................................................................................S42 S6.8 Cambiai fiagmentos ue la fecha...........................................................................................................S4S S6.9 0peiaciones con fechas............................................................................................................................S44 S6.1u Localizacion ue Fechas...........................................................................................................................S4S S6.11 Establecei el foimato ue la fecha ......................................................................................................S46 S6.12 0btenei la fecha y hoia munuial .......................................................................................................S48 37 Componente Currency ........................................................................................ 349 S7.1 Intiouuccion..................................................................................................................................................S49 S7.2 Cantiuaues usanuo el foimato auecuauo..........................................................................................S49 S7.S Simbolo y nombie ue la moneua utilizaua.......................................................................................S49 S7.4 veisiones esciitas ue cantiuaues.........................................................................................................SSu S7.S API uel Componente Cuiiency..............................................................................................................SS1 38 Componente App||cat|onMon|tor ....................................................................... 3S2 S8.1 Intiouuccion..................................................................................................................................................SS2 S8.2 Infiaestiuctuia ue Eventos comunes.................................................................................................SS2 S8.S Componentes ue la Infiaestiuctuia ue Eventos ............................................................................SSS S8.S.1 CommonBoseFvent..................................................................................................................................SSS S8.S.2 Fmmiter........................................................................................................................................................SSS S8.S.S Fvent Service ..............................................................................................................................................SSS S8.4 Poique usai monitoiizacion. ..............................................................................................................SSS S8.4.1 Beterminocin Je problemos..............................................................................................................SSS S8.4.2 Sintonizocin Jel RenJimiento...........................................................................................................SSS S8.4.S ConfiobilJoJ Je lo 0perocin..............................................................................................................SS4 S8.S Qu se pueue monitoieai.....................................................................................................................SS4 39 Componente CommonLvent ............................................................................... 3SS S9.1 Intiouuccion..................................................................................................................................................SSS 40 Componentes de rops|to Genera|.................................................................... 3S6 4u.1 Intiouuccion..................................................................................................................................................SS6 41 Componente Conf|g ............................................................................................ 3S7 41.1 Intiouuccion..................................................................................................................................................SS7 42 Componente Lxtens|ons ..................................................................................... 3S8 42.1 Intiouuccion..................................................................................................................................................SS8 42.2 Caigai una extension uinmicamente...............................................................................................SS8 42.S Caigai una extension estticamente..................................................................................................SS8 42.S.1 Corqor componentes Je ZenJ Iromework....................................................................................SS9 42.4 0btenei infoimacion ue extensiones caigauas..............................................................................SS9 42.S Inyeccion ue componentes .....................................................................................................................SS9 43 Componente Logger............................................................................................ 360 4S.1 Intiouuccion..................................................................................................................................................S6u 4S.2 Auaptauoies ue Loggei ............................................................................................................................S6u LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 12
4S.S Tipos ue Eventos en Logs........................................................................................................................S6S 4S.4 Loggei Facilities ..........................................................................................................................................S64 4S.S Tiansacciones con Logs ...........................................................................................................................S6S 4S.6 API ue FileLoggei........................................................................................................................................S66 4S.7 0so ue NailLoggei......................................................................................................................................S67 4S.8 0so ue BatabaseLoggei............................................................................................................................S68 4S.9 0so ue CompiesseuLoggei .....................................................................................................................S68 4S.1u 0so ue SANLoggei...................................................................................................................................S69 4S.11 0so ue StieamLoggei..............................................................................................................................S7u 4S.12 0so ue SocketLoggei...............................................................................................................................S71 44 Componente Ut||s ............................................................................................... 372 44.1 Intiouuccion..................................................................................................................................................S72 44.2 API ue 0tils ....................................................................................................................................................S72 4S kend|m|ento y Cpt|m|zac|n............................................................................... 374 4S.1 Intiouuccion..................................................................................................................................................S74 4S.2 Consiueiaciones ue Renuimiento........................................................................................................S74 4S.2.1 0tilizocin Je pormetros por nombre ..........................................................................................S74 4S.2.2 lnstolor un Cocbe Je 0pCoJe ..............................................................................................................S74 4S.2.S Sintonizocin Jel ServiJor Web.........................................................................................................S7S 4S.2.4 Sintonizocin Je PEP..............................................................................................................................S76 46 Componente Cache............................................................................................. 377 46.1 Intiouuccion..................................................................................................................................................S77 47 Componente Comp||er ........................................................................................ 378 47.1 Intiouuccion..................................................................................................................................................S78 47.2 Teoiia ue optimizacion avanzaua........................................................................................................S79 47.2.1 0ptimizocin Je ciclos............................................................................................................................S79 47.2.2 0ptimizocin por evoluocin Je terminos estticos.................................................................S79 47.S Compoitamiento ue Compilei...............................................................................................................S79 47.S.1 0ptimizociones bsicos Je lo compilocin....................................................................................S79 47.S.2 0ptimizociones ovonzoJos Je lo compilocin.............................................................................S80 47.4 ueneiai una Compilacion........................................................................................................................S81 47.S Limitaciones ue Compilei........................................................................................................................S81 48 Componente GarbageCo||ector ........................................................................... 382 48.1 Intiouuccion..................................................................................................................................................S82 48.2 Poique usai este componente............................................................................................................S82 48.S Como funciona el uaibageCollectoi....................................................................................................S82 48.S.1 Iose Je Compresin.................................................................................................................................S82 48.S.2 Iose Je Fliminocin.................................................................................................................................S82 48.4 Activai el uaibageCollectoi....................................................................................................................S8S 48.4.1 Activocin Je monero proqromocionol..........................................................................................S8S 48.4.2 Activocin Je monero Jeclorotivo....................................................................................................S8S 48.S Paimetios uel Collectoi.........................................................................................................................S8S 49 Componente Sess|on........................................................................................... 38S 49.1 Intiouuccion..................................................................................................................................................S8S 49.2 Auaptauoies ue Sesion.............................................................................................................................S86 49.2.1 AJoptoJor Je Sesin Hemcocbe........................................................................................................S87 49.2.2 AJoptoJor Je Sesin Botobose...........................................................................................................S87 LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S
49.2.S AJoptoJor Je sesin Iiles .....................................................................................................................S87 49.2.4 AJoptoJor Je sesin louJer Cocbe ..................................................................................................S88 49.S Compoitamiento ue Sesiones................................................................................................................S88 49.4 Consiueiaciones ue Seguiiuau..............................................................................................................S88 49.S vaiiables ue sesion.....................................................................................................................................S89 49.S.1 APl Jel Componente Session................................................................................................................S89 49.6 SessionNamespace.....................................................................................................................................S9u 49.6.1 APl Je SessionNomeSpoce....................................................................................................................S91 S0 nerram|entas de| Desarro||ador .......................................................................... 393 Su.1 Intiouuccion..................................................................................................................................................S9S S1 Lrrores y Lxcepc|ones.......................................................................................... 393 S1.1 Intiouuccion..................................................................................................................................................S9S S1.2 Nouo S0PER_STRICT................................................................................................................................S94 S1.S Captuiai excepciones ue giaveuau leve ...........................................................................................S94 S2 Componente Debug ............................................................................................ 396 S2.1 Intiouuccion..................................................................................................................................................S96 S2.2 Seguimiento al estauo ue vaiiables.....................................................................................................S96 S2.S visualizai la tiaza uel seguimiento ue un valoi.............................................................................S97 S2.4 Betenei un pioceso meuiante Aseiciones .......................................................................................S98 S2.S Establecei una accion a ejecutai al finalizai el pioceso ue uebug ........................................S99 S3 1est de Un|dad.................................................................................................... 400 SS.1 Intiouuccion..................................................................................................................................................4uu SS.2 Tests paia Componentes .........................................................................................................................4uu S4 Componente Scr|pt ............................................................................................. 401 S4.1 Intiouuccion..................................................................................................................................................4u1 SS Apend|ces ........................................................................................................... 402 SS.1 Estnuaies ue Couificacion.....................................................................................................................4u2 SS.1.1 0bjetivos.......................................................................................................................................................402 SS.1.2 Iormoto Je Arcbivos PEP.....................................................................................................................402 SS.1.S Closes .............................................................................................................................................................402 SS.1.4 lnterfoces .....................................................................................................................................................402 SS.1.S HtoJos.........................................................................................................................................................402 SS.1.6 voriobles ......................................................................................................................................................40S SS.1.7 Constontes ...................................................................................................................................................40S SS.1.8 Boleonos y volores nulos .......................................................................................................................40S SS.1.9 literoles Je CoJenos Je Corocteres..................................................................................................40S SS.1.10 Substituciones Je voriobles ...............................................................................................................40S SS.2 Licencia ue este Bocumento...................................................................................................................4uS SS.2.1 Creotive Commons Attribution S.0...................................................................................................40S
1 Prefacio El piesente uocumento es uocumento touo-en-uno ue guia ue iefeiencia, API y tutoiial paia el uesaiiollo ue aplicaciones usanuo Kumbio Fnterprise Iromework. El piefacio contiene infoimacion sobie las convenciones utilizauas paia uesaiiollai este texto. 1.1 Antes de Leer este Documento Antes ue leei este texto usteu uebe tenei un buen conocimiento ue lenguaje PBP, piogiamacion oiientaua a objetos, tecnologias paia uesaiiollo Web como BTNL, CSS, }avaSciipt y otias como XNL, A}AX, SQL, asi como conocimientos en bases ue uatos y sistemas opeiativos. 1.2 Como esta organizado este Documento Kumbio Fnterprise es un fiamewoik iobusto paia el uesaiiollo ue aplicaciones empiesaiiales usanuo tecnologia abieita paia ambientes con altos iequeiimientos ue estabiliuau, ienuimiento y escalabiliuau. Toua su iobustez esta plasmaua en este extenso uocumento y espeia ofiecei toua la infoimacion posible paia el entenuimiento y apiovechamiento ue esta platafoima.
El uocumento ofiece una iefeiencia ue caua componente, junto con ejemplos y la API ue caua uno. Se busca que ielacione la aiquitectuia ue los componentes y como se integian unos con otios en foima ue seivicios.
La piimeia paite explica paia que y uonue pueue utilizai Kumbio Fnteprise Iromework caiacteiisticas, su instalacion y la aiquitectuia ue las aplicaciones como intiouuccion al contexto ue uesaiiollo e implementacion.
El capitulo ue Tutoiial iealiza la cieacion ue una aplicacion completa paso a paso como caso ue estuuio, integianuo los uifeientes componentes y aplicanuo la mayoi paite uel Fiamewoik como base ilustiativa uel mismo.
La segunua paite uetalla la capa ue logica ue uominio explicanuo touo lo ielacionauo con la oiquestacion ue contiolauoies y seivicios Web.
La teiceia paite explica caua componente y caiacteiisticas ue seguiiuau en el fiamewoik. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S
La cuaita paite habla ue la logica ue uatos y uetalla timinos ue peisistencia, concuiiencia y tiansacciones.
La quinta paite explica las caiacteiisticas y componentes ue inteinacionalizacion y localizacion que peimiten auaptai aplicaciones a conuiciones especificas geogificas, politicas, cultuiales o iegionales.
La sexta paite piesenta los componentes ue la capa ue piesentacion y las heiiamientas ue inteiaccion con el usuaiio final hacia la aplicacion.
La sptima paite explica componentes ue monitoiizacion y componentes ue pioposito geneial paia el uesaiiollo ue aplicaciones Web.
La octava paite explica los componentes que ayuuan a mejoiai el ienuimiento y optimizacion ue aplicaciones.
La novena paite uetalla el componente ue auministiacion, contexto y peisistencia ue sesiones ue usuaiio.
La ucima paite son las heiiamientas uel uesaiiollauoi como test ue uniuau, uebug ue piocesos y uatos, geneiacion ue couigo etc. 1.3 Convenciones Tipogrficas La siguiente tabla uesciibe las conuiciones tipogificas usauas en este texto:
!"#$%# '()$(*(+,-. /0#123. AoBbCJBeIf Bace iefeiencia a extianjeiismos uel lenguaje castellano que hacen iefeiencia a componentes, piouuctos, maicas, nombies ue mtouos o mouulos. El seiviuoi ue uiiectoiios lBAP AaBbCdDeFf Bace iefeiencia a couigo fuente o sentencias SQL. <?php
$filter = new Filter();
AaBbCdDeFf Bace iefeiencia a Pseuuocouigo paia valor := LLamarFuncion(); LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 16
iepiesentai fiagmentos ue couigo o pioceuimientos en lenguaje humano.
1.4 A Quien est Orientado este Texto Este uocumento est oiientauo a peisonas que ueseen apienuei en foima piofunua las capaciuaues ue Kumbio Fnterprise Iromework paia el uesaiiollo ue aplicaciones, sopoite a softwaie existente yo extenuei el mismo. 1.5 Informacin sobre marcas y productos referenciados Las siguientes son maicas ue piouuctos iefeienciauos que peitenecen a otias compaias y son mencionauas en este uocumento:
Fxcel !, Winuows, SQL Seivei y Woiu son maicas iegistiauas ue Hicrosoft Corporotion en estauos uniuos y otios paises. 0rocle ! es una maica iegistiaua ue 0rocle Corporotion en estauos uniuos y otios paises. lnformix ! es una maica iegistiaua ue IBN en estauos uniuos y otios paises. BB2 ! es una maica iegistiaua ue IBN en estauos uniuos y otios paises. AJobe Acrobot ! es una maica iegistiaua ue AJobe Corporotion en estauos uniuos y otios paises. Winuows !es una maica iegistiaua ue Niciosoft Coipoiation en estauos uniuos y otios paises. Nac 0S X !es una maica iegistiaua ue Apple en estauos uniuos y otios paises. 1.6 Referencias a sitios web de terceros Algunas 0RLs son iefeienciauas en este uocumento y piopoicionan infoimacion asociaua a estas.
4.%,5 LouueiTechnology no se hace iesponsable poi la uisponibiliuau ue sitios web ue teiceios mencionauos en este uocumento. LouueiTechnology no se hace iesponsable poi el conteniuo, publiciuau, piouuctos o otios mateiiales que estn uisponibles en estos sitios. LouueiTechnology no se hace iesponsable poi uaos o peiuiuas causauas bajo o sin conexion con el conteniuo en esos sitios y iecuisos.
1.7 Sus comentarios estn bienvenidos En LouueiTechnology estamos inteiesauos en el mejoiamiento la uocumentacion ue nuestios y sus piouuctos y pioyectos, poi esto sus comentaiios estn siempie bienveniuos. La iefeiencia ue este uocumento es KEF-11u8. Esciiba a suppoitlouueitechnology.com
2 Introduccin Kumbio Fnterprise es un fiamewoik PBP cuyo piincipal objetivo es la piacticiuau y faciliuau ue uso, sin uejai ue uaile impoitancia al ienuimiento, iobustez, piofesionalismo y caliuau ue una aplicacion oiientaua a la Web. Esta implementauo usanuo la veision S.2 ue PBP y est completamente oiientauo a 0bjetos. Los componentes estn integiauos y optimizauos lo cual aumenta el ienuimiento inteino uel fiamewoik y ue las aplicaciones uesaiiollauas con l.
El fiamewoik auicionalmente peimite usai componentes inuepenuientes y libieiias ue teiceios e integiailas a las aplicaciones uesaiiollauas.
Kumbio Fnterprise Iromework es una veision mouificaua uel Kumbio Iromework Comunitaiio veision u.S, el cul ha siuo estabilizauo y iefactoiizauo paia aumentai su iobustez y velociuau. La veision comunitaiia es punto funuamental ue innovacion y uesaiiollo paia la constante integiacion a la veision cieaua poi louJerTecbnoloqy. El objetivo ue este fiamewoik es foitalecei el uesaiiollo ue aplicaciones ue negocios oiientauas a una piesentacion Web que funcionen tanto en Intianets como en Inteinet. La cieacion ue sitios Web usanuo Kumbio Fnterprise es posible, aunque pueua encontiai otias heiiamientas ms inuicauas y ligeias paia esta taiea. El piesente uocumento explica en foima uetallaua caua componente uel fiamewoik. 2.1 Diferencias con la versin Comunitaria La veision mouificaua que uesaiiollamos en louJer Tecbnoloqy ha pasauo poi un iiguioso pioceso ue estabilizacion y caliuau que exigen entoinos ue piouuccion paia aplicaciones ue alta uisponibiliuau. Beneficios clave al usai Kumbio Fnterprise: Reuuccion ue costos opeiacionales cuanuo se implementan gianues sistemas Capaciuau ue escalamiento mejoiaua (clusteiizacion, cache uistiibuiuo) La posibiliuau ue obtenei sopoite en uifeientes niveles que mitigue el iiesgo y ayuue a eliminai el lock-in ue pioveeuoies ue heiiamientas ue uesaiiollo ue softwaie. Integiai las aplicaciones con couigo PBPS existente incluyenuo otios fiamewoiks LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 19
como Zenu Fiamewoik. Faciliuaues en la integiacion iequeiiua paia implementai aiquitectuias oiientauas a seivicios (S0A).
0tias mejoias esta veision: Sopoite paia mltiples aplicaciones ceitificauo Estiuctuia ue aichivos optimizaua paia mltiples aplicaciones Sopoite paia Tiansacciones ue Alto y Bajo nivel Auaptauoies ue conexion a gestoies ielacionales ceitificauos Requeiimientos ue haiuwaie ieuuciuos en un 4u% Auaptauoies ue Nanejauoies ue Sesion escalables Politicas ue Seguiiuau con auaptauoies paia gestoies ielacionales, lBAP, KerberosS y otios 2.2 Licencia Los mouelo ue negocios open-souice est uiseauo paia peimiile tanto a usteu como a sus socios expanuiise uesue pequeas instalaciones hasta las ms gianues sin geneiaile sobiecostos auicionales.
Kumbio Fnterprise Iromework es un pioyecto ue softwaie abieito con una licencia apta paia negocios apiovaua poi la 0SI (http:///www.opensource.org) llamaua New BSB y que se entiega con la uistiibucion uel fiamewoik.
3 Instalacin 3.1 Introduccin Kumbio Fnterprise Iromework iequieie ue PBP veision S.2.u o supeiioi paia un funcionamiento optimo. El fiamewoik iequieie uel Apocbe Web Server piefeiiblemente en su veision 2.u o 2.2 y uel mouulo mou_iewiite instalauo paia su coiiecto funcionamiento.
Kumbio Fnterprise Iromework sopoita auicionalmente Hicrosoft lnternet lnformotion Services {llS) uesue la veision 6.u utilizanuo el mouulo uel seiviuoi ISAPI_Rewiite.
Al uescaigai el paquete ue Kumbio Fnterprise Iromework este uebe sei uescompiimiuo y ubicauo en la iaiz ue uocumentos uel seiviuoi Web o en un subuiiectoiio ue este, este pueue vaiiai ue acueiuo a la platafoima o uistiibucion utilizaua. 3.2 Configuracin con Apache Web Server 2.x Kumbio Fnterprise Iromework implementa sopoite paia Smait 0RLs lo cual las hace ms familiaies y humanas paia los usuaiios finales. Paia esto es necesaiio instalai el mouulo ue Apache llamauo mou_iewiite que iealiza la ieesciituia ue las 0RLs a una convencion inteina en el fiamewoik, esto es vital paia la coiiecta implementacion uel pation aiquitectacional Nouel-view-Contiollei.
Apache piopoiciona el comanuo o2enmoJ en la mayoiia ue uistiibuciones Linux, meuiante este comanuo se pueue habilitai fcilmente el mouulo, uespus solo es necesaiio ieiniciai el seiviuoi Web.
Con el usuaiio auministiauoi ioot utilizamos el comanuo asi: # a2enmod rewrite # /etc/init.d/apache2 restart
En algunos sistemas como ReuBatFeuoia el comanuo paia ieiniciai el seiviuoi es: # service httpd restart
Paia Niciosoft Winuows es necesaiio habilitai el mouulo uiiectamente en el aichivo ue configuiacion ue Apache. Paia esto se quita el comentaiio uejanuo que el mouulo ue Apache Web Seivei sea caigauo: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 21
LoadModule rewrite_module modules/mod_rewrite.so
Las ieglas ue ieesciituia uel fiamewoik ueben sei leiuas poi Apache y ejecutauas en caua peticion a la aplicacion. Paia esto es necesaiio habilitai la lectuia ue los aichivos .btoccess o agiegai las ieglas al aichivo ue configuiacion ue Apache.
La ubicacion uel aichivo httpu.conf o uefault-seivei.conf pueue vaiiai ue acueiuo a la uistiibucion Linux o el sistema opeiativo. 6(7%8(9"+(:$ ;9(+,+(:$ 6(8#+%.8(. <,=> ?#9 ReuBat Enteipiise 4S etchttpuconfhttpu.conf vaiwwwhtml 0penSuSE 1u.11u.21u.S11 etcapache2uefault- seivei.conf sivwwwhtuocs 0buntuBebian etcapache2sites- availableuefault vaiwww Nac0S X (Leopaiu 1u.S) usanuo NANP ApplicationsNANPconf apachehttpu.conf ApplicationsNANPhtuocs Winuows XP2uuS usanuo XANPP c:\Aichivos ue Piogiama\xampp\apache\c onf\httpu.conf c:\Aichivos ue Piogiama\xampp\apache\htuocs\
Las ieglas ue ieesciituia ue mou_iewiite pueuen ii en los aichivos .htaccess incluiuos en el fiamewoik o en los aichivos ue configuiacion ue Apocbe Web Server. Las siguientes ieglas ueben peitenecei al aichivo .htaccess o al uiiectoiio iaiz uonue esta el fiamewoik: <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L] </IfModule>
Las segunuas ieglas ue configuiacion ueben ii en el aichivo .htaccess ubicauo en el uiiectoiio public asi: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
Cuanuo utilizamos aichivos .btoccess es necesaiio habilitai las opciones Allow0verriJe All y 0ptions All paia el uiiectoiio iaiz uel Web Seivei en el aichivo ue configuiacion ue Apache. Cuanuo agiegamos la configuiacion uiiectamente a los aichivos ue Apache Web Seivei uebemos usai la uiiectiva Biiectoiy asi: <Directory "/srv/www/htdocs/application"> <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L] /IfModule> </Directory>
Si no iequeiimos ue la utilizacion ue aichivos .htaccess es iecomenuable uesabilitailos meuiante Allow0verriJe None, ue esta foima evitamos que el seiviuoi Web busque este aichivo en caua uiiectoiio en caua peticion Web aumentanuo consiueiablemente el ienuimiento ue las aplicaciones. Tambin es impoitante ievisai que el aichivo inuex.php sea el piimeio en la uiiectiva BiiectoiyInuex, asi Apache Web Seivei le uai ms piioiiuau antes ue otias extensiones: DirectoryIndex index.php index.html
Bespus ue iealizai la configuiacion es necesaiio ieiniciai el seiviuoi Web. 3.3 Configuracin con Microsoft ISS e ISAPI Rewrite Paia esto uebemos agiegai al aichivo httpu.ini uel uiiectoiio iaiz uel paquete Kumbia lo siguiente: [ISAPI_Rewrite] RewriteCond URL (?!/javascript/|/img/|/files/|/css/|/temp/).* RewriteRule (.*?\.php)(\?[^/]*)?/([^/]*)/(.*) $1(?2$2&:\?url=/$3/$4) RewriteCond URL (?!/javascript/|/img/|/files/|/css/|/temp/).* RewriteRule ^/(.*) /public/index.php?url=/$1 [L] RewriteCond URL (?!/javascript/|/img/|/files/|/css/|/temp/).* RewriteRule /(.*) /public/$1
/$3,+#7 <#3,+(.$,-.7 Configuracin de Apache en RedHat Enterprise PHP sobre Microsoft IIS PHP sobre Apache 2.x sobre Windows LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S
PHP sobre Apache 2.x sobre Unix/Linux Instalando ISAPI Rewrite en Microsoft IIS 3.4 Configuracin de PHP La siguiente configuiacion es opcional paia Aplicaciones Web con Kumbia. A continuacion se listan los paimetios ue configuiacion uel php.ini: 4.198# 6#7+8(2+(:$ shoit_open_tag Peimite usai las etiquetas especiales ue php <.= y <. No se iecomienua si va a ieuistiibuii sus aplicaciones en seiviuoies ue teiceios. No es un estnuai piofesional ue PBP el uso ue estas etiquetas. uisplay_eiiois Peimite que al geneiaise un eiioi se muestien las iutas y aichivos uonue se geneian eiioies PBP, es til en entoinos uevelopment peio no en mouo piouuction. memoiy_limit En entoinos ue piouuccion 64N es un nmeio auecuauo paia este paimetio poi sciipt. Bebe sei ajustaua ue acueiuo a las ciicustancias. eiioi_iepoiting Kumbia Enteipiise Fiamewoik esta uesaiiollauo bajo nivel ue iepoite E_ALL | E_N0TICE | E_STRICT lo que aseguia la caliuau uel couigo y cumplimiento ue estnuaies bsicos ue uesaiiollo 00P en PBPS iegistei_globals Peimite que el conteniuo ue las supeiglobales se convieita en vaiiables locales. En geneial se uebe uejai ueshabilitauo ya que no es seguio ue muchas foimas. magic_quotes_gpc Al estai en 0n pouiia ayuuai a evitai ataques ue inyeccion ue SQL, al mismo tiempo hace que el ienuimiento uel seiviuoi sea algo menoi. session.use_only_coo kies Cuanuo tiene valoi 1 ayuua a evitai consiueiablemente ataques ue inyeccion ue SQL y XSS.
3.5 Configuracin con Zend Application Server ZenJ Applicotion Server es un seiviuoi paia aplicaciones PBP basauo en Apocbe Web Server poi lo tanto su configuiacion es similai.
Pueue seguii los pasos ue configuiacion ue Apocbe y iepiouuciilos en ZenJ Server. El mouulo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 24
iewiite ya est activauo poi uefecto lo que los pasos ue configuiacion ueben sei minimos. 3.6 Crear una Instancia de Kumbia Enterprise El fiamewoik se uistiibuye en un aichivo compiimiuo multi-platafoima que contiene la estiuctuia ue aichivos uel fiamewoik y iecuisos necesaiios paia el uesaiiollo, piueba e implementacion ue aplicaciones en Kumbia Enteipiise.
El nombie uel aichivo tiene la siguiente estiuctuia kumbio-ef-version-moJurez-extension.
3.7 Solucin a problemas de instalacin Las siguientes situaciones se pueuen piesentai al iealizai la instalacion ue una instancia uel fiamewoik:
'(%",+(:$5 4. %(#$# @.-A<#?8(%# -# B2,+C# ($7%,3,-. El seiviuoi web no tiene el mouulo iewiite instalauo, consulte la seccion "Configuiacion con Apache Web Seivei 2.x" en el capitulo ue instalacion.
'(%",+(:$5 /$ 3, 2,$%,33, 7# 28#7#$%, #3 1#$7,0# D4. 7# 2"-. "%(3(>,8 8##7+8(%"8, -# ;<E7F Se uebe veiificai lo siguiente:
! Si se usa Apocbe Web Server el aichivo '.htaccess' uebe estai piesente en la iaiz uel uiiectoiio uonue est la instancia uel fiamewoik o las ieglas en este ueben estai activas en la configuiacion uel seiviuoi web. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S
! Apocbe Web Server sopoita aichivos ue sobieesciituia ue configuiacion '.htaccess'. ! La opcion ue configuiacion ue Apache 'Allow0veiiiue All' no est piesente paia las opciones ue configuiacion uel BocumentRoot uel seiviuoi web.
La uiiectiva uel seiviuoi Web ue aichivos poi uefecto le est uanuo piioiiuau al aichivo inuex.html y no al inuex.php. En el caso ue Apocbe Web Server esto se soluciona meuiante la opcion ue configuiacion BirectorylnJex.
'(%",+(:$5 B3 ($)8#7,8 , 3, ,23(+,+(:$ 7# )#$#8, 3, #H+#2+(:$ DI.8#/H+#2%(.$5 /3 -(8#+%.8(. 2"93(+J%#12 $. %(#$# 2#81(7.7 -# #7+8(%"8,F Esta excepcion se geneia cuanuo el uiiectoiio publictemp es un uiiectoiio ue solo lectuia o no tiene peimisos ue esciituia paia el usuaiio con el que se ejecuta el pioceso uel seiviuoi web.
'(%",+(:$5 B3 ($)8#7,8 , 3, ,23(+,+(:$ 7# )#$#8, 3, #H+#2+(:$ DI.8#/H+#2%(.$5 6#9# %#$#8 ($7%,3,-. KLK M#87(.$ NOPQ : 7"2#8(.8 2,8, "%(3(>,8 #7%# *8,1#R.8SF La veision ue PBP que tiene instalaua es igual o supeiioi a la veision S.u peio es infeiioi a la S.2.u. La veision S.2.u en auelante coiiige eiioies impoitantes ue seguiiuau en en ncleo ue PBP y tiene un mejoi ienuimiento.
'(%",+(:$5 B3 ($)8#7,8 , 3, ,23(+,+(:$ 7# )#$#8, 3, #H+#2+(:$ DI.8#/H+#2%(.$5 T(1#>.$# ($MU3(-.F Ba uefiniuo una zona hoiaiia en el aichivo configconfig.ini invliuo poi lo que muchas opciones uel fiamewoik geneiain infoimacion eiionea.
'(%",+(:$5 B3 ($)8#7,8 , 3, ,23(+,+(:$ 7# )#$#8, 3, #H+#2+(:$ D<."%#8/H+#2%(.$5 4. 7# C, ($-(+,-. 3, ,23(+,+(:$ 2.8 -#*#+%. #$ +.$*()J+.$*()O($( V-#*,"3%B22WF La opcion uefaultApp en el aichivo ue configuiacion ue la instancia no existe o uefine una aplicacion que no existe en la instancia uel fiamewoik.
6#9# ($-(+,8 #3 $.198# -# 3, ,23(+,+(:$ -#$-# #7%U #3 ,8+C(M. X+.$*()O($(XF La opcion uefaultApp en el aichivo ue configuiacion ue la instancia no existe o uefine una aplicacion que no existe en la instancia uel fiamewoik.
4 Qu es Kumbia Enterprise Framework? 4.1 Sobre Aplicaciones Web Cuanuo la web se empezo a tomai ms en seiio, no solo paia piesentai sitios Web con conteniuo esttico o simplemente infoimativo y se uio paso a la piestacion ue seivicios con conteniuo uinmico, la estiuctuiacion y piofesionalizacion ue las aplicaciones Web se hace eviuente como una foima ue ofiecei caliuau y confiabiliuau a clientes, pioveeuoies, inveisionistas, empleauos y touo el entoino ue las empiesas y oiganizaciones en foima noveuosa y eficiente.
La aceptacion geneial uel lenguaje PBP como heiiamienta especializaua en el entoino Web y su amplio uesenvolvimiento asi como sencillez ue uso, han apoitauo consiueiablemente al ciecimiento y capaciuau ue implementacion ue alta tecnologia en la Web. 4.2 Sobre PHP y la Web A tiavs ue los aos PBP se ha conveitiuo en un estnuai ue facto paia la constiuccion ue softwaie paia Inteinet ue alta escalabiliuau y velociuau. Nuchos ue los sitios ms populaies y concuiiiuos en la actualiuau incluyenuo Wikipeuia, Yahoo! y Facebook. 4.3 Introduccin Kumbio Fnterprise Iromework es un conjunto ue tecnologias paia la piouuccion ue softwaie que integia una noveuosa platafoima ue miuulewaie piopoicionanuo seivicios ue peisistencia, tiansacciones, mensajes y clusteiing a aplicaciones basauas en PBP que esten oiientauas a la Web.
Poi aos la mauuiez uel uesaiiollo empiesaiial en PBP ha evolucionauo inciementalmente y hoy en uia se cuenta con piouuctos mauuios que pueuen piopoicionai alteinativas que ieuuzcan los costos ue tecnologias ue infoimacion y pueuan sei aplicauos a entoinos empiesaiiales uesue la meuiana y pequea empiesa hasta gianues aplicaciones oiientauas al cliente final.
Nuestia platafoima pietenue unificai la platafoima tecnologica ue backenu y fiontenu aceleianuo los piocesos ue uesaiiollo e implementacion ue softwaie usanuo miuulewaie multiplatafoima escalable con tecnologia open-souice. Paia logiai esto una ue nuestias fichas LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 28
claves es Kumbio Fnterprise Iromework.
Kumbio Fnterprise es un fiamewoik especialmente oiientauo al entoino empiesaiial, que implementa las mejoias picticas ue uesaiiollo ue softwaie y picticas oiientauas a las Web ue la actualiuau e intenta fomentai piincipalmente la geneiacion ue aplicaciones piofesionales, potentes, seguias y mantenibles en el tiempo paia empiesas que ueseen auoptai softwaie abieito y tecnologia PBP.
uiacias al apoyo ue uifeientes empiesas patiocinauoias y ue louJerTecbnoloqy ahoia es posible implementai aplicaciones con una base ue couigo ms soliua, estable y funcional junto con un seivicio ue sopoite que aseguie que su uesaiiollo y mejoiamiento sei continuo en el tiempo. 4.4 Caractersticas del Framework Sumauas a las ue su heimano comunitaiio, Kumbio Fnterprise Iromework posee las siguientes caiacteiisticas: Aiquitectuia Nouelo-vista-Contiolauoi (Nltiples Aplicaciones extenuible con Plugins y Eventos) Componente ue Cacheo Flexible 0bject-Relational-Napping (0RN) potente y iobusto (Tiansacciones, valiuauoies, }oins, 0nions, ueneiauoies, Nultipliciuau ue Relaciones, Beiencia) Business Piocess Nanagement (BPN) Seivicios Web (Integiacion y 0iquestamiento) (Soap, SCA) Componente ue Auministiauoi ue Sesion (Session EonJlinq) Flexible (Nemcacheu, Batabase, LouueiCache, Files) Componente ue Autenticacion (LBAP, Nouel, Keibeiosv, Rauius) con sopoite paia Sesion Activa y Expiiacion ue Sesion Componente ue Access List Contiol (ACL) Flexible (Nouel, Nemoiy, Xml) Componente ue Auuitoiia ue Sistemas Sistema ue Logging Flexible (File, Compiesseu, Nail, Batabase,Stieam,SCA) Localizacion (Tiauuccion, Fechas, Noneuas) inuepenuiente ue la platafoima Nonitoieo ue Aplicaciones (CommonEventInfiastiuctuie) Componente paia geneiacion ue iepoites empiesaiiales en mltiples foimatos (Puf, LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 29
Excel, Btml) Componente paia implementacion ue seivicios WebBAv Componentes ue conexion a motoies ue base ue uatos ceitificauos (0iacle y NySQL) Semi-Compilauoi paia el Fiamewoik y las aplicaciones uaibageCollectoi ue Sesion Plantillas ipiuas y flexibles Filtios y valiuacion Integiaua Tests ue 0niuau Bebug, Tiaza y Piofiling avanzauo Componente ue Configuiacion Flexible (Ini, Xml, PBP) Bocumentos PBF con PufBocument Integiacion con Louuei Clusteiing Technology Integiacion con Louuei Cache Integiacion con IBN WebSpheie sNash 4.5 PHP en entornos crticos El lenguaje PBP no ha teniuo una gian paiticipacion en entoinos ue aplicaciones ciiticas y en un muchos casos ha siuo ielegauo a la cieacion ue sitios Web y poitales. Algunas caiacteiisticas uel lenguaje PBP como la tipificacion ubil y su caictei inteipietauo pueuen y han hecho uesconfiai a oiganizaciones en su implementacion en softwaie gianue y complejo.
Kumbio Fnterprise Iromework ha siuo uiseauo paia mantenei estiictos contioles ue valiuacion ue tipos e integiiuau ue uatos, gaiantizanuo en gian meuiua que los piocesos, entiaua y saliua ue uatos, cumplan a satisfaccion con los iequeiimientos ue negocio sin peiuei la potencia y capaciuaues paia el uesaiiollo ipiuo que ofiece la tecnologia PBP.
Pioyectos y piouuctos como APC (Alteinative PBP Cache), Zenu 0ptimizei, eAccelatoi, Zenu uuaiu y otios ms, peimiten llevai aplicaciones en PBP a un caictei semi-inteipietauo y hasta piotegei la piopieuau intelectual uel couigo fuente uel softwaie.
En iesumen se pueue uecii que existe actualmente entoinos y tecnologia que peimiten el uesaiiollo e implementacion satisfactoiia ue aplicaciones paia entoinos ciiticos basauos en el lenguaje PBP.
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su
5 Arquitectura 5.1 Introduccin Kumbio Fnterprise peimite el uesaiiollo ue aplicaciones en vaiias capas esto peimite iompei un sistema en subsistemas ms pequeos ieuucienuo la complejiuau uel mismo y piopoicionanuo impoitantes beneficios.
Cuanuo se tiabaja con un sistema multi-capa se entienue que existen capas ue alto nivel y otias ue menoi nivel, las ue mayoi nivel apiovechan la funcionaliuau implementaua en las capas infeiioies ocultanuo uetalles que no iequieien ue un entenuimiento inmeuiato aunque ieuucienuo la flexibiliuau en una u otia meuiua.
Los piincipales beneficios ue implementai sistemas multi-capa son:
Es posible tiabajai sobie una capa supeiioi sin necesiuau ue conocei como funcionan las capas infeiioies. Cuanuo uesaiiolla con Kumbio Fnterprise utiliza una capa ue alto nivel que aumenta la piouuctiviuau sin iequeiii el entenuimiento en piofunuiuau ue compoitamientos o funcionaliuau ue bajo nivel. 0na capa pueue sei sustituiua poi otia mantenienuo una inteiface consistente que se auapte a necesiuaues especificas sin mouificai la aplicacion poi completo. 5.2 Capas en una Aplicacin 0na aplicacion Web uesaiiollaua en Kumbia se sepaia en S capas piincipales llamauas: Logica ue Bominio, Peisistencia y Piesentacion.
La logica ue uominio o ue negocio es quien uicta las ieglas sobie como uebe tiabajai la aplicacion en si. Constituye touo lo que tiene que vei con clculos ue entiaua ue uatos, valiuaciones, piocesos y como se piesentaian los uatos en la capa ue piesentacion.
La peisistencia yo logica uel mouelo ue uatos tiata sobie como la logica ue uominio iequieie ue los uatos que le piopoicionan seivicios ue bases ue uatos, sistemas ue tiansacciones, mensajes, sistemas ue aichivos, etc.
La piesentacion tiata ue touos aquellos elementos que peimiten la inteiaccion entie el LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S1
usuaiio final y la aplicacion. En una aplicacion Web se iefieie auems a las tecnologias ue lauo uel cliente como CSS o }avaSciipt, los navegauoies, los lenguajes ue maicas y ue tiansfoimacion.
Caua capa mencionaua anteiioimente ofiece seivicios y tiene iesponsabiliuaues uifeientes en una aplicacion empiesaiial, la claia sepaiacion ue estas capas es funuamental paia un uesaiiollo satisfactoiio. Los componentes paia la auministiacion y uso ue caua capa son piopoicionauos poi el fiamewoik asi como seivicios ue integiacion entie ellos tambin.
5.3 Usando Modelo-Vista-Controlador Las aplicaciones en Kumbia utilizan el pation aiquitectacional llamauo NvC. Con l las aplicaciones Web se pueuen sepaiai en S capas bien uefiniuas ayuuanuo a la mantenibiliuau ue la misma y exigienuo un oiuen y claiiuau que con el tiempo alaiga la viua til ue las mismas. @.-#3.75 Repiesentan la infoimacion sobie la cual la aplicacion opeia, las entiuaues y su logica ue negocio. Contienen touas las valiuaciones, constiaints y ieglas que hacen que la logica uel negocio se cumpla y haya integiiuau en los uatos. Coiiesponue a la capa ue peisistencia. Y(7%,75 visualizan el mouelo usanuo inteifaces Web e inteiactuanuo con los usuaiios ue stas. Coiiesponue a la capa ue Piesentacion. I.$%8.3,-.8#75 Atienuen, iesponuen y eniutan las acciones solicitauas poi el usuaiio final e invocan cambios en las vistas o en los mouelos segn sea necesaiio. Coiiesponue a la capa ue logica ue uominio. Los contiolauoies estn sepaiauos en paites, llamauas front controller y en un conjunto ue acciones. Caua accion pueue inteiactuai ue foima uifeiente ue acueiuo al tipo ue peticion. Las vistas estn sepaiauas en layouts, templates, vistas ue accion y paitials. El mouelo ofiece una capa ue abstiaccion ue la base ue uatos llamaua 0RN que auems uan funcionaliuau agiegaua a uatos ue sesion y valiuacion ue integiiuau ielacional. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S2
Este mouelo ayuua a sepaiai el tiabajo ue la logica ue negocios (mouelos) y la piesentacion (vistas)
El contiolauoi ayuua a ocultai los uetalles ue piotocolo utilizauos en la peticion (BTTP, mouo consola, etc.) paia el mouelo y la vista. Finalmente, el mouelo abstiae la logica ue uatos, que hace a los mouelos inuepenuientes ue las vistas.
Kumbio Fnterprise Iromework agiega componentes y plugins que inteiactan con la aiquitectuia ue la aplicacion.
/$3,+#7 <#3,+(.$,-.7 Modelo Vista Controlador 5.4 Ventajas de usar MVC Al implementai el pation aiquitectacional NvC es posible sepaiai claiamente la foima en la que se piesenta la infoimacion, ue la foima en la que se almacena, ue la foima en la que oiquesta la logica ue la aplicacion. Be esta foima es menos complicauo: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS
Betectai en que capa se esta geneianuo un pioblema ue la aplicacion. Poi ejemplo si un pioceso no se esta ejecutanuo coiiectamente es muy piobable que el pioblema este en el contiolauoi. Si se agiega un nuevo constiaint (iestiiccion) al mouelo ue uatos este se aplica a touo el sistema inmeuiatamente. Si los uiseauoies iequieien tiabajai en la piesentacion esto es posible sin que se afecte la logica ue negocio o el mouelo ue uatos. Befinitivamente la aplicacion se hace ms mantenible y ieusable cieanuo uniuaues que inteiactan entie si y estn sepaiauas en foima logica ue maneia claia. 5.5 Loose Coupling/Tight Coupling 0no ue los objetivos ue uiseo ue Kumbio Fnterprise Iromework es buscai que el aiquitectouesaiiollauoi no tenga que integiai ningn componente paia uefinii la estiuctuia ue su aplicacion poi esta iazon vaiios componentes son uepenuientes los unos ue los otios piopoicionanuo un entoino reoJy-to-use uonue sea posible uesaiiollai y ejecutai aplicaciones empiesaiiales favoiecienuo piincipios ue ieusabiliuau y ienuimiento ue cualquiei aplicacion.
Los pationes ue uiseo virtuolProxy y BepenJecylnjection son utilizauos paia peimitiile al uesaiiollauoi ieemplazaiintegiai componentes esciitos poi teiceios a la aplicacion.
Nuchos otios componentes estn pensauos en sei ubilmente acoplauos o loose coupling ue tal foima que pueuan sei integiauos a otias aplicaciones esciitas en otios fiamewoiks.
Kumbio Fnterprise Iromework ofiece avanzaua funcionaliuau cuyo nivel ue mauuiez es similai o supeiioi al ue otios fiamewoiks PBP actuales.
6 Caso de Uso: Aplicacin de Cajero Bancario 6.1 Introduccin En el piesente capitulo uel manual ue iefeiencia se tiatai ue ilustiai con un ejemplo ue aplicacion las piincipales caiacteiisticas uel Fiamewoik en un ejemplo pictico.
La iuea es cieai una aplicacion que siiva como un futuio cajeio electionico viitual paia un banco llamauo Cential Bank. Las ieglas uel negocio son las siguientes:
Los clientes uel banco pueuen entiai a la sucuisal viitual usanuo el nmeio ue su iuentificacion peisonal y la clave ue alguna ue sus taijetas. 0na vez autenticauos los clientes pueuen consultai sus extiactos, hacei tiansfeiencias a otias cuentas y ievisai su saluo.
El uesaiiollo e implementacion ue aplicaciones bancaiias exige iequeiimientos altisimos ue seguiiuau, piestaciones, alta uisponibiliuau, infiaestiuctuia ue ieues y piobablemente la implementacion ue muchas ieglas financieias y bancaiias paia que el sistema sea funcional y usable. Sin embaigo, paia que nuestio ejemplo no sea eteino y no se salga ue contexto, vamos a cieai un sistema muy simplificauo peio que siiva paia entenuei los conceptos y entoino ue tiabajo con el Fiamewoik.
Pueue que sea necesaiio entenuei los conceptos ue 0RN (ActiveRecoiu) y el funcionamiento uel componente Contiollei y view, paia una mayoi compiension uel piesente Tutoiial. 6.2 Anlisis de los Requerimientos Bacienuo un anlisis ms piofunuo uel tema iuentificamos las siguientes entiuaues:
I3(#$%#7: Son el usuaiio final ue la aplicacion y se asume que habi una entiuau uonue se mantenui la infoimacion asociaua a ellos. I"#$%,7: Nanejan el saluo actual ue la cuenta, su saluo en canje y su ielacion a clientes. @.M(1(#$%.: Almacena un log ue las opeiaciones iealizauas poi el cliente en sus LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS
cuentas y sei utilizauo paia geneiai los extiactos uel cliente. Z$%#8#7#7: Son los inteieses ganauos poi el cliente caua uia que tiene su uineio en el banco. '"+"87,3#7: Es la ubicacion en la que se iealiza la tiansaccion bancaiia.
Paia uesaiiollai el ejemplo se utiliza una base ue uatos usanuo el RBBN NySQL S.u, esta base ue uatos es multiplatafoima y se instala fcilmente en la mayoi paite ue sistemas opeiativos. El nombie ue la base ue uatos sei 'bankub'. Cieamos la base ue uatos asi:
CREATE DATABASE nombre_bd CHARACTER SET utf8;
La estiuctuia ue las tablas sei la siguiente:
T,93, I"7%.1#8: Auministia la infoimacion ue los clientes uel banco
Besciipcion ue los campos: I,12. 6#7+8(2+(:$ iu Es la llave piimaiia ue la tabla y es auto numiica. iuentification Es el numeio ue iuentificacion ue la peisona. sucuisal_iu Es el couigo ue la sucuisal uonue se cieo la cuenta. name Es el nombie ue la peisona email Es el coiieo electionico uel cliente cieateu_at Es la fecha en la que se cieo el cliente en la base ue uatos status Es el estauo uel cliente en el banco. (A)ctivo o (I)nactivo
T,93, B++."$%: Auministia la infoimacion ue las cuentas y sus saluos
CREATE TABLE `account` ( `id` int(11) NOT NULL auto_increment, `number` int(22) NOT NULL, `password` varchar(40) NOT NULL, LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S6
I,12. 6#7+8(2+(:$ iu Es la llave piimaiia ue la tabla y es auto numiica. numbei Es el nmeio ue la cuenta passwoiu Es el iesumen SBA1 ue la clave ue la cuenta sucuisal_iu Es la sucuisal en uonue se cieo la cuenta. customei_iu Es el cliente al que peitenece la cuenta balance Es el saluo que tiene la cuenta. swap_balance Es el saluo que tiene en canje. type Inuica si la cuenta es ue ahoiios o coiiiente. cieateu_at Es la fecha en la que se cieo la cuenta en la base ue uatos status Es el estauo uel cliente en el banco. (A)ctivo o (I)nactivo
T,93, @.M#1#$%: Auministia la infoimacion ue los movimientos iealizauos en las cuentas
I,12. 6#7+8(2+(:$ iu Es la llave piimaiia ue la tabla y es auto numiica. account_iu Es la cuenta en la que se iealizo el movimiento ubication_iu Es la ubicacion en la que se geneio el movimiento cash Es el monto poi el que se iealizo el movimiento cieateu_at Es la fecha en la que se cieo la cuenta en la base ue uatos
T,93, '"+"87,3: Auministia la infoimacion ue las sucuisales uel banco
I,12. 6#7+8(2+(:$ iu Es la llave piimaiia ue la tabla y es auto numiica. name Nombie ue la sucuisal ubication_iu Es la ubicacion uonue se encuentia la sucuisal
T,93, ;9(+,%(.$5 Auministia la infoimacion ue las ubicaciones uonue se pueuen iealizai opeiaciones bancaiias.
6.3 Esqueleto de la Aplicacin 0na vez cieauo el mouelo ue uatos geneiamos el esqueleto ue aplicacion uonue ii ubicauo los aichivos fuente ue la aiquitectuia NvC. Paia esto uebemos cieai un uiiectoiio llamauo 'bank' en apps y los subuiiectoiios contiolleis, config, mouels y views. 0na foima iapiua ue cieai el esqueleto ue la aplicacion es utilizai el sciipt cieate_application.php en mouo consola:
Al ubicaise uentio uel uiiectoiio uonue esta la instancia uel Fiamewoik usamos el comanuo:
php script/create_application.php name bank
El nombie uel uiiectoiio que tiene el Fiamewoik se llama 'example'. La siguiente estiuctuia ue aichivos se ha cieauo:
0na vez uefiniua la estiuctuia ue uiiectoiios ue la aplicacion es posible empezai a uesaiiollai sobie ella. La aplicacion se encuentia en entoino ue uesaiiollo y touo lo ielacionauo con ello esta activauo poi uefecto. 6.4 Configurar la conexin a la base de datos Paia empezai a piobai los contiolauoies y la iteiacion con los mouelos es necesaiio configuiai la conexion a la base ue uatos que se va a utilizai en el entoino ue uesaiiollo. Paia esto se euita el aichivo ue configuiacion environment.ini cieauo en el uiiectoiio config:
Estos paimetios sein usauos en toua la aplicacion paia conectaise a la base ue uatos ue uesaiiollo. Kumbio Fnterprise Iromework peimite uefinii una aiquitectuia ue S capas en caso ue que se necesite utilizai la base ue uatos en un seiviuoi exteino al ue uesaiiollo. 6.5 Crear los modelos de Base de Datos 0n mouelo uebe ii ubicauo en el uiiectoiio moJels ue la aplicacion. Los nombies ue los aichivos ue mouelos "ueben" tenei el nombie ue la tabla a mapeai (esto es una convencion). En caua aichivo uebe existii una sola clase con el nombie uel mouelo usanuo notacion camelizaua. Las clases ue mouelos "ueben" heieuai ue la clase ActiveRecorJ.
0n ejemplo ue un mouelo ue la tabla ubication es el aichivo moJels,ubicotion.pbp que implementa la clase 0bicotion asi:
<?php
class Ubication extends ActiveRecord {
}
Al uefinii un mouelo con una implementacion ue atiibutos 'vacia' se inuica a ActiveRecorJ que uebe cieai los atiibutos ue la tabla en foima uinmica y poi lo tanto la visibiliuau ue esta sei pblica. En geneial esto no es una buena piactica ue uesaiiollo ya que se ueja al uescubieito la piivaciuau ue los valoies ue los campos sin que haya ningn contiol en su acceso. Paia solucionai esto e implementai un mouelo ms seguio se hace asi:
<?php
class Ubication extends ActiveRecord {
protected $id; protected $name;
public function getId(){ return $this->id; }
public function setId($id){ $this->id = $id; }
public function getName(){ return $this->name; }
public function setName($name){ $this->name = $name; }
Los getteis y setteis piopoicionan puntos unificauos paia obteneiestablecei los valoies inteinos uel mouelo. En geneial, caua tabla que se utilice en la aplicacion uebe sei mapeaua poi un mouelo en la misma. El sciipt creote_oll_moJels.pbp peimite cieai touos los mouelos ue la base ue uatos actual implementanuo caua clase como se vio en el ejemplo anteiioi. El uso uel sciipt es el siguiente:
php scripts/create_all_models.php -application bank
Auicional a los getteissetteis geneiauos, el sciipt agiega los PBPBocs a caua mtouo y atiibuto con lo que se mejoia la uocumentacion uel sistema y si se utilizan IBEs como Zenu Stuuio o Eclipse estos comentaiios son leiuos ayuuanuo a autocompletai el couigo cuanuo sea posible.
El mouelo paia la tabla customei geneiauo es:
<?php
class Customer extends ActiveRecord {
/** * @var integer */ protected $id;
/** * @var string */ protected $identification;
/** * @var integer */ protected $sucursal_id;
/** * @var string */ protected $name;
/** * @var string */ protected $email;
/** * @var Date */ protected $created_at;
/** * @var string */ protected $status;
/** * Metodo para establecer el valor del campo id LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 41
* @param integer $id */ public function setId($id){ $this->id = $id; }
/** * Metodo para establecer el valor del campo identification * @param string $identification */ public function setIdentification($identification){ $this->identification = $identification; }
/** * Metodo para establecer el valor del campo sucursal_id * @param integer $sucursal_id */ public function setSucursalId($sucursal_id){ $this->sucursal_id = $sucursal_id; }
/** * Metodo para establecer el valor del campo name * @param string $name */ public function setName($name){ $this->name = $name; }
/** * Metodo para establecer el valor del campo email * @param string $email */ public function setEmail($email){ $this->email = $email; }
/** * Metodo para establecer el valor del campo created_at * @param Date $created_at */ public function setCreatedAt($created_at){ $this->created_at = $created_at; }
/** * Metodo para establecer el valor del campo status * @param string $status */ public function setStatus($status){ $this->status = $status; }
/** * Devuelve el valor del campo id * @return integer */ public function getId(){ return $this->id; }
/** * Devuelve el valor del campo identification * @return string */ public function getIdentification(){ return $this->identification; }
/** * Devuelve el valor del campo sucursal_id LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 42
* @return integer */ public function getSucursalId(){ return $this->sucursal_id; }
/** * Devuelve el valor del campo name * @return string */ public function getName(){ return $this->name; }
/** * Devuelve el valor del campo email * @return string */ public function getEmail(){ return $this->email; }
/** * Devuelve el valor del campo created_at * @return Date */ public function getCreatedAt(){ return new Date($this->created_at); }
/** * Devuelve el valor del campo status * @return string */ public function getStatus(){ return $this->status; } } 6.6 Crear el Inicio de Sesin El inicio ue sesion paia el usuaiio final ue la sucuisal viitual segn los iequeiimientos ue la aplicacion, es una pantalla en uonue el cliente uebei ingiesai su uocumento peisonal junto con alguna ue las claves ue las cuentas asociauas a ese uocumento.
Segn la aiquitectuia NvC los contiolauoies son el punto ue entiaua a cualquiei accion que se iealice en la aplicacion, aunque ue momento el piimei iequeiimiento nos hace pensai en piesentacion antes ue 'logica uel negocio' empezaiemos cieanuo un contiolauoi que no implemente ningn tipo ue logica poi ahoia:
El contiolauoi cieauo se llama login y el aichivo uonue se implementa la clase contiolauoia es el aichivo controllers,loqin_controller.pbp y ue momento contiene lo siguiente:
<?php
class LoginController extends ApplicationController {
public function indexAction(){ LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4S
}
}
La implementacion 'vacia' ue la accion 'inuex' peimite que la piesentacion (la vista se visualice) en cuanto se invoca el contiolauoi.
Ya que 'login' sei el contiolauoi poi uefecto ue la aplicacion se implementa el mtouo ControllerBose::init ue la siguiente foima:
<?php
class ControllerBase {
public function init(){
//Enrutar al controlador login Router::routeTo("controller: login"); }
}
Segn las convenciones en la aiquitectuia NvC uel Fiamewoik la vista paia la accion 'inuex' uel contiolauoi 'login' se ciea en el aichivo views,loqin,inJex.pbtml.
La inteifaz piesenta una campo ue texto uonue es posible ingiesai el uocumento uel cliente y otia paia la clave numiica ue 4 uigitos.
Ambos campos son iequeiiuos y poi lo tanto se valiuan como iequeiiuos en el contiolauoi. La valiuacion tambin se pueue hacei en }avaSciipt, sin embaigo estamos hacienuo un sistema confiable y no pouemos confiai en lo que ocuiia en el cliente.
class LoginController extends ApplicationController {
public function indexAction(){
}
public function validateCredentialsAction(){ $rules = array( "identification" => array( "filter" => "alpha", "message" => "Por favor indique su documento de identificacin" ), "password" => array( "filter" => "int", "message" => "Por favor indique su contrasea" ), ); if($this->validateRequired($rules)==true){ //Aqu viene la autenticacin } else { $this->routeTo("action: index"); } }
}
La utilizacion uel mtouo heieuauo valiuateRequiieu peimite valiuai el tipo ue uato y compiobai si el usuaiio ha ingiesauo algn valoi en estos campos. Los valoies ue los campos son filtiauos usanuo el componente Iilter antes ue valiuai si estn piesentes en la entiaua ue usuaiio.
Si la valiuacion falla el flujo ue ejecucion se eniuta nuevamente a la accion inuex. Ahoia se mouifica la vista paia mostiai al usuaiio los mensajes geneiauos en la valiuacion.
<h1>Bienvenido a Central Bank</h1>
<?php
foreach(View::getValidationMessages() as $message){ Flash::error($message->getMessage()); }
El mtouo esttico view::qetvoliJotionHessoqes{) peimite obtenei los mensajes obteniuos en la valiuacion. Cuanuo el pioceso ue valiuacion es satisfactoiio se pueue continuai con el pioceso ue autenticacion. 6.7 Autenticando al Cliente El iequeiimiento uel banco exige que la implementacion ue la autenticacion se haga ue la siguiente foima:
valiuai que exista un cliente con el uocumento ingiesauo valiuai que la clave piopoicionaua coiiesponua al menos a una cuenta uel cliente
Los mouelos Customer y Account contienen los uatos iequeiiuos paia efectuai esta opeiacion. La accion mouificaua voliJoteCreJentiols queua asi:
En el anteiioi pioceuimiento se ilustian vaiios aspectos ue un pioceuimiento usanuo el Fiamewoik:
Paia iecupeiai los valoies que vienen uel foimulaiio se utiliza el mtouo qetPost. Como piimei paimetio se pasa el nombie uel campo usauo en el foimulaiio. Auicionalmente se pueue aplicai un filtio paia aseguiai que la entiaua si es seguia y coiiesponue al tipo ue uato espeiauo. Paia acceuei a cualquiei mouelo basta con invocailo usanuo $this uentio ue cualquiei accion uel Iromework. El nombie ue la vaiiable coiiesponue al nombie ue la clase que utiliza el mouelo. El mtouo uel mouelo finJIirst busca un iegistio o como su tiauuccion uice "buscai el Piimeio". La conuicion peimite obtenei el iegistio ueseauo. Este mtouo uevuelve false cuanuo no encuentia iegistios con las conuiciones inuicauas. El mtouo finu iealiza una bsqueua ue vaiios iegistios, la conuicion peimite filtiai solo los iegistios ue las cuentas asociauas al cliente. Cuanuo no encuentia iegistios uevuelve un vectoi vacio, en caso contiaiio el iesultauo ue finu es un 0bjeto ue la clase ActiveRecorJResulset que implementa el pation RecorJset, es uecii una iepiesentacion en memoiia uel iesultauo uevuelto poi la base ue uatos. La vaiiable $successAutb siive como vaiiable banueia paia iuentificai si se ha encontiauo una cuenta con la contiasea piopoicionaua. Paia obtenei los valoies ue los campos uel mouelo es necesaiio usai los getteis en el caso ue customei se uso qetlJ{) paia obtenei el iu uel iegistio que se consulto. Las claves en la tabla Account son iesmenes usanuo el algoiitmo sha1. Paia agiegai un mensaje ue valiuacion peisonalizauo se pueue usai el mtouo oJJvoliJotionHessoqe el cual tambin es usauo inteinamente poi voliJoteRequireJ. Cuanuo falla algn iequisito uel pioceso se muestia el mensaje y se eniuta a la accion inuex lo que le peimitii al usuaiio final ieingiesai la infoimacion. Cuanuo el uocumento ue iuentificacion y la clave son coiiectos se ciea una vaiiable ue sesion meuiante Session::set, esta es llamaua existsvoliJ0ser y se le asigna valoi "tiue". Esta vaiiable inuica a lo laigo ue la aplicacion que existe un usuaiio valiuo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 47
autenticauo. 6.8 Un Men para la Aplicacin Paia oiganizai las opciones que utiliza el usuaiio final se ciea un men y se implementa ue tal foima que siempie sea visible poi el usuaiio final uuiante touo el tiempo que ejecute la aplicacion. Como se vio en el pioceuimiento ue autenticacion, cuanuo esta es satisfactoiia el flujo ue ejecucion es ieuiieccionauo al contiolauoi "menu". La implementacion ue este contiolauoi caiece ue logica ue negocio alguna y muestia la vista que peimite al cliente escogei la opcion que uesea:
El sciipt ue ayuua uel Fiamewoik llamauo cieate_contiollei peimite la cieacion uel contiolauoi:
php scripts/create_controller.php --application bank -name menu
Como iesultauo se obtiene el couigo geneiauo:
<?php
class MenuController extends ApplicationController {
public function indexAction(){
}
}
La jeiaiquia ue vistas implementaua en el componente view peimite que la piesentacion coiiesponuiente a un contiolauoi sea compaitiua poi otios, poi esto se ha cieauo el men enlazanuo caua opcion en el layout uel contiolauoi.
El uso uel helpei Toq::linkTo peimite cieai un enlace al contiolauoi iequeiiuo y utilizai un label paia inuicai el texto asociauo a l. La ventaja ue utilizai este tipo ue helpeis es que LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 48
mantiene actualizauos los path absolutos a la aplicacion y si se llegase a movei a otio 0RI automticamente estos mantenuiian las iutas coiiectas. 6.9 Visualizacin del saldo del cliente La piimeia opcion que piesenta el men al cliente le peimite consultai el saluo ue las cuentas bancaiias que tenga en el banco. Paia implementai la consulta se ciea el contiolauoi 'bonkinq' que consulta el saluo ue caua cuenta y lo piesenta en una vista.
El contiolauoi 'BonkinqController' queua asi: <?php
class BankingController extends ApplicationController {
public function indexAction(){
}
public function checkBalanceAction(){ $userData = SessionNamespace::get('UserData'); $customerId = $userData->getCustomer(); $accounts = $this->Account->find("customer_id='$customerId' AND status = 'A'"); $this->setParamToView("accounts", $accounts); }
}
Se toman los uatos ue sesion que se cieaion cuanuo el cliente inicio sesion uesue el SessionNomespoce. El mouelo 'Account' es inyectauo paia iealizai la consulta, el iesultauo ue esta se pasa a la vista usanuo el paimetio "occounts".
En la piesentacion la iuea es piesentai una tabla con los saluos en caua cuenta junto con una sumatoiia uel saluo total poi cuenta y ue touas las cuentas. La tabla a piesentai contiene las siguientes columnas: Nmeio ue la Cuenta, Saluo, Saluo en Canje y Total (que suma el saluo ms el saluo en canje). Pouemos uefinii el total como una columna calculaua, obtenienuola como una iegla uel negocio implementanuo el mtouo qetBolonceTotol{) en el mouelo Account:
<?php
class Account extends ActiveRecord {
/* getters y setters */
/** * Devuelve el saldo total de la cuenta * * @return double */ LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 49
public function getBalanceTotal(){ return $this->balance+$this->swap_balance; }
}
Al uefinii este mtouo se extienue el mouelo y se cumple con la iegla uel negocio. qetBolonceTotol{) est uisponible en caua instancia ue Account en toua la aplicacion.
Se ciea la vista ue esta accion en el aichivo opps,bonk,views,bonkinq,cbeckBolonce.pbtml. Notese que bonkinq coiiesponue a el nombie uel contiolauoi y cbeckBolonce al nombie ue la accion:
El iesultauo uevuelto poi el mtouo finu ue Account es un objeto ActiveRecorJResulset que pueue sei iecoiiiuo poi foieach paia constiuii la tabla ue cuentas. Algun cliente pueue tenei vaiias cuentas o tenei ninguna, en este ultimo caso, la aplicacion le infoimai al cliente. Ya que los objetos ActiveRecorJResultset implementan la inteiface Countoble es posible sabei cuantos iegistios uevolvio la consulta usanuo la funcion count{):
En este momento al visualizai los saluos se pueue vei que el men no apaiece al lauo izquieiuo, esto se uebe a que el layout uel men que se uefinio anteiioimente solo esta activo paia el contiolauoi uel mismo nombie. Paia uefinii el layout 'menu' como el uel contiolauoi 'bonkinq' se usa el mtouo setTemploteAfter{) en el inicializauoi uel contiolauoi.
<?php
class BankingController extends ApplicationController {
protected function initialize(){ $this->setTemplateAfter("menu"); }
public function indexAction(){
}
public function checkBalanceAction(){ $userData = SessionNamespace::get('UserData'); $customerId = $userData->getCustomer(); $accounts = $this->Account->find("customer_id='$customerId' AND status = 'A'"); $this->setParamToView("accounts", $accounts); }
}
El layout men es mouificauo paia que muestie tanto el menu ue la aplicacion como el conteniuo ue las vistas que lo utilicen:
El llamauo a view::qetContent{) inuica uonue se uebe auto-incluii el conteniuo ue la vista asociaua al layout, en este caso es cbeckBolonce.pbtml. Segn la configuiacion actual, cualquiei peticion a los contiolauoies 'menu' y 'bonkinq' mostiaiian el mismo layout uel menu piincipal', con esto logiamos que los clientes pueuan ii ue una opcion a otia sin pioblemas y la aplicacion obtiene un menu que se pueue mantenei fcilmente ya que esta en un solo aichivo, peio aplica a vaiios estauos ue la aplicacion. 6.10 Crear el TransactionActivity La segunua accion que se uebe implementai en el contiolauoi banking es 'sbowTronsoctionActivity' cuyo objetivo es mostiai los extiactos bancaiios uel cliente en caua una ue sus cuentas. Paia empezai, se uebe peimitii al cliente que seleccione las cuentas en las que uesea vei sus extiactos y luego mostiailos paginanuo los iesultauos y uai la opcion ue impiimiilos.
La implementacion ue la accion sbowTronsoctionActivity consulta las cuentas uel cliente y las visualiza en la piesentacion ue ella. Ya que el pioceuimiento paia obtenei las cuentas activas uel cliente se habia implementauo en la accion cbeckBolonce, se uefine el mtouo piivauo _qetActiveAcounts{) paia hacei ieusable el pioceuimiento mencionauo y usailo en sbowTronsoctionActivity. El contiolauoi queua entonces asi:
<?php
class BankingController extends ApplicationController {
protected function initialize(){ $this->setTemplateAfter("menu"); }
private function _getActiveAccounts(){ $userData = SessionNamespace::get('UserData'); $customerId = $userData->getCustomer(); return $this->Account->find("customer_id='$customerId' AND status = 'A'"); }
public function checkBalanceAction(){ $this->setParamToView("accounts", $this->_getActiveAccounts()); }
public function showTransactionActivityAction(){ $this->setParamToView("accounts", $this->_getActiveAccounts()); }
}
La vista en el aichivo opps,bonk,views,bonkinq,sbowTronsoctionActivity.pbtml contiene un foimulaiio uonue el usuaiio selecciona las cuentas y un boton ue 'vei extiactos':
La uesciipcion ue la vista anteiioi es la siguiente:
Se contiola que haya cuentas activas contanuo los iegistios uevueltos y piesentanuo un mensaje infoimativo en su uefecto. El helpei Toq::form{strinq $oction) peimite la cieacion ue una etiqueta ue foimulaiio LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS
cuya accion es ,bonkinq,qetSelecteJActivity. Se iecoiien las cuentas activas y poi caua una se geneia una fila con un checkbox que poi uefecto esta seleccionauo. El helpei Toq::submitButton{strinq $coption) peimite cieai el boton ue 'Consultai', al hacei click en l se enviai la infoimacion a la accion mencionaua. El helpei Toq::enJIorm{) cieiia el foimulaiio.
La columna ue la sucuisal visualiza el couigo ue esta tal y como est en la tabla lo cual no es muy amigable paia el usuaiio final. Las asociaciones pueuen iesolvei esto y obtenei el uetalle ue la sucuisal poi caua cuenta en foima natuial. Se uefine una multipliciuau n a 1 en el mouelo 'Account' asi:
<?php
class Account extends ActiveRecord {
/* getters y setters */
/** * Devuelve el saldo total de la cuenta * * @return double */ public function getBalanceTotal(){ return $this->balance+$this->swap_balance; }
/** * Inicializa el modelo * */ public function initialize(){ $this->belongsTo("sucursal"); }
}
Be esta foima se pueue ieemplazai la linea ue la vista showTiansactionActivity.phtml en uonue se impiime el couigo ue la sucuisal poi:
Al enviai los uatos uel foimulaiio a la accion bonkinq,qetSelecteJActivity, se iecibe las cuentas seleccionauas y consulta los movimientos asociauos a estas:
<?php
class BankingController extends ApplicationController {
private function _getActiveAccounts(){ $userData = SessionNamespace::get('UserData'); $customerId = $userData->getCustomer(); return $this->Account->find("customer_id='$customerId' AND status='A'"); }
public function checkBalanceAction(){ $this->setParamToView("accounts", $this->_getActiveAccounts()); }
public function showTransactionActivityAction(){ $this->setParamToView("accounts", $this->_getActiveAccounts()); }
public function getSelectedActivityAction(){ $selectedAccountsIds = $this->getPostParam("cuenta"); $customerAccounts = array(); if(is_array($selectedAccountsIds)){ $userData = SessionNamespace::get('UserData'); $customerId = $userData->getCustomer(); foreach($selectedAccountsIds as $accountId){ $accountId = $this->filter($accountId, "int"); $existsAccount = $this->Account->count("customer_id = '$customerId' AND id='$accountId' AND status='A'"); if($existsAccount==true){ $customerAccounts[] = $accountId; } else { Flash::error("Cuentas invalidas en la peticion"); return; } } } else { Flash::error("Datos invalidos en la peticion"); return; } $movements = $this->Movement->find("account_id IN (".join(", ", $customerAccounts).")", "order: created_at DESC"); $this->setParamToView("movements", $movements); }
}
La explicacion uel pioceuimiento es la siguiente:
Se obtienen las cuentas seleccionauas uel foimulaiio meuiante $selecteJAccountslJs = $tbis-~qetPostPorom{"cuento"); En la siguiente linea se valiua que el valoi obteniuo sea un vectoi con las cuentas Luego se valiua que caua una ue las cuentas que es enviaua sea iealmente uel cliente activo en la sesion y que la cuenta est activa. Bespus ue filtiai las cuentas se consulta el movimiento asociauo a estas, se envia los iesultauos a la vista uonue en una tabla paginaua se piesentan los iegistios.
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS
Cieacion ue Aplicaciones 7 Aplicaciones en Kumbia Enterprise 7.1 Introduccin 0na aplicacion web es una extension uinmica ue un sitio web o un seiviuoi ue aplicaciones. Existes 2 tipos ue aplicaciones web:
[8(#$%,-,7 , 3, K8#7#$%,+(:$5 Son aplicaciones que geneian pginas web uinmicas usanuo uifeientes lenguajes ue maicas (BTNL, XNL, etc) y tecnologias como (CSS, }avaSciipt, etc) geneianuo conteniuos ue iespuesta ue acueiuo a las peticiones iecibiuas. [8(#$%,-,7 , '#8M(+(.75 Implementan enupoints paia seivicios web. Aplicaciones oiientauas a la piesentacion suelen sei clientes ue las oiientauas a seivicios.
Kumbio Fnterprise Iromework {KFI) piopoiciona un completo y iobusto entoino paia el uesaiiollo, testeo, implementacion y puesta en piouuccion ue ambos tipos ue aplicaciones web usanuo tecnologia PBP. 7.2 Instancias del framework 0na instancia uel fiamewoik hace iefeiencia a una uistiibucion uel fiamewoik que iesiue en un seiviuoi web. Las instancias pueuen contenei una o ms aplicaciones compaitienuo una misma veision uel fiamewoik y un mismo uiiectoiio pblico.
Las instancias pueuen veise tambin como opplicotion contoiners mantenienuo la memoiia y iecuisos ue las aplicaciones en foima sepaiaua peio piopoicionanuo un entoino integiauo ue opeiacion. 7.3 Estructura de directorios de una Instancia La estiuctuia ue aichivos ue una instancia ue Kumbio Fnterprise Iromework tiene lo siguiente:
La uesciipcion ue caua uiiectoiio es la siguiente:
T,93,5 6#7+8(2+(:$ -# -(8#+%.8(.7 -#3 *8,1#R.8S
6(8#+%.8(. 6#7+8(2+(:$ apps El uiiectoiio apps contiene touas las aplicaciones que usen la misma veision uel fiamewoik uefault Es la aplicacion poi uefecto, el Fiont-Contiollei paia esta aplicacion peimite acceuei uiiectamente a los contiolauoies sin inuicai el nombie ue la aplicacion. contiolleis Es el uiiectoiio en el que se ueben ubicai touos contiolauoies. application.php Contiene la clase ContiolleiBase ue la cual heieuan touos los contiolauoies y en uonue tambin uefinimos el mtouo init config Contiene los aichivos ue configuiacion poi aplicacion y peisonalizaua ue aplicacion filteis Contiene filtios peisonalizauos poi usuaiio. Es opcional la piesencia ue este uiiectoiio. libiaiy Contiene componentes peisonalizauos poi aplicacion. Es opcional la piesencia ue este uiiectoiio. mouels Aqui se ueben ubicai touos los mouelos ue la aplicacion, Kumbia LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S7
Enteipiise Fiamewoik peimite oiganizai logicamente en uiiectoiios los giupos ue mouelos. views Peimite cieai la piesentacion ue aplicaciones meuiante el componente view. plugins Es posible cieai plugins que aumenten la funcionaliuau ue la implementacion NvC. valiuatois Peimiten cieai valiuauoies paia ActiveRecoiu que se ayuuen a valiuai la logica ue uatos. config Contiene la configuiacion geneial uel fiamewoik languages Contiene los mensajes localizauos uel fiamewoik. Libiaiy Contiene al fiamewoik como tal y libieiias ue teiceios public Bace el papel ue BocumentRoot (iaiz ue uocumentos) ue la aplicacion, touo los aichivos uebajo ue este uiiectoiio pueuen sei acceuiuos pblicamente. En sus subuiiectoiios se encuentia touo el conteniuo esttico como imgenes, javasciipt, css y aichivos uescaigables. sciipts Contiene sciipts que automatizan taieas en el fiamewoik y ieuucen la couificacion manual. test Contienen test ue uniuau ue los fiamewoik.
La estiuctuia ue uiiectoiios esta pensaua buscanuo convencion sobie configuiacion, asi el uesaiiollo piouuciuo es ms mantenible y se hace ms eficiente el uesaiiollo cuanuo touo se encuentia en su lugai. 7.4 Publicar contenido esttico El uiiectoiio public en la estiuctuia ue aichivos est uestinauo a publicai conteniuo esttico que es visible pblicamente. Cualquiei aichivo ubicauo en este uiiectoiio o en un subuiiectoiio pueue sei acceuiuo poi los clientes ue la aplicacion.
Con el fin ue establecei ubicaciones que hagan ms mantenibles las aplicaciones se incluyen poi uefecto los siguientes subuiiectoiios:
'"9-(8#+%.8(. 6#7+8(2+(:$ img Contiene imgenes pieuefiniuas uel fiamewoik y su objetivo es colocai aqui imagenes a sei usauas poi la aplicacion. css Contiene aichivos ue estilos CSS. El aichivo style.css contiene las uefiniciones ue estilos estnuaies paia touas las aplicaciones. javasciipt Est uestinauo a almacenai aichivos }avaSciipt. El fiamewoik coloca en este uiiectoiio los fiamewoiks y funciones bsicas }avaSciipt. temp Biiectoiio paia aichivos tempoiales. files Biiectoiio paia aichivos a uescaigai.
El uesaiiollauoi uebe tenei en cuenta que cuanuo un conteniuo en estos uiiectoiios no existe la peticion es uiieccionaua a la aplicacion. Evitai las peticiones a aichivos inexistentes es una buena pictica en miias a mejoiai el ienuimiento ue las aplicaciones. 7.5 Bootstrap En cualquiei estiuctuia NvC el boostiap cumple el papel ue tomai la 0RL ieesciita e invocai tanto el Bispotcber como los eniutauoies necesaiios paia ejecutai la peticion. Paia entenuei la foima en la que el Bispotcber busca el contiolauoi en las aplicaciones y ejecuta la accion asociaua es necesaiio compienuei la foima en la que ueben foimai las 0RLs antes ue geneiai una peticion.
Paia una estiuctuia ue uiiectoiios que incluye 2 aplicaciones, la piimeia uefault y la segunua que se llama piouuccion que ilustiamos asi:
En uonue, el uominio uel seiviuoi es www.ejemplo.com, la iuta al fiamewoik es empiesa (en este uiiectoiio uel BocumentRoot esta el fiamewoik), el nombie uel contiolauoi es clientes, la accion en la teiceia 0RL seiia consultai y el paimetio paia esta accion es el nmeio 18.
0na peticion paia la aplicacion ue piouuccion se coloca el nombie ue esta uespus uel uiiectoiio uonue esta Kumbio Fnterprise Iromework, asi:
Caua aplicacion uentio ue apps contiene una estiuctuia ue uiiectoiios paia contiolauoies, mouelos y vistas nica, la foima ue acceuei a caua aplicacion es inuicanuo su nombie antes uel nombie uel contiolauoi. 7.6 Crear la accin por defecto en una Aplicacin La clase ControllerBose ubicaua en opps,Jefoult,controllers,opplicotion.pbp peimite uefinii el mtouo init que se ejecuta en caso que no se uefina un contiolauoi o accion poi uefecto: /0#123.5 B++(:$ 2.8 -#*#+%. #$ "$, ,23(+,+(:$ <?php
class ControllerBase {
public function init(){
//Cargar algunas extensiones Extensions::loadExtension("Kumbia.ApplicationMonitor"); Extensions::loadExtension("Kumbia.Acl");
//Enrutar al controlador login Router::routeTo("controller: login"); } } 7.7 Crear un procedimiento de inicializacin de la aplicacin El mtouo ControllerBose::init es ejecutauo si no se especifica un contiolauoi en la 0RL, en cieitas ocasiones pueue que no sea til si se iequieie inicializai extensiones o ejecutai algn LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 6u
pioceso ue inicializacion. El mtouo ControllerBose::onStortApplicotion iesulta ms apiopiauo, en estos casos. Este mtouo solo ejecuta un pioceuimiento en cuanto se iealiza la piimeia peticion a la aplicacion. El siguiente ejemplo ilustia mejoi el funcionamiento ue este mtouo:
public function onStartApplication(){ //Cargar algunas extensiones Extensions::loadExtension("Kumbia.Feed"); Extensions::loadExtension("Kumbia.Acl"); }
public function init(){ //Enrutar al controlador login Router::routeTo("controller: login"); }
}
Tambin se uebe evitai iealizai cualquiei tipo ue saliua al exploiauoi ya que este mtouo es ejecutauo antes ue inicializaise el contexto ue sesion. 7.8 Detectar un cambio en la ejecucin de una instancia a otra En la clase ControllerBose tambin es posible implementai el mtouo onCbonqelnstonceFvent que es ejecutauo cuanuo se uetecta que en la misma sesion se ha ejecutauo ya una aplicacion en otia instancia ue Kumbio Fnterprise Iromework.
<?php
class ControllerBase {
public function onChangeInstanceEvent(){ //Se ha cambiado la instancia }
}
Es posible que este evento no se llame coiiectamente si las aplicaciones e instancias tienen auaptauoies ue sesion uifeientes.
Paite 1: La logica ue uominio 8 Componente Controller 8.1 Introduccin El componente Controller cumple una impoitante taiea uentio ue la aiquitectuia NvC ue Kumbia. El fiamewoik piopoiciona la integiacion ue este componente con el componente view y ActiveRecorJ que iealiza el papel ue los mouelos.
La integiacion ue estos componentes piopoiciona una estiuctuia estable y eficiente paia las aplicaciones oiientauas a la Web. Auems ue esto, el componente ofiece un sistema ue peisistencia tianspaiente al uesaiiollauoi que aceica las aplicaciones Web a aplicaciones ue esciitoiio, eliminanuo la complejiuau ue auministiai el estauo y entoino ue la logica ue negocios en una sesion. Poi meuio ue plug-ins es posible extenuei la funcionaliuau ue este componente. 8.2 Como funciona el componente Controller? Kumbio Fnterprise Iromework ha implementauo una estiuctuia jeiiquica ue clases que peimiten cieai uifeientes tipos ue seivicios y uesaiiollai la logica ue aplicacion en uifeientes niveles ue flexibiliuau o piacticiuau.
El componente Controller posee la siguiente jeiaiquia ue clases e implementacion ue seivicios:
T,93,5 ]#8,8^"(, -# +3,7#7 -#3 +.12.$#$%# I.$%8.33#8 I3,7# ;9(+,+(:$ 6#7+8(2+(:$ ContiolleiBase appsuefaultcontiolleis application.php Es la clase pauie ue touos los contiolauoies, el uesaiiollauoi pueue agiegai mtouos que sein heieuauos poi cualquiei contiolauoi ue la aplicacion. Aqui se pueue agiegai valiuacion ue seguiiuau o Auuitoiia ue sistemas. Contiollei LibiaiyKumbiaContiolleiC Es el componente Contiollei en si, LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 62
ontiolleiContiollei.php implementa touos los mtouos comunes paia los tipos ue contiolauoies uel fiamewoik. ApplicationContiollei LibiaiyKumbiaContiolleiA pplication Application.php El uiseo ue este contiolauoi ayuua al piogiamauoi a inteiactuai con vistas y mouelos ue la foima ms uiiecta y flexible. StanuaiuFoim LibiaiyKumbiaContiolleiSt anuaiuFoim StanuaiuFoim.php Es una implementacion uel componente Contiollei que funciona como Scallfoluing (geneiauoi ue couigo) uinmico. Busca ayuuai al uesaiiollauoi a cieai captuias ue limitaua peisonalizacion peio que iealizan las opeiaciones ue cieacion, consulta, mouificacion, iepoite y eliminacion ue los uatos ue una tabla. WebSeiviceContiollei LibiaiyKumbiaContiollei WebSeiviceContiollei ApplicationContiollei.php Este tipo ue contiolauoi Peimite cieai Seivicios web basauos en el estnuai S0AP, geneiai uesciipciones en WSBL y oiquestai el inteicambio ue uatos entie aplicaciones usanuo este mtouo. NultiThieauContiollei LibiaiyKumbiaContiolleiA pplication NultiThieauContiollei.php Es una sub-implementacion ue ApplicationContiollei que est uiseaua paia coiiei piocesos ue negocio que iequieian seguimiento estilo cioss-cutting.
El objetivo ue caua contiolauoi es bsicamente sepaiai la logica ue la piesentacion, el componente Controller implementa el pation Iront-Controller en el cual touas las peticiones a la aplicacion son atenuiuas inicialmente poi l y luego son eniutauas a contiolauoies ue usuaiio y acciones que atienuen caua una. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 6S
8.3 Crear un Controlador Los contiolauoies son clases que heieuan ue las implementaciones ue Contiolauoies como ApplicationContiollei o WebSeiviceContiollei y que ueben sei cieauos bajo cieitas convenciones en el uiiectoiio appsuefaultcontiolleis
Al cieai un contiolauoi paia la auministiacion ue la infoimacion ue clientes se ciea un aichivo llamauo customei_contiollei.php, en l una clase CustomeiContiollei heieuanuo ue alguna ue las implementaciones uel componente Contiollei.
La accion poi uefecto en el contiolauoi uebe tenei visibiliuau pblica y llamaise inuexAction asi:
class CustomerController extends ApplicationController {
public function indexAction(){ $this->renderText("Hola Mundo"); }
public function getStatusAction($id){ $this->renderText("Ver el estado del cliente $id"); }
}
Paia iealizai una peticion a la aplicacion se hace meuiante la siguiente 0RL: /0#123.5 B++#-#8 ,3 +.$%8.3,-.8 1#-(,$%# "$, ;<E http://www.example.com/company/customer/index http://www.example.com/company/customer/
Ya que inuex es la accion poi uefecto no es necesaiio inuicaila, ya que es implicita. El inuicaila piouuciiia el mismo iesultauo. Paia acceuei a la accion qetStotus se hace ue la siguiente foima: /0#123.5 B++#-#8 , "$, ,++(:$ 2#87.$,3(>,-, -#7-# "$, ;<E http://www.example.com/company/customer/getStatus/190
El componente Contiollei esta integiauo con el componente view que implementa el pation Templote view. Esta integiacion peimite que en cuanto teimina la ejecucion ue la logica en la accion automticamente se ienueiiza la piesentacion o vista coiiesponuiente al contiolauoi y accion solicitauos. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 64
El funcionamiento uel componente Controller se apoya tanto en Bispotcber como en Router paia iealizai touo el tiabajo al atenuei una peticion a la aplicacion. No es necesaiio entenuei el funcionamiento ue estos componentes en uetalle aunque si se uesea extenuei la funcionaliuau ue la aiquitectuia implementaua en Kumbio Fnterprise Iromework pueue iesultai til Piimeio la clean 0RL es fiagmentaua usanuo el mtouo Router::rewrite aqui se ueteimina que aplicacion, contiolauoi y accion se iequieie ejecutai. El componente Routei es quien iealiza la oiquestacion ue touo el flujo ue ejecucion. El componente Bispatchei iecibe los paimetios ue contiolauoi y accion y busca el inuicauo en el uiiectoiio ue contiolauoies paia su piocesamiento y uelegacion a la opeiacion iequeiiua. Antes ue ejecutai la peticion Bispotcber busca si esta uefiniuo el mtouo o atiibuto beforeIilter en la clase uel contiolauoi o en su jeiaiquia y lo ejecuta. Si el flujo ue la ejecucion no ha siuo cambiauo meuiante el mtouo Controller::routeTo entonces ejecuta la accion solicitaua en el contiolauoi. La accion tiene acceso a touo el entoino BTTP e infoimacion enviaua poi mtouos P0ST, uET, P0T, etc. Si no cambia el flujo ue ejecucion Bispotcber busca si esta uefiniuo el mtouo o atiibuto ofterIilter en la clase contiolauoia en su jeiaiquia ue clases y lo ejecuta. El pioceso ue eniutamiento es ciclico y teimina solo cuanuo se ueja o no se invoca el mtouo Controller::routeTo. El Compontente view toma el contiol y iecibe lo geneiauo poi Contiollei y visualiza la piesentacion paia ste, en caso ue que exista.
El pation Iront-Controller junto con HoJel-view-Controller funciona como el coiazon el fiamewoik e integia los componentes Contiollei, Routei, Bispatchei y Coie paia haceilo funcionai. Cuanuo iequeiimos ue entenuei o mouificai la ejecucion uel flujo ue aplicacion nos iemitimos a los seivicios que estos componentes piopoicionan. 8.4 Servicios del Componente Router voiJ Router::rewrite{strinq $url) Toma la clean 0RL y fiagmenta caua componente localizanuo la aplicacion, contiolauoi y accion solicitauos, este mtouo es llamauo automticamente en el bootstiap uel fiamewoik ubicauo en publicinuex.php. ceuula LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 6S
voiJ Router::ifRouteJ{) Antes ue la ejecucion ue cualquiei accion busca en la tabla ue eniutamiento esttico geneiaua a paitii ue configioutes.ini si se uebe eniutai a otia contiolauoi o accion uinmicamente. booleon Router::qetRouteJ{) Este mtouo uevuelve el estauo uel ioutei que inuica si es necesaiio hacei una eniutacion o continuai con el flujo noimal ue la aplicacion. strinq Router::qetApplicotion{) Bevuelve el nombie ue la aplicacion que fue solicitaua en la peticion. strinq Router::qetHoJule{) Bevuelve el nombie uel mouulo que fue solicitauo en la peticion. strinq Router::qetController{) Bevuelve el nombie uel contiolauoi que fue solicitauo en la peticion. Esta infoimacion auicionalmente se pueue obtenei usanuo el mtouo en el contiolauoi llamauo getContiolleiName(). strinq Router::qetAction{) Bevuelve el nombie ue la accion que fue solicitaua en la peticion. Esta infoimacion auicionalmente se pueue obtenei usanuo el mtouo en el contiolauoi llamauo getActionName(). strinq Router::qetlJ{) Bevuelve el piimei paimetio enviauo poi 0RL en la peticion. orroy Router::qetPorometers{) Bevuelve en un aiiay los paimetios enviauos poi 0RL en la peticion, estos igualmente se les hace binuing a la accion como paimetios uel mtouo ejecutauo ue la clase contiolauoia. orroy Router::qetAllPorometers{) Bevuelve un aiiay con touos los fiagmentos ue la 0RL solicitaua en la peticion.
orroy Router::routeTo{mixeJ $poroms) Peimite cambiai el flujo ue ejecucion ue la aplicacion tiansfiiinuoselo a otio contiolauoi yo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 66
accion. orroy Router::routeTo0Rl{strinq $uri) Peimite cambiai el flujo ue ejecucion ue la aplicacion tiansfiiinuoselo a otio contiolauoi yo accion meuiante un 0nifoim Resouice Iuentifiei.
strinq Router::qetActiveApplicotion{) Bevuelve el nombie ue la aplicacion actual. Cuanuo es la aplicacion poi uefecto uevuelve la palabia uefault.
voiJ Router::setApplicotion{strinq $nome) Peimite establecei uinmicamente el nombie ue la aplicacion actual.
voiJ Router::setBefoultActionNome{strinq $octionNome) Peimite establecei el nombie ue la accion poi uefecto en touos los contiolauoies.
strinq Router::qetBefoultActionNome{) Bevuelve el nombie ue la accion poi uefecto en touos los contiolauoies. 8.5 Servicios proporcionados por Dispatcher voiJ Bispotcber::setControllersBir{strinq $Jirectory) Peimite establecei el uiiectoiio ue contiolauoies usauo paia hacei el lookup ue un contiolauoi cuanuo se iealiza una peticion.
Controller Bispotcber::qetControllerlnstonce{) Bevuelve el objeto contiolauoi instanciauo que se est ejecutanuo.
int Bispotcber:.qetBispotcbStotus{) Bevuelve el estauo actual uel flujo ue ejecucion. Pueue sei alguna ue las constantes ue la clase Bispatchei:
STAT0S_0NINITIALIZEB: Inuica que no se ha iniciauo el pioceso ue ejecucion STAT0S_BISPATCBINu: Inuica que se esta localizanuo el contiolauoi y su accion solicitaua LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 67
STAT0S_R0NNINu_BEF0RE_FILTERS: Inuica que se estn localizanuo los mtouos y atiibutos befoieFiltei y se estn ejecutanuo. STAT0S_R0NNINu_AFTER_FILTERS: Inuica que se estn localizanuo los mtouos y atiibutos afteiFiltei y se estn ejecutanuo. STAT0S_RENBER_PRESENTATI0N: Inuica que el contiol ue la aplicacion fue tiansfeiiuo al componente view. STAT0S_R0NNINu_BEF0RE_ST0RE_PERSISTENCE: Inuica que se va a iealizai el pioceuimiento ue almacenamiento ue los uatos peisistentes uel contiolauoi. STAT0S_R0NNINu_AFTER_ST0RE_PERSISTENCE: Inuica que se ha iealizauo el pioceuimiento ue almacenamiento ue los uatos peisistentes uel contiolauoi. STAT0S_R0NNINu_C0NTR0LLER_ACTI0N: Inuica que el contiol ue ejecucion lo tiene el contiolauoi como tal y su accion solicitaua. booleon Bispotcber::isRunninqController{) Inuica si el contiol ue ejecucion esta a nivel uel contiolauoi y no uel fiamewoik.
booleon Bispotcber::isRunninq0serlevel{) Inuica si la ejecucion esta a nivel ue la logica uel uesaiiollauoi y no uel fiamewoik.
mixeJ Bispotcber::qetvolueReturneJ{) Bevuelve el valoi que ietoino la ltima accion ejecutaua en la peticion. 8.6 Excepciones Generadas en el Dispatcher En el pioceso uel Bispotcber pueuen ocuiiii excepciones que son enviauas uiiectamente al cliente si no se encuentia uefiniuo el mtouo onFxception ya sea en el contiolauoi o en ControllerBose. Las excepciones ocuiiiuas en Bispotcber lanzan una excepcion ue clase BispotcberFxception en las siguientes ciicunstancias:
T,93,5 I:-().7 \ -#7+8(2+(:$ -# #H+#2+(.$#7 )#$#8,-,7 #$ 6(72,%+C#8 I:-(). 6#7+8(2+(:$ Bispatchei::N0T_F00NB_ACTI0N Se geneia cuanuo no existe un mtouo con el nombie ue la accion inuicauo en la clase contiolauoia y auems no existe la accion notIounJAction. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 68
Bispatchei::N0T_F00NB_C0NTR0LLER Se geneia cuanuo no se encuentia el contiolauoi solicitauo peio si existe el aichivo coiiecto. Bispatchei::N0T_F00NB_FILE_C0NTR0LLER 0cuiie cuanuo no existe el aichivo uel contiolauoi y poi enue la clase uel mismo al solicitai la peticion a este. Bispatchei::N0T_F00NB_INIT_ACTI0N 0cuiie cuanuo se esta tiatanuo ue ejecutai el mtouo init en ContiolleiBase peio este no se ha uefiniuo o su visibiliuau no es pblica. Bispachei:: INvALIB_NETB0B_CALLBACK Se geneia cuanuo se tiata ue invocai exteinamente el constiuctoi ue la clase contiolauoia o un mtouo piotegiuo o piivauo. Bispatchei::INvALIB_ACTI0N_vAL0E_PARANETER Se geneia cuanuo no se ha enviauo poi la 0RL o al ieuiieccionai a una ueteiminaua accion se ha omitiuo el valoi paia un paimetio ue una accion en el contiolauoi solicitauo.
Como se ha mencionauo anteiioimente es posible uefinii un mtouo que acte como una capa pievia al lanzamiento ue la excepcion al usuaiio llamaua onFxception. Esta iecibe el objeto instanciauo ue la excepcion geneiaua, este mtouo iecibe auems cualquiei excepcion inuepenuiente ue si geneia en Bispotcber o uentio uel mismo contiolauoi:
class CustomerController extends ApplicationController {
public function indexAction(){
}
public function onException($e){ if($e instanceof DispatcherException){ if($e->getCode()==Dispatcher::NOT_FOUND_ACTION){ Flash::notice(Lo sentimos la pgina no existe); } } else { //Se relanza la excepcin LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 69
throw $e; }
}
}
4.%,5 0na excepcion que se piesenta fiecuentemente es la INvALIB_ACTI0N_vAL0E_PARANETER, que se geneia cuanuo se omite en la 0RL un paimetio uel mtouo ue la accion que no es opcional o que tiene un valoi poi uefecto. Kumbio Fnterprise Iromework es estiicto en este sentiuo y geneiai una excepcion cuanuo se omita un valoi aunque PBP en si geneiaiia solo una auveitencia. La foima ms pictica ue evitai esto es asignai valoies pieueteiminauos a caua paimetio uel mtouo hacienuo la logica ue aplicacion ms consistente evitanuo mensajes en la pantalla uel cliente (exploiauoi, consola, etc). Este tipo ue excepciones tambin se geneian al iealizai el eniutamiento y omitii el valoi ue algn paimetio. 8.7 Peticiones HTTP a Controladores Cuanuo se iealiza una peticion a un contiolauoi meuiante piotocolo BTTP es posible cieai el objeto ue peticion ContiolleiRequest y auems utilizai mtouos que ayuuan a inteiactuai con los uatos enviauos a estos como poi ejemplo cuanuo se usan foimulaiios BTNL.
La instancia ue ContiolleiRequest se pueue obtenei en el contiolauoi usanuo el mtouo Controller::qetRequestlnstonce{), el objeto obteniuo encapsula toua la infoimacion enviaua en la peticion BTTP y la infoimacion ue su entoino paia sei utilizaua uentio uel contiolauoi:
class CustomerController extends ApplicationController {
public function indexAction(){ $request = $this->getRequestInstance(); if($request->isPost()==true){ Flash::notice(La peticin se ha realizado por mtodo http POST); }
}
/** * Devuelve el nombre del cliente usando JSON solo si la peticin * fue realizada con AJAX */ public function getCustomerClientAction(){ $this->setResponse(json); $request = $this->getRequestInstance(); if($request->isAjax()==true){ LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 7u
$this->renderText($this->jsonEncode(array(name => John Smith))); } }
}
Los valoies ue las vaiiables supeiglobales $_uET, $_P0ST, $_C00KIE, $_REQ0EST, $_SERvER Y $_ENv pueuen sei accesauos usanuo los mtouos ue ControllerRequest usanuo qetPorom6et, qetPoromPost, qetPoromCookie, qetPoromServer y qetPoromFnv. Be igual foima pueue utilizai los mtouos uel contiolauoi qetueryPorom, qetPostPorom, qetRequestPorom, qetCookiePorom, qetServerPorom y qetFnvPorom paia obtenei estos valoies sin obtenei la instancia ue la clase ControllerRequest aunque esto se haga implicitamente. `OaOb B-1($(7%8,8 ,8+C(M.7 ,-0"$%.7 #$ "$, 2#%(+(:$ Los aichivos aujuntos en una peticion pueuen sei auministiauos usanuo los mtouos ue ControllerRequest llamauos bosIiles, qetPoromIile y qet0plooJeJIiles.
<?php
class Movement extends ApplicationController {
public function loadMovementAction(){
if($this->getRequestInstance()->hasFiles()==true){ foreach($this->getRequestInstance()->getUploadedFiles() as $file){ print "Nombre original del archivo: ".$file- >getFileName(); print "Tamao del archivo: ".$file->getFileSize(); print "MIME del archivo: ".$file->getFileType(); print "Nombre Temporal: ".$file->getTempName(); $file->moveFileTo('movement/'.$file->getFileName()); } } }
} `OaOP BKZ -# I.$%8.33#8<#^"#7% Auicional a los mtouos mencionauos anteiioimente la iefeiencia uel API ue ControllerRequest auems tiene:
voiJ setPoromRequest{strinq $inJex, mixeJ $volue) Cambia un valoi enviauo en una peticion en la supeiglobal $_REQ0EST. Este mtouo automticamente actualiza $_P0ST y $_uET si es necesaiio.
voiJ setPorom6et{strinq $inJex, mixeJ $volue) Cambia un valoi enviauo en una peticion en la supeiglobal $_uET. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 71
voiJ setPoromPost{strinq $inJex, mixeJ $volue) Cambia un valoi enviauo en una peticion en la supeiglobal $_P0ST.
voiJ setPoromCookie{strinq $inJex, mixeJ $volue) Cambia un valoi enviauo en una peticion en la supeiglobal $_C00KIE.
booleon isSetRequestPorom{$inJex) Inuica si existe una llave paia un valoi en la supeiglobal $_REQ0EST.
booleon isSetueryPorom{$inJex) Inuica si existe una llave paia un valoi en la supeiglobal $_uET.
booleon isSetPostPorom{$inJex) Inuica si existe una llave paia un valoi en la supeiglobal $_P0ST.
booleon isSetCookiePorom{$inJex) Inuica si existe una llave paia un valoi en la supeiglobal $_C00KIE.
booleon isSetServerPorom{$inJex) Inuica si existe una llave paia un valoi en la supeiglobal $_SERvER.
booleon isSetFnvPorom{$inJex) Inuica si existe una llave paia un valoi en la supeiglobal $_ENv.
booleon isSetRequestPorom{$inJex) Elimina un valoi en la supeiglobal $_REQ0EST. Implicitamente elimina el valoi ue $_uET y $_P0ST.
booleon isSetueryPorom{$inJex) Elimina un valoi en la supeiglobal $_uET.
booleon isSetPostPorom{$inJex) Elimina un valoi en la supeiglobal $_P0ST. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 72
boolean isAjax() Inuica si la peticion ha siuo iealizaua usanuo A}AX. Funciona cuanuo se utiliza el fiamewoik }avasciipt Piototype.
booleon isIlosbRequesteJ{) Inuica si la peticion ha siuo iealizaua uesue un objeto Naciomeuia Flash inciustauo en un sitio Web.
booleon isSoopRequesteJ{) Inuica si la peticion ha siuo iealizaua uesue un cliente S0AP. Al solicitaisen este tipo ue peticiones a la aplicacion el auministiauoi ue piesentacion y eniutamiento se cambian paia cieai una comunicacion mocbine-to-mocbine.
booleon isSecure{) Inuica si la peticion se iealiza bajo una conexion enciiptaua usanuo BTTPS.
strinq qetRowBoJy{) Bevuelve el cueipo ue la peticion BTTP uiiectamente.
strinq qetEeoJer{strinq $nome) Bevuelve un encabezauo BTTP a paitii ue su nombie. Funciona anteponienuo el sufijo BTTP_ o sin l.
strinq qetScbeme{) Bevuelve el scheme (piotocolo) utilizauo paia iealizai la peticion BTTP. Bevuelve http o https geneialmente.
strinq qetEttpEost{) Bevuelve el host y pueito en el que iealizo la peticion. ueneialmente es la ip pblica o piivaua uel seiviuoi uonue esta instalauo el inteipiete PBP.
strinq qetHetboJ{) Bevuelve el mtouo BTTP utilizauo paia hacei la peticion P0ST, uET, P0T, etc. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 7S
booleon is6et{) Bevuelve tiue si la peticion BTTP fue iealizaua usanuo mtouo uET.
booleon isPost{) Bevuelve tiue si la peticion BTTP fue iealizaua usanuo mtouo P0ST.
booleon isPut{) Bevuelve tiue si la peticion BTTP fue iealizaua usanuo mtouo P0T. Es til cuanuo se ciean aplicaciones REST.
booleon is0ptions{) Bevuelve tiue si la peticion BTTP fue iealizaua usanuo mtouo 0PTI0NS. Es til cuanuo se ciean aplicaciones REST.
booleon isEeoJ{) Bevuelve tiue si la peticion BTTP fue iealizaua usanuo mtouo BEAB. Es til cuanuo se ciean aplicaciones REST.
booleon isBelete{) Bevuelve tiue si la peticion BTTP fue iealizaua usanuo mtouo BELETE. Es til cuanuo se ciean aplicaciones REST.
booleon bosIiles{) Inuica si la peticion incluye aichivos subiuos meuiante mtouo P0ST.
orroy qet0plooJeJIiles{) 0btiene un vectoi con objetos Controller0plooJIile que encapsulan la infoimacion ue aichivos subiuos en la peticion.
strinq qetETTPReferer{) 0btiene el BTTP iefeiei ue la peticion.
0btiene un vectoi con los mimes uel tipo ue conteniuo aceptauo poi el cliente BTTP junto con su caliuau. Bevuelve un aiiay como: Aiiay ( u = Aiiay ( accept = texthtml quality = 1 ) 1 = Aiiay ( accept = applicationxhtmlxml quality = 1 ) 2 = Aiiay ( accept = applicationxml quality = u.9 ) S = Aiiay ( accept = quality = u.8 ) )
orroy qetClientCborsets{) Bevuelve la lista ue iuiomas sopoitauos poi el cliente BTTP junto con su caliuau. Bevuelve un aiiay como: Aiiay ( u = Aiiay ( accept = IS0-88S9-1 quality = 1 ) 1 = Aiiay ( accept = utf-8 quality = u.7 ) 2 = Aiiay ( accept = quality = u.7 ) )
strinq qetBestuolityCborset{) 0btiene el chaiset ue mejoi caliuau sopoitauo poi el cliente BTTP. 8.8 Respuestas HTTP de Controladores La iespuesta que geneian los contiolauoies en una peticion BTTP es encapsulaua en el objeto ControllerResponse el cual funciona como un 6otewoy entie la vista y el contiolauoi. Este objeto esta implementauo al igual que ControllerRequest con el pation Sinqleton, es uecii que poi caua peticion a la aplicacion solo existii una intancia en touo el contexto ue ejecucion. Paia obtenei la instancia ue la clase ControllerResponse se usa el mtouo esttico qetlnstonce{).
/0#123.5 ;7. -#3 .90#%. I.$%8.33#8<#72.$7#
<?php
class DocumentsController extends ApplicationController {
public function indexAction(){ $response = ControllerResponse::getInstance(); $response->setHeader(Content-Type: application/pdf); $response->setResponse(ControllerResponse::RESPONSE_OTHER); $response->setResponseAdapter(pdf); }
}
En el ejemplo anteiioi la accion inuex visualiza un aichivo en foimato PBF que es leiuo en la piesentacion, el mtouo setEeoJer establece un encabezauo BTTP apto paia la saliua y auems inuica a la aplicacion que no uebe utilizai el auaptauoi ue piesentacion poi uefecto (BTNL) sino uebe usai 'puf'. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 7S
`O`Ob /7%,93#+#8 #3 %(2. -# 7,3(-, -# 3, K#%(+(:$ El contiolauoi piopoiciona el mtouo Controller::setResponse que peimite establecei el tipo ue saliua que se geneia en la accion solicitaua. Los tipos ue saliua que aumite este mtouo son los siguientes:
Y,3.8 6#7+8(2+(:$ view Inuica que solo la vista coiiesponuiente a la accion solicitaua sei la que se visualizai. 0sualmente aplica cuanuo se ienueiizan vistas paiciales o fiagmentos A}AX. ajax Realiza lo mismo que 'view' peio uocumenta el couigo ms claiamente. json Peimite piouucii saliuas usanuo notacion }S0N (}avaSciipt Seiializable 0bject Notation). xml Piouuce una saliua XNL, agiega el encabezauo Content-type: textxml y no muestia ningun layout asociauo. iss Piouuce una saliua XNL agiega el encabezauo encabezauo Content-type: applicationissxml y no muestia ningun layout asociauo.
Los valoies ue los tipos ue saliua son inteinamente conveitiuos a un tipo ue saliua sopoitauo poi ControllerResponse:
Y,3.8 6#7+8(2+(:$ RESP0NSE_N0RNAL Es la iespuesta que se geneia noimalmente. No es necesaiio estableceila. RESP0NSE_0TBER Inuica que no se uebe usai el auaptauoi ue visualizacion poi uefecto poique se geneiai una saliua en otio foimato.
En el siguiente ejemplo se ilustia como geneiai una saliua usanuo }S0N, la accion countltemsAction implementa una saliua piimeio establecienuo el tipo ue saliua y uespus hacienuo la saliua ue la misma, en qetltemsAction se iesumen los uos pasos anteiioies en una sola linea: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 76
class CartController extends ApplicationController {
public $items = array();
public function addToListAction($item){ $this->tems[] = $item; }
public function countItemsAction(){ $this->setResponse(json); $this->renderText($this->jsonEncode(count($this->tems))); }
public function getItemsAction(){ $this->outputJSONResponse($this->tems); }
}
4.%,5 El mtouo setResponse tiene una funcionaliuau limitaua poi lo cual ha siuo maicauo como obsoleto, en vez ue este se uebe usai view::setRenJerlevel en conjunto con Controller::setResponseType. `O`OP BKZ -# I.$%8.33#8<#72.$7# El API ue la clase ControllerResponse es:
public stotic ControllerResponse qetlnstonce{) 0btiene la instancia uel objeto ControllerResponse.
public voiJ setEeoJer{strinq $beoJer, booleon $reploce=true) Peimite establecei un encabezauo BTTP en la peticion actual. El paimetio $reploce inuica si el encabezauo uebe ieemplazai uno uel mismo tipo estableciuo anteiioimente.
public orroy qetEeoJers{booleon $process=true) 0btiene un aiiay con los encabezauos BTTP que van a sei enviauos en la iespuesta ue la peticion. Si el paimetio $piocess es true uevolveia un aiiay asociativo cuyas claves coiiesponuen a los nombies ue los encabezauos.
public booleon bosEeoJer{strinq $beoJerNome) Inuica si ya se ha uefiniuo un encabezauo paia sei enviauo en la iespuesta a la peticion.
Peimite establecei el tipo ue iespuesta que uebe geneiai la peticion. El paimetio $type iecibe los valoies ue las constantes ControllerResponse::RFSP0NSF_N0RHAl y ControllerResponse:: RFSP0NSF_0TEFR.
public inteqer qetResponseType{) 0btiene el tipo ue iespuesta que va a geneiai el contiolauoi. Bevuelve el valoi ue cualquieia ue las S constantes mencionauas anteiioimente.
public inteqer setResponseAJopter{strinq $oJopter) Establece el nombie uel auaptauoi utilizauo paia piocesai la saliua ue la peticion. Los posibles valoies paia $oJopter son json, puf y xml. En la iefeiencia uel componente view se explica como utilizai otios auaptauoies.
public function qetResponseAJopter{) Bevuelve el auaptauoi usauo paia geneiai la saliua. 8.9 Controlar acciones no encontradas Cuanuo se iealiza una peticion a un contiolauoi y la accion solicitaua no esta implementaua se geneia una excepcion que cuanuo no es contiolaua piesenta infoimacion ue la excepcion al usuaiio ue la aplicacion. La infoimacion ue excepciones piesenta infoimacion tcnica que en manos equivocauas pueue peimitii facilitai el ataque a la aplicacion.
El uesaiiollauoi pueue implementai la accion notIounJAction ya sea en el contiolauoi o en la jeiaiquia ue clases lo cul peimitii piesentai al usuaiio un mensaje peisonalizauo y piobablemente almacenai un log ue la situacion ocuiiiua.
class ReportsController extends ApplicationController {
public function notFoundAction($actionName=){ $logger = new Logger(File, notFoundReports.txt); $logger->log(No se encontr la accin $actionName); } } LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 78
8.10 Filtros en controladores Caua accion ejecutaua en cualquiei contiolauoi ue la aplicacion ejecuta, si estn piesentes filtios antes y uespus ue la ejecucion uel mtouo solicitauo. Los filtios peimiten ejecutai taieas ue autenticacion, politicas ue seguiiuau, valiuacion y eniutamiento, auems ue acceuei poi completo al entoino BTTP y mouificai la iespuesta ue la peticion.
Los uos tipos ue filtios son: beforeIilter que es ejecutauo antes ue ejecutai la accion solicitaua como tal y ofterIilter que se ejecuta inmeuiatamente uespus.
Los filtios son mtouos que se implementan uiiectamente como mtouos en la clase contiolauoia o en la jeiaiquia ue clases uel mismo. 0sualmente filtios geneiales paia touos contiolauoies se implementan en la clase pauie ControllerBose, ue esta foima inteiceptan touas las peticiones a la aplicacion.
class CustomerController extends ApplicationController {
public function beforeFilter(){ /** * Algn cdigo de filtro */ parent::beforeFilter(); }
} 8.11 Enrutamiento en controladores El componente Router ofiece seivicios que peimiten al uesaiiollauoi alteiai el flujo ue ejecucion como sea necesaiio, ya sea ieesciibienuo 0RLs, ieuiieccionanuo meuiante BTTP o hacienuo eniutamientos a nivel ue contiolauoi. El pioceso ue eniutamiento se iequieie en una aplicacion cuanuo es necesaiio llevai al usuaiio a un contiolauoi y accion sin que sea solicitauo piopiamente poi el mismo. `ObbOb I(+3. -# #$8"%,1(#$%. Poi caua peticion que se iealiza a la aplicacion se inicia un ciclo ue eniutamiento que peimite ejecutai touas las acciones iequeiiuas en los contiolauoies segn la logica ue negocio. Este ciclo ejecuta caua accion eniutaua como si se tiataia ue una peticion noimal ue usuaiio.
El psuuo-couigo uel ciclo ue eniutamiento es el siguiente: K7#"-.+:-().5 !3"0. \ .8-#$ -# #0#+"+(:$ -# #M#$%.7 #$ +(+3. -# #$8"%,1(#$%.
Cuanuo teimina el ciclo ue eniutamiento se tiansfieie el contiol ue la aplicacion a la piesentacion (vista), en uonue el compontente view iealiza este tiabajo. `ObbOP /$8"%,8 "7,$-. <."%#8558."%#T. El Componente Routei ofiece el mtouo esttico routeTo que iealiza las taieas ue eniutamiento y valiua si existen iutas estticas pieuefiniuas con la piioiiuau uel caso. Es LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 8u
posible utilizai paimetios con nombie paia inuicai la iuta iequeiiua uonue se uesea eniutai. El mtouo routeTo ue Controller es un pioxy al mtouo esttico mencionauo.
En el siguiente ejemplo se ilustia la valiuacion ue un usuaiio y su eniutamiento ue acueiuo a si la autenticacion es exitosa o falla:
El mtouo routeTo, giacias a los paimetios poi nombie, pueue iecibii la iuta ue eniutamiento en cualquiei oiuen, usanuo las claves: contiollei, action e iu. Si es necesaiio pasai ms paimetios auicionales pueue usai llaves numiicas que coinciuan con el oiuen en que la accion iecibe los paimetios iequeiiuos:
Cuanuo se solicita un eniutamiento con routeTo{) solo es efectivo hasta que teimina la ejecucion ue touo el mtouo ue la accion, es posible utilizai ietuin paia salii uel mtouo anticipauamente. `ObbOc /$8"%,8 "7,$-. <."%#8558."%#T.;<ZVW Tambin es posible hacei eniutamientos usanuo un 0nifoim Resouice Inuentifiei como lo es una clean 0RL uentio ue la misma logica ue aplicacion. Paia esto se iecuiie al mtouo esttico Router::routeTo0Rl que iealiza el papel uel mou_iewiite fiagmentanuo la 0RL y conviitinuola en los valoies inteinos necesaiio paia hacei el eniutamiento. El siguiente ejemplo ilustia la ieesciituia ue una fecha pasaua poi la 0RL estilo Bloggei:
class BloggerController extends ApplicationController {
public function showPostAction ($year, $month, $date, $name){ $this->routeToURI(/blogger/showPostByDate/$year-$month- $date/$name); }
public function showPostByDateAction($date, $name) { // alguna lgica aqui }
} 8.12 Inicializacin de Controladores Bebiuo a que el componente Controller piopoiciona un entoino ue estauo ue peisistencia, los objetos instanciauos ue las clases contiolauoias no son uestiuiuos al teiminai la sesion y son peisistiuos uuiante toua la sesion ue usuaiio. Segn lo anteiioi los constiuctoies ue las clases contiolauoias no son confiables paia inicializai las conuiciones ue ejecucion caua vez que se geneia una peticion a los mismos. Poi esta iazon se piopoiciona la posibiliuau ue uefinii el mtouo piotegiuo 'initialize' con el fin ue inicializai el objeto uesue la peisistencia en caua peticion al contiolauoi.
public $scaffold = true; public $template = "admin_menu";
public function beforeInsert(){ $clave = sprintf("%04s", mt_rand(0, 9999)); $this->Usuarios->clave = sha1($clave); Flash::success('La clave del Usuario es "'.$clave.'", por favor no la olvide'); }
public function beforeUpdate(){ $usuario = new Usuarios(); $usuario->find($this->getRequestParam("fl_id", "int")); $this->Usuarios->clave = $usuario->clave; }
Este mtouo es invocauo tanto en el constiuctoi uel contiolauoi como en el evento __wokeup que ocuiie al ueseiializai el objeto uesue la peisistencia ue sesion. 8.13 Estado de persistencia de Controladores Como se menciono anteiioimente Kumbio Fnterprise Iromework implementa peisistencia uel estauo ue los contiolauoies buscanuo apioximai el uesaiiollo Web a un compoitamiento ue aplicacion ue esciitoiio. Paia activaiuesactivai la peisistencia es necesaiio invocai el mtouo setPersistonce{bool $persitence), en el mtouo inicializauoi el contiolauoi.
uiacias a la implementacion uel pation base Reqistry en el componente Bispotcber, caua objeto ue una clase contiolauoia instanciaua se almacena tempoialmente y si se iealizan eniutamientos a contiolauoies pieviamente acceuiuos estos no son llevauos a peisistencia poi lo que el estauo ue sesion uel contiolauoi se mantiene intacto como la piimeia vez que se invoco un mtouo ue la misma.
Al activai la peisistencia el valoi uel atiibuto name se mantiene entie peticiones al contiolauoi:
`ObcOb Y#$%,0,7 -#3 /7%,-. -# K#87(7%#$+(, El estauo ue peisistencia o contexto ue conveisacion peimite que:
! Implementai atiibutos mouulaies en los contiolauoies ue tal foima que se haga un uso ms intuitivo ue los uatos ue sesion. ! Implementai inteifaces y componentes que "iecueiuen" el estauo que se le uio la ltima vez que se acceuio a ellos. ! Cieai conveisaciones con el usuaiio ue la aplicacion ue tal foima que contextualmente caua mouulo mantenga un flujo ue tiabajo o pioceso como paite ue su natuialeza ue negocio misma. `ObcOP I.$7(-#8,+(.$#7 -#3 #7%,-. -# K#87(7%#$+(, El estauo ue peisistencia esta pensanuo en uai la posibiliuau ue mantenei los valoies ue los atiibutos ue los contiolauoies con el fin ue establecei un contexto ue conveisacion entie el cliente y la aplicacion.
Los contiolauoies en un "estauo" peisistente almacenan los uatos en el auministiauoi ue sesiones, si el volumen ue uatos almacenauo es elevauo el ienuimiento ue la aplicacion pouiia uisminuii. Instancias ue entiuaues y otios objetos complejos que hagan paite ue los uatos ue peisistencia son excluiuos ue los uatos almacenauos uebiuo a la cantiuau ue iecuisos que consumen. Pueue utilizai el componente Cocbe paia almacenai este tipo ue objetos usanuo uiveisos backenus.
En el capitulo ue optimizacion y ienuimiento se piesenta el componente 6orboqeCollector que peimite ue foima contiolaua compiimii yo eliminai uatos ue estauo ue peisistencia que sean utilizauos poi la aplicacion. `ObcOc T8,$7,++(.$#7 \ I.$+"88#$+(, -#3 /7%,-. -# K#87(7%#$+(, Los contiolauoies con estauo ue peisistencia activo geneian una tiansaccion ue los atiibutos ue al iniciai la ejecucion ue cualquiei accion en el. Nientias se ejecuta la peticion en el contiolauoi la tiansaccion peimanece en un nivel ue isolacion en el cul no iealiza ningn bloqueo sobie los uatos ue sesion. Se pueue entenuei que se iealizan tiansacciones atomicas con estos uatos peisistentes. Peticiones con un alto giauo ue concuiiencia en la misma sesion ue usuaiio y al mismo contiolauoi pouiian geneiai inconsistencias.
Cuanuo se geneia una excepcion no contiolaua la tiansaccion iealiza un iollback hacienuo que los atiibutos uel contiolauoi peimanezcan intactos a su estauo en la ltima peticion exitosa. `ObcOd /M#$%.7 -#3 #7%,-. -# K#87(7%#$+(, 0n contiolauoi con el contexto ue peisistencia activauo pueue implementai eventos que peimitan mouificai la estauo inicial al iestauiai el objeto ue su estauo "uoimiuo" y tambin cual sei su estauo final antes ue sei almacenauo "uoimii":
T,93,5 T(2.7 -# 8#72"#7%, ^"# ,+#2%, #3 .90#%. I.$%8.33#8<#72.$7# /M#$%. 6#7+8(2+(:$ afteiRestoiePeisistence Se geneia cuanuo uespieita el contiolauoi ue su estauo "uoimiuo" en la peisistencia. Esto solo ocuiie cuanuo se iealiza una peticion al contiolauoi. befoieStoiePeisistence Se geneia cuanuo el objeto contiolauoi se esta piepaianuo paia ii a la peisistencia.
En el siguiente ejemplo se implementa el evento beforeStorePersitence paia evitai que un uato ue gian tamao no ielevante se lleve a la peisistencia:
8.14 La Clase ControllerBase Esta clase es la pauie ue touos los contiolauoies, el concepto ue esta clase esta inspiiauo en el pation "ApplicotionController" (no esta ielacionauo con la clase uel mismo nombie), que es una extension al NvC peimitienuo que paite ue la logica ue negocio sea compaitiua poi un clase ue la cual heieuan las uems. Esta clase auems siive ue punto ue inteiseccion y peimite ajustai el flujo ue ejecucion ue acueiuo al contexto en el que se invoque.
El uesaiiollauoi pueue implementai mtouos que sein heieuauos poi cualquiei contiolauoi ue la aplicacion. Es impoitante piotegei la visibiliuau ue la logica compaitiua en esta clase ue tal foima que solo sea utilizaua inteinamente poi los contiolauoies. 8.15 La Clase Controller La clase Controller implementa funcionaliuau compaitiua a touas las implementaciones ue contiolauoies. Esta clase acta como el coiazon ue la capa ue logica ue uominio. 8.16 Controladores usando ApplicationController `ObeOb I.$%8.3,-.8#7 "7,$-. @"3%(TC8#,-I.$%8.33#8 Este tipo ue contiolauoi es una sub-implementacion ue ApplicotionController cuyo objetivo es pouei implementai piocesamiento asimetiico paia gianues piocesos en contiolauoies. Be esta foima es posible ejecutai en foima simultanea taieas ue seguimiento y monitoiizacion paia piocesos ue negocio.
Los piocesos se ejecutan ue foima asincionica y en un oiuen que no pueue sei uenominauo seguio poi lo tanto son aptos paia piocesos ue uebug o monitoiizacion y no paia implementai otios piocesos ue negocio buscanuo su ejecucion simultnea.
En el siguiente ejemplo se simula la implementacion ue un pioceso ue negocio que uebiuo a la cantiuau ue uatos que se ueben piocesai pueue taiuai un tiempo piolongauo en piocesaise, si el pioceso fuese ms gianue y complejo hacei un seguimiento y monitoiizacion uetallauo pueue uegiauai piogiesivamente la logica misma.
El contiolauoi contiene una accion llamaua buqeProcess que contiene el pioceso a ejecutai, la anotacion synchionizeu en el mtouo loqProcessStote inuica que este mtouo uebe sei ejecutauo simultneamente con cualquiei accion ejecutaua en el contiolauoi: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 86
class MyProcessController extends MultiThreadController {
private $_percent; private $_customerName;
/** * Realiza el log del proceso * * @synchronized */ public function logProcessState(){ if($this->_logger==null){ $this->_logger = new Logger('File', 'processLog.txt'); } $this->_logger('El cliente actual es: '.$this->_customerName. ' '.$this->_percent); }
public function hugeProcessAction(){ $totalQuantity = 0; foreach($this->Movement->find() as $movement){ $customer = $movement->getCustomer(); $this->_customerName = $customer->getName(); $this->_percent = $movement->getQuantity()/ $customer->getCreditAmmount(); $product = $movement->getProduct(); if($product->getType()=='A'){ $totalQuantity+=$movement->getQuantity(); } } $this->setParamToView('totalQuantity', $totalQuantity); }
}
Nltiples mtouos uel contiolauoi pueuen tenei la anotacion synchionizeu ue tal foima que sean ejecutauos ue maneia simltanea con cualquiei accion uel contiolauoi. 8.17 Servicios Web usando WebServiceController `ObaOb f"_ #7 "$ ?#9 '#8M(+#g Segn la uefinicion ue la aiquitectuia ue Seivicios Web uel WSC, un seivicio Web es un sistema ue softwaie uiseauo paia sopoitai inteiaccion inteiopeiable maquina a maquina sobie una ieu ue computacion. Caua seivicio Web contiene una uesciipcion que otia maquina pueue piocesai (usanuo WSBL piobablemente). Algunos seivicios Web pueuen inteiactuai uiiectamente usanuo mensajes S0AP apoynuose en seiializacion XNL y el piotocolo BTTP en si.
Con Seivicios Web es posible uotai a las aplicaciones ue inteiopeiativiuau estnuai peimitienuo su comunicacion ue foima inuepenuiente a su platafoima tecnologica. Kumbio Fnterprise Iromework peimite al uesaiiollauoi implementai contiolauoies como Seivicios Web automatizanuo los piocesos ue publicacion uel seivicio, auministiacion y peisistencia en foima tianspaiente. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 87
0n contiolauoi WebServiceController funciona como un Seivice Pioviuei el cual piopoiciona un contiato ue seivicio que lo confoiman las acciones uel mismo y que son expuestas pblicamente como opeiaciones uel mismo ue tal foima que clientes exteinos pueuan utilizailos ue maneia contiolaua.
Los Seivice Customeis (clientes ue seivicios) y Seivices Pioviueis ofiecen funcionaliuau concieta paia el envio y iecepcion ue mensajes en una comunicacion maquina a maquina. Esto es tianspaiente paia el uesaiiollauoi aunque uebe sei mencionauo ue maneia infoimativa.
Kumbio Fnterprise Iromework piopoiciona capas ue Softwaie que peimiten implementai ya sea Seivice Customeis o Seivices Pioviueis en aplicaciones uesaiiollauas con l. Be esta foima usteu pueue pieocupaise poi uesaiiollai la logica ue negocio sin pieocupaise poi la foima en que los seivicios Web vayan a inteiactuai a ms bajo nivel. `ObaOP K,8, ^"# 7.$ $#+#7,8(.7 3.7 ?#9 '#8M(+#7 Las aplicaciones empiesaiiales se pueuen vei muy beneficiauas con el uso ue Web Seivices. Cieai contiatos ue seivicio auecuauos peimite a los uesaiiollauoies extiaei en foima abstiacta seivicios que peimitan el inteicambio ue infoimacion con aplicaciones ue teiceios, encapsulanuo uetalles como la conexion a bases ue uatos, cieuenciales ue seguiiuau, uominio y contiol ue la infoimacion entiegaua bajo las conuiciones pactauas.
Sistemas empiesaiiales ganan nuevos sub-sistemas ue comunicacion estanuaiizaua entie aplicaciones ue tal foima que su composicion sea ieutilizable y componible. Neuiante el uso ue Web Seivices se eliminan uepenuencias uel pasauo como el tiaspaso ue infoimacion meuiante aichivos planos, vistas en las bases ue uatos, conexiones poi FTP o uiiectamente a los RBBNs que caiecian ue un contiol auecuauo y obligaban a implementaciones iigiuas y complicauas auems ue exigii la integiacion ue otios componentes en su aplicacion. `ObaOc B8^"(%#+%"8, [8(#$%,-, , '#8M(+(.7 V'[BW Las oiganizaciones empiesaiiales ue hoy en uia iequieien inteiconectai piocesos e infoimacion entie los uepaitamentos ue las mismas, sus pioveuoies, clientes y socios comeiciales extenuienuo sus fionteias y aumentanuo la competitiviuau y capaciuau ue ciecimiento. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 88
La Aiquitectuia 0iientaua a Seivicios piopoiciona elementos que peimiten que un conjunto ue aplicaciones uistiibuiuas se convieita en conjunto ue iecuisos que pueuan sei utilizauos tanto inteina como exteinamente y como iesultauo se obtiene mayoi agiliuau y piouuctiviuau en la oiganizacion.
Kumbio Fnterprise Iromework ofiece heiiamientas paia la constiuccion ue una Aiquitectuia 0iientaua a Seivicios, sin embaigo, uebe sei el aiquitecto o uesaiiollauoi quien uebe ueteiminai si es iealmente necesaiio implementai esta estiategia ue acueiuo a la complejiuau y objetivos uel negocio.
Tiansfoimai la logica ue negocios empiesaiial a una aiquitectuia oiientaua a seivicios incluye implementai contiatos ue seivicio, ieusabiliuau, abstiaccion, loose coupling (acoplamiento ubil) y composibiliuau. S0A es un mouelo aiquitectacional paia platafoimas ue tecnologia y caua empiesa pueue uefinii los objetivos asociauos a computacion oiientaua a seivicios usanuo uifeientes tecnologias.
0sai Web Seivices es piobablemente uno ue las mejoies opciones paia aplicai los piincipios S0A y empezai a usai esta aiquitectuia. `ObaOd I8#,8 "$ ?#9 '#8M(+# Como se menciono anteiioimente es posible cieai seiviuoies paia seivicios Web usanuo la implementacion ue Contiollei llamaua WebServiceControllei. Este tipo ue Contiolauoi peimite cieai seivicios web XNL y encapsula toua la comunicacion basaua en el estnuai S0AP. Las comunicaciones sopoitan las especificaciones S0AP 1.1 y 1.2 asi como el uso ue uesciiptoies WSBL.
A pesai que los mensajes S0AP son complejos touos estos uetalles son tianspaientemente implementauos en una capa funcional apta al uesaiiollo ipiuo y efectivo. Bel lauo uel seiviuoi el uesaiiollauoi pueue implementai seivicios usanuo lenguaje PBP nativo y la aiquitectuia y seivicios uel fiamewoik sin uemasiauos cambios. Bel lauo uel cliente es posible utilizai seivicios Web invocanuo el nombie ue los mtouosacciones implementauos en el seivicio seiviuoi.
uiacias a que se cumple con la especificaciones uefiniuas poi el WSC (Woiu Wiue Web LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 89
Consoitium) es posible tenei inuepenuencia uel lenguaje PBP tanto uel lauo uel cliente como uel seiviuoi. Lo anteiioi peimite acceuei a seivicios Web cieauos en otias platafoimas y lenguajes y que estn acceuan a otios cieauos usanuo PBP.
El ejemplo a continuacion muestia la uefinicion ue un seivicio Web simplificauo que peimite chequeai la uisponibiliuau ue fechas paia iealizai una ieseiva en un sistema ficticio. En el piimei mtouo stortSession se iecibe como paimetios el login y passwoiu y usanuo el componente Autb se autentica contia un seiviuoi ActiveBirectory usanuo el auaptauoi LBAP, si estas cieuenciales son valiuas entonces el iesultauo uevuelto es uevuelto y posteiioimente peimite valiuai que el usuaiio este autenticauo. Notese que el segunuo mtouo qetAvolobility lanza una excepcion WebServiceControllerFxception cuanuo no se cumple una valiuacion la cual se notifica al cliente ue igual maneia.
Los valoies escalaies uevueltos poi caua mtouo se tiansfieien tianspaientemente entie el seiviuoi y el cliente, uatos ms complejos exigen uistiibuii componente compaitiuos ue tal maneia que no haya peiuiua ue infoimacion entie el Seivice Pioviuei (seiviuoi) y el Customei (cliente).
Notese que touos los mtouos ue la clase que vayan a sei acceuiuos iemotamente ueben tenei el sufijo Action.
/0#123.5 '#8M(+(. R#9 +.$ ?#9'#8M(+#I.$%8.33#8
<?php
class ReservationController extends WebServiceController {
public function successCheckingAction($ticketNumber){ Flash::success(Felicidades, esta disponible el ticket $ticketNumber); }
}
`ObaON ?#9'#8M(+#I3(#$% Kumbio Fnterprise Iromework tambin piopoiciona la clase WebServiceClient que extienue el cliente S0AP SoopClient y pietenue uai ms faciliuaues al tiabajai con seivicios Web con seiviuoies en este fiamewoik. El piimei paimetio uel constiuctoi pueue sei la ubicacion uel LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 91
seivicio (locotion) cuyo 0niform Resource lJentificoJor (uii) es bttp:,,opp-services:
La extension Soap ue PBP es iequeiiua paia usai este cliente. `ObaOe [9%#$(#$-. #3 ?'6E -# "$ '#8M(+(. ?#9 Kumbio Fnterprise Iromework pueue hacei AutoBiscover ue seivicios Web basauos en WebSeiviceContiollei, en caso que no se uefina un WSBL manualmente paia el seivicio. Paia geneiai un uesciiptoi WSBL coiiecto es necesaiio agiegai PBPBocs a caua accion uel contiolauoi y asi pouei ueteiminai el tipo ue uato uevuelto poi caua opeiacion pblica uel Service ProviJer, sino se pueue ueteiminai se geneia un empty type.
El mapeo ue los valoies escalaies tanto los que se ieciben como los que se envian en PBP a su LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 92
coiiesponuiente xsu o soap-enc, es el siguiente:
Stiing : <xsu:stiing, Integei : <xsu:integei, Float y Boubles : <xsu:float, Boolean: <xsu:bool, Aiiay : <soap-enc:Aiiay y objetos <xsu:stiuct.
Es posible invocai la accion getWSBLBesciiptoi en el contiolauoi paia obtenei una uesciipcion WSBL uel seivicio. `ObaOa [8^"#7%,+(:$ -# 7#8M(+(.7 La logica ue negocio ue los seivicios web es implementaua usanuo contiolauoies que hacen paite ue la aiquitectuia NvC, tanto la capa ue logica ue uominio como la ue uatos tienen sentiuo paia el uesaiiollauoi peio la piesentacion no existe o no es claio su implementacion ya que en seivicios web la comunicacion se iealiza entie maquinas y no existe inteivencion humana uonue se iequieia.
Al iecibii una peticion uesue un cliente Soap la instancia uel fiamewoik es capaz ue eniutai a la accion en el contiolauoi auecuaua examinanuo el mensaje S0AP enviauo a la aplicacion. Luego ue ejecutai la logica ue uominio en la accion el valoi uevuelto poi esta es tiatauo y conveitiuo en un mensaje S0AP que se envia al cliente.
La manipulacion a bajo nivel ue los mensajes S0AP se le encaiga al componente Soap que implementa los iecuisos necesaiios paia iecibii y enviai comunicaciones ue seivicios Web y haceilo tianspaiente al usuaiio.
En el siguiente ejemplo se ilustia como la comunicacion ue seivicios Web es tianspaiente al uesaiiollauoi y como el entoino NvC facilita la oiquestacion ue seivicios:
En la maquina seiviuoi1 se implementa el siguiente seivicio web:
class AritmethicController extends WebServiceController {
public function addAction($a, $b){ return $a + $b; } }
En la maquina seiviuoi2 se implementa un cliente uel Seivicio Web:
/0#123.5 B++#7. ,3 7#8M(+(. R#9 ,8(%1_%(+.
<?php
class CalculatorController extends WebServiceController {
public function addAction($x, $y){ $service = new WebServiceClient(http://server1/ins/aritmethic/); $result = $service->add($x, $y); //Realiza la suma en el servidor1 } }
Al invocaise la accion colculoJor,oJJ en seiviuoi 2 se mapean automticamente los valoies ue $x y $y a la accion auu a $a y $b iespectivamente en seiviuoi1 al invocai este mtouo en el objeto ue seivicio cieauo.
El mismo ejemplo se pueue implementai utilizanuo un Pioxy a un teicei seiviuoi quien finalmente iealiza la opeiacion.
El seivicio web en el seiviuoi2 queua asi implementauo:
/0#123.5 6#*($(8 "$ K8.H\ , 7#8M(+(.7 R#9
<?php
class AritmethicController extends WebServiceController {
public function addAction($a, $b){ $service = new WebServiceClient(http://server3/ins/aritmethicserver/); return $service->add($x, $y); //Devuelve la suma en el servidor3 } }
El seivicio Web AritmetbicServer implementauo en el seiviuoiS:
class AritmethicServerController extends WebServiceController {
public function addAction($c, $d){ return $c + $d; }
}
Aunque no es necesaiio implementai este ejemplo usanuo S maquinas, peimite ilustiai como se pueue abstiaei la logica ue aplicacion en foima uistiibuiua ue tal foima que mltiples aplicaciones acceuan a seivicios ieutilizables que aumentan la escalabiliuau ue los sistemas uesaiiollauos. `ObaO` I,8,+%#8=7%(+,7 -# '#8M(+(.7 ?#9 #$ h"19(, /$%#828(7# Al igual que los otias implementaciones ue contiolauoies, en los seivicios web usanuo WebServiceController se usa ue foima tianspaiente toua la funcionaliuau uel fiamewoik que se usa en los contiolauoies ue aplicacion, algunas ue estas son:
Es posible acceuei a los mouelos como piopieuaues ue la clase contiolauoia Se pueue implementai peisistencia uel estauo uel contiolauoi entie sesiones y peticiones Se pueue eniutai el flujo ue ejecucion a otios seivicios Web uentio ue la misma aplicacion Seguiiuau ueclaiativa y piogiamacional se pueue implementai en este tipo ue contiolauoies 8.18 Controladores StandardForm La implementacion ue contiolauoies StonJorJIorm es una caiacteiistica heieuaua ue Kumbio PEP Iromework. Poi motivos ue compatibiliuau con aplicaciones existentes en la veision Fnterprise su funcionaliuau se mantiene intacta. El objetivo ue esta implementacion es la geneiacion uinmica ue foimulaiios que peimitan auministiai la infoimacion ue tablas en la conexion pieteueiminaua uel entoino actual.
El uesaiiollauoi uebe evaluai si las limitantes ue esta implementacion no afectain en un futuio los objetivos ue negocio ue la aplicacion.
4.%,5 Esta implementacion esta agenuaua paia sei maicaua como obsoleta en veisiones posteiioies uel fiamewoik. louJerTecbnoloqy est activamente uesaiiollauo louJer LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 9S
Applicotion Iorms el cul geneia componentes ue aplicacion iobustos que apiovechan ue maneia ms auecuaua y flexible las posibiliuaues uel fiamewoik. `Ob`Ob I,8,+%#8=7%(+,7 -# '%,$-,8-!.81 ueneiacion uinmica ue un CR0B (Cieate, Reau, 0puate, Belete) con posibiliuau ue utilizai paite ue ellas o touos. Be acueiuo a la infoimacion ue los meta-uatos ue una tabla en la base ue uatos geneianuo componentes ue inteifaz ue usuaiio auecuauos paia caua campo. Es posible iealizai valiuacion uel lauo uel cliente y uel seiviuoi. Es posible implementai eventos ue acueiuo a las acciones ejecutauas poi el usuaiio en el contiolauoi. La infoimacion ue la tabla cieaua pueue sei expoitaua a PBF, BTNL, Niciosoft Woiu y Excel. `Ob`OP E(1(%,$%#7 -# '%,$-,8-!.81 La especificacion uel mouelo entiuau-ielacion esta limitaua a tablas y campos uefiniuos meuiante las convenciones uel fiamewoik La funcionaliuau ue los foimulaiios geneiauos sobie touo la visual pueue sei uificil ue peisonalizai con iespecto a los objetivos uel uesaiiollauoi. 8.19 Plugins de Controladores En cieitas ocasiones cuanuo las aplicaciones coiien en mltiples entoinos con uifeientes caiacteiisticas, la funcionaliuau y alcance ue la misma aplicacion no es suficiente y se uebe extenuei automticamente uuiante el iuntime. La aiquitectuia ue plugins ue Contiolauoies peimite obseivai, extenuei y manipulai el compoitamiento ue las clases contiolauoias ue la aplicacion segn las conuiciones lo exijan.
Los plugins peimiten inteiceptai eventos ue los contiolauoies ue tal foima que estos sean obseivables y auems ejecutise uno tias otio ue maneia centializaua sin iequeiii iefactoiizacion o ieintegiacion en la aplicacion. `ObiOb I8#,8 "$ K3")($ -# I.$%8.3,-.8 Los plugins ue contiolauoi son clases que implementan eventos que son invocauos a meuiua que avanza la ejecucion ue una peticion en cualquiei contiolauoi. Estas clases ueben cumplii con los siguientes iequeiimientos:
! Beben estai ubicauos en el uiiectoiio ue plugins usualmente opps,opp-nome,pluqins ! El nombie uel aichivo que implementa la clase uebe sei el nombie uel plugin ! El nombie ue la clase uebe tenei la extension Pluqin ! Los plugins ue contiolauoi ueben heieuai ue la clase ControllerPluqin o sei subclase ue ella
Las clases pueuen implementai mtouos pblicos que iefeiencian los eventos ocuiiiuos en los contiolauoies, la lista ue ellos es la siguiente:
4.198# /M#$%. 6#7+8(2+(:$ befoieBispatchLoop 0cuiie antes ue iniciai el ciclo ue eniutamiento, en este punto no se ha caigauo el contiolauoi, aunque se encuentia uisponible touo el entoino ue la aplicacion. befoieBispatch 0cuiie uentio uel ciclo ue eniutamiento y justo antes ue invocai el contiolauoi solicitauo. Este evento se invoca poi caua contiolauoi usauo en el flujo ue ejecucion. befoieExecuteRoute 0cuiie antes ue ejecutai la accion solicitaua en el contiolauoi, en este punto se pueue obtenei los uatos ue la peticion, contiolauoi, accion y paimetios. afteiExecuteRoute 0cuiie uespus ue ejecutai la accion solicitaua en el contiolauoi. afteiBispatch 0cuiie uespus uel pioceso ue ejecucion ue la accion poi contiolauoi. afteiBispatchLoop 0cuiie cuanuo teimina el ciclo ue eniutamiento. befoieNotFounuAction 0cuiie cuanuo la accion o contiolauoi ejecutauo solicitauo no esta implementauo. Es inuepenuiente ue si la accion notFounuAction est implementaua. befoie0ncaugthException 0cuiie antes ue lanzaise una excepcion que no fue captuiaua poi la aplicacion. onContiolleiException 0cuiie cuanuo se geneia una excepcion uentio uel contiolauoi. Se ejecuta antes ue befoie0ncaughException
9 Componente UDDI 9.1 Introduccin Este componente es una implementacion ue la especificacion ue seivicios Web, 0niveisal Besciiption, Biscoveiy anu Integiation (0BBI). El piinicipal objetivo ue este componente es peimitii a seivicios e contiolauoies uesaiiollauos en Kumbio Fnterprise seivii como iegistios ue seivicios peimitienuo que uominios ue computacion heteiogeneos pueuan consultailos y conectai seivicios a sistemas existentes. 9.2 Requerimientos Se iequieie tenei en cuenta lo siguiente paia utilizai 0BBI:
! K#87(7%#$+(,5 El componente 0BBI iequieie ue un gestoi ielacional paia almacenai los iegistios uel uiiectoiio. ! B"%#$%(+,+(:$5 El componente Autb es iequeiiuo paia ofiecei los seivicios ue autenticacion a los contiolauoies ue publicacion ue iegistios.
10 Componente BusinessProcess 10.1 Introduccin Este componente ua la posibiliuau ue implementai meta-piocesos usanuo BPN, ue esta foima se busca la optimizacion y mejoiamiento ue piocesos ue negocio en una aplicacion uesaiiollaua usanuo Kumbio Fnterprise.
Actualmente el lenguaje PBL es sopoitauo poi este componente con el cual se pueue expiesai piocesos ue negocio en teiminos ue taieas, estauos ue espeia, comunicacion sincionica, etc.
El componente peimite su integiacion con otios componentes peimitienuo levantai configuiacion, establecei peisistencia, iuentificacion, etc. 10.2 Job Executor El componente BusinessPiocess ofiece un entoino ue ejecucion paia PBP que peimite ejecutai piocesos PBL ya sea paia oiquestai seivicios o ejecutai piocesos funcionales. 10.3 Crear un Proceso de Negocio 0n pioceso ue negocio se especifica utilizanuo una estiuctuia XNL
11 Componente Filter 11.1 Introduccin El componente Iilter piopoiciona un conjunto ue filtios ue uatos y una inteifase consistente paia su aplicacion a uatos y entiaua ue usuaiio en un pioceso ue negocio.
Los filtios estn uiseauos paia tiansfoimai uatos, quitai paites inueseauas, eliminai espacios o caiacteies innecesaiios y en iesumen aseguiaise que una vaiiable contiene lo que se espeia que contenga.
El aplicai los filtios auecuauos a la entiaua ue usuaiio constituye el piimei paso paia ceicioiaise que los piocesos ue negocio se ejecutaian utilizanuo uatos que en cieita foima no uaen ni alteien el flujo y estauo noimal ue una aplicacion. 11.2 Estructura del Componente El componente lo constituye la clase Iilter y una seiie ue filtios base ue uso geneial que incluye el fiamewoik paia su aplicacion al comn ue aplicaciones Web ue negocios.
Los filtios base son los siguientes:
T,93,5 !(3%8.7 9,7# -#3 +.12.$#$%# !(3%#8
4.198# 4.198# I.8%. ;7.J6#7+8(2+(:$ Alnum alnum Filtia caiacteies alfanumiicos (letias y nmeios). Alpha alpha Filtia letias uel abeceuaiio occiuental incluyenuo caiacteies latinos como vocales con tilue y ees. AuuSlaches auuslaches Escapa las comillas simples y uobles paia evitai inyeccion ue SQL. BaseName basename Filtia un path paia obtenei el nombie uel aichivo o el ltimo uiiectoiio. Bate uate Filtia una cauena ue caiacteies uevolvienuo una fecha que coinciua con la expiesion iegulai LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1uu
'(19|2u)(\u2)-\(\u1,2)-\(\u1,2)' o el foimato YYYY-NN-BB. Bigits uigits Filtia una cauena paia que contenga solo uigitos (nmeios uel u al 9) Bouble uouble Filtia un valoi uevolvienuo un valoi numiico ue alta piecision. Email email Filtia una cauena ue caiacteies uevolvienuo un coiieo electionico valiuo. Extiaspaces extiaspaces Filtia una cauena ue caiacteies eliminanuo espacios y saltos ue linea al piincipio y final ue la cauena. Float float Filtia un valoi uevolvienuo un valoi numiico ue alta piecision BtmlEntities htmlentities Convieite touos los caiacteies aplicables ue una cauena ue caiacteies a sus entiuaues BTNL coiiesponuientes. BtmlBecoue htmluecoue Convieite entiuaues BTNL a su caictei 0TF-8 coiiesponuiente. Iuentifiei iuentifiei Filtia un valoi uejanuo solo un iuentificauoi ue vaiiable valiuo. Int int Filtia el valoi iecibiuo en un enteio ue S2bit o 64 bit uepenuienuo ue la platafoima. Ipv4 ipv4 Filtia una cauena ue caiacteies uevolvienuo una uiieccion IP veision 4. Ipv6 ipv6 Filtia una cauena ue caiacteies uevolvienuo una uiieccion IP veision 6. Lowei lowei Filtia una cauena ue caiacteies uevolvinuola en minsculas. Este filtio iespeta el chaiset ue la aplicacion. Locale locale Filtia una cauena ue uefinicion ue localizacion 0NIC0BE. NuS muS Convieite una cauena ue caiacteies a su iesumen ciiptogifico muS LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u1
Numeiic numeiic Convieite el valoi iecibiuo en valoi numiico. 0nechai onechai Filtia la cauena paia obtenei un solo caictei. Stiipspace stiipspace Elimina los caiacteies espacios en toua la cauena ue caiacteies iecibiua. Stiiptags stiiptags Elimina las etiquetas BTNL que contenga la cauena ue caiacteies iecibiua. Stiipslaches stiipslaches Bes-escapa una cauena ue caicteies conviitienuolos a sus caicteies ue comillas noimales. 0ppei uppei Filtia una cauena ue caiacteies uevolvinuola en maysculas. Este filtio iespeta el chaiset ue la aplicacion. 0tf8 utf8 Convieite una cauena ue caiacteies en IS0- 88S9-1 a 0TF-8 11.3 Usar filtros en forma directa Paia aplicai un filtio a un valoi en foima uiiecta es necesaiio instanciai la clase Filtei e invocai el mtouo applyFilteis envianuo como piimei paimetio el valoi a filtiai y como paimetios siguientes los nombies coitos ue los filtios a aplicai:
/0#123.5 I8#,8 *(3%8.7 #$ *.81, -(8#+%, <?php
$filter = new Filter(); print $filter->applyFilter("a1b2c3d4e5", "digits"); // Imprime 12345
Es necesaiio cieai una instancia ue filtei poi caua combinacion ue filtios que se iequieian aplicai ya que caua objeto filtei almacena en un buffei estos filtios:
El mtouo esttico Iilter::looJ caiga uno o ms filtios ya sean ue usuaiio o base luego se agiegan los filtios y se aplican como es estnuai. Los filtios tambin pueuen agiegaise poi su nombie coito, agiegai vaiios a la vez y mezclailos. El oiuen en que se agiegan inuica el oiuen ue aplicacion:
$filter = new Filter(); $filter->addFilter("striptags"); $filter->addFilter("email", new LowerFilter()); $filter->addFilter(new SpecialFilter());
print $filter->applyFilter("<b>ANEWUSER@YAHOO.ES</b>")."<br>"; 11.5 Usar filtros en Controladores Los contiolauoies son piobablemente un punto uonue los filtios tengan mayoi paiticipacion ya que es aqui uonue se iequieie aseguiai que los piocesos ue negocio se ejecuten con uatos consistentes y confiables.
El mtouo ue Controller::filter actua como un Pioxy al componente Iilter peimitienuo filtiai vaiiables sin instanciai explicitamente alguna clase auicional:
class InvoicesController extends ApplicationController {
public function listInvoicesAction(){
//Se obtiene un valor de la entrada y se filtra $initialDate = $this->getPostParam("initialDate"); $initialDate = $this->filter($initialDate, "date");
//Resto del proceso }
}
Auicional a lo anteiioi los mtouos ue Controller qetPostPorom, qetRequestPorom y qetueryPorom ieciben como paimetios extia al valoi iequeiiuo nombies coitos ue filtios los cuales se aplican en este oiuen y se ietoinan al pioceso:
class InvoicesController extends ApplicationController {
public function listByNameInvoicesAction(){
//Se obtiene un valor de la entrada y se filtra directamente $name = $this->getPostParam("name", striptags, extraspaces);
//Resto del proceso }
} 11.6 Filtrar la entrada de usuario El componente filtei est integiauo a los contiolauoies peimitienuo valiuai la entiaua ue usuaiio cuanuo es iecibiua uesue un foimulaiio o una 0RL.
El siguiente ejemplo uefine una seiie ue ieglas paia valiuai los valoies iecibiuos uesue una entiaua ue usuaiio geneianuo los mensajes coiiesponuientes:
<?php
class UsersController extends ApplicationController {
public function doRegisterAction(){ $fields = array( 'username' => array( 'message' => 'Por favor indique su nombre de usuario', 'filter' => 'extraspaces|striptags' ), 'password' => array( 'message' => 'Por favor indique su contraseña' LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u4
), 'confirmPassword' => array( 'message' => 'Por favor indique la confirmación de la contraseña' ), 'email' => array( 'message' => 'Por favor indique su correo electrnico', 'filter' => 'email' ), 'confirmEmail' => array( 'message' => 'Por favor indique la confirmacin de su correo electrnico', 'filter' => 'email' ), 'name' => array( 'message' => 'Por favor indique su nombre', 'filter' => 'extraspaces|striptags' ), 'lastName' => array( 'message' => 'Por favor indique sus apellidos', 'filter' => 'extraspaces|striptags' ), 'address' => array( 'message' => 'Por favor indique la direccin de su residencia', 'filter' => 'extraspaces|striptags' ), 'phone' => array( 'message' => 'Por favor indique su telfono' ), 'city' => array( 'message' => 'Por favor indique la ciudad' ), 'company' => array( 'message' => 'Por favor indique la empresa' ) ); if($this->validateRequired($rules)==false){ foreach($this->getValidationMessages() as $message){ $message->showErrorMessage(); } $this->routeTo(array('action' => 'startSignIn')); } } }
La piopieuau ue la iegla 'filtei' peimite uefinii el filtio que uebe sei aplicauo a caua valoi iecibiuo antes ue ueteiminai si est piesente, ue esta foima se contiola que el valoi evaluauo sea vliuo y se geneie el mensaje coiiesponuiente. Si se iequieie que se aplique ms ue un filtio, se pueue inuicai una lista sepaiaua poi | (pipes).
Consulte el componente voliJotor paia obtenei ms infoimacion sobie filtiai la entiaua ue usuaiio. 11.7 Crear un filtro de usuario El uesaiiollauoi pueue cieai sus piopios filtios en la aplicacion e integiailo al componente filtei paia su posteiioi utilizacion.
Tanto los filtios base como los ue usuaiio ueben implementai la inteiface Iilterlnterfoce que tiene la siguiente estiuctuia:
<?php
interface FilterInterface {
public function execute($value);
}
bbOaOb <#^"#8(1(#$%.7 -# "$ *(3%8. -# "7",8(. Al cieai un filtio ue usuaiio se uebe tenei en cuenta lo siguiente:
Se ciea un aichivo ubicauo en el uiiectoiio filters, ue la aplicacion o uonue la opcion filtersBir uel aichivo ue configuiacion confiq,config.ini inuique. El nombie uel aichivo es el nombie uel filtio con la piimeia letia en mayscula El aichivo uebe contenei una clase con el nombie uel filtio y sufijo "Iilter" La clase uebe implementai la inteiface Iilterlnterfoce
En el siguiente ejemplo se ciea un filtio ue usuaiio que apaitii ue una 0RL filtia el uominio que coiiesponue a ella:
12 ActionHelpers 12.1 Introduccin Los ActionEelpers son subcomponentes auxiliaies que complementan y auxilian a las implementaciones ue contiolauoies algunas veces establecienuo puentes a la piesentacion y otias veces a la capa ue uatos. 12.2 Mensajes usando Flash El ActionEelper Ilosb peimite la geneiacion ue mensajes contextuales en cualquiei paite ue la aplicacion. Auicional a esto es posible almacenai mensajes paia sei mostiauos cuanuo se iequieia en otias peticiones. bPOPOb j#$#8,8 1#$7,0#7 +.$%#H%",3#7 Los mensajes contextuales peimiten apaite uel mensaje poi meuio ue coloies e iconos infoimai el caictei uel mismo.
T,93,5 T(2.7 -# 1#$7,0#7 +.$%#H%",3#7 +.$ !3,7C
@_%.-. T(2. 6#7+8(2+(:$ Flash::eiioi Eiioi Infoima que hay una situacion ue eiioi. Poi uefecto se usa fonuo iosa, texto en iojo y un icono ue auminiiacion. Flash::notice Infoimacion Ba el contexto ue infoimacion. Poi uefecto se usa fonuo azul y letia azul oscuio. Flash::success xito Inuica que la opeiacion tuvo xito o se ejecuto un pioceso satisfactoiiamente. Poi uefecto se usa fonuo veiue llamativo y letia veiue oscuia. Flash::waining Auveitencia ueneia un mensaje con el contexto ue auveitencia. Poi uefecto se usa amaiillo claio en el fonuo, letia en negio y un icono ue aleita.
Touos los mtouos ieciben en su paimetio el mensaje a mostiai. bPOPOP I,19(,8 #3 #7%(3. 2.8 -#*#+%. -# 3.7 1#$7,0#7 Si se uesea cambiai el estilo ue los mensajes ue texto se pueue mouificai o sobieesciibii las clases CSS en el aichivo public,css,style.css que siempie se inseita en touas las peticiones. Poi LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u8
.warningMessage { background-image: url("@path/img/warning.gif"); background-color: #FFFFC6; color: #000000; border: 1px solid #DDDD00; } bPOPOc I,19(,8 #3 #7%(3. #$ *.81, -($U1(+, Si se iequieie cambiai la piesentacion ue un mensaje en foima piogiamacional se pueue enviai un listauo ue clases CSS como segunuo paimetio.
Flash::notice("Esto es una informacin personalizada", array("mi_clase_css", "otra_clase_css"));
bPOPOd /$M(,8 1G3%(23#7 1#$7,0#7 -#3 1(71. %(2. #$ *.81, 7(1G3%,$#, Cuanuo el piimei paimetio iecibiuo poi un mtouo ue mensajes es un vectoi con mensajes la lista ue estos es enviaua una tias otia en el oiuen iecibiuo.
Flash::error(array( "Este es el primer error", "Este es el segundo error", "Este es el tercer error", )); LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u9
bPOPON @.7%8,8 1#$7,0#7 2.8 7" %(2. El mtouo ue Ilosb llamauo messoqe peimite mostiai un mensaje utilizanuo una constante como segunuo paimetio que establece el tipo a mostiai:
Flash::message("Esto es una advertencia", Flash::WARNING); Flash::message("Esto es un error", Flash::ERROR, array("my_error_css"));
bPOPOe I,+C#,8 1#$7,0#7 2,8, 1.7%8,83.7 #$ 3, 28:H(1, 2#%(+(:$ Si se iequieie mostiai mensajes al usuaiio uespus ue iealizai una ieuiieccion se pueue utilizai el mtouo oJJHessoqe que funciona como el mtouo messoqe iecibe el mensaje y un couigo inuicanuo el tipo. Los mensajes que se agiegan ue esta foima no son visualizauos sino hasta que se invoca el mtouo qetHessoqes{).
El siguiente ejemplo ilustia el funcionamiento ue este tipo ue mensajes:
<?php
class LoginController extends ApplicationController {
public function indexAction(){ Flash::addMessage("Bienvenido usuario", Flash::SUCCESS); $this->redirect("login/menu"); }
public function menuAction(){ foreach(Flash::getMessages() as $message){ Flash::message($message['message'], $message['type']); } }
}
Los mensajes agiegauos con oJJHessoqe se almacenan en un buffei uel contexto ue sesion. Cuanuo los mensajes se obtienen con qetHessoqes el buffei inteino se iesetea. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 11u
12.3 Condiciones SQL con FormCriteria El actionhelpei IormCriterio peimite cieai conuiciones SQL a paitii ue los paimetios iecibiuos poi un foimulaiio ue entiaua ue usuaiio. Be acueiuo a los paimetios iecibiuos, solo los que tengan valoies no nulos se incluyen en las conuiciones geneiauas.
En el siguiente ejemplo se muestia como cieai la conuicion ue bsqueua paia uiveisos tipos ue uatos obteniuos uesue un foimulaiio.
Los uatos captuiauos son:
! I:-().5 Coiiesponue al couigo uel piouucto y es ue tipo numiico. ! 4.198#5 El nombie uel piouucto y es ue tipo texto. ! I,%#).8=,5 Campo ue tipo enteio ue la entiuau ProJucts que es ielacion a la tabla ProJuctCoteqories. Se usa Toq::select paia caigai los uatos ue esta tabla y se inuica el paimetio useBummy paia agiegai la opcion 'Seleccione'. ! T(2.5 Combo cieauo apaitii ue un aiiay con valoies estticos que coiiesponue al campo type ue la entiuau ProJucts.
El foimulaiio en la vista views,proJucts,inJex.pbtml es el siguiente:
El constiuctoi iecibe 2 paimetios, el piimeio coiiesponue al oiigen ue los uatos ue los cuales se constiuiia el ciiteiio ue bsqueua. El segunuo es un uesciiptoi con los campos que se ieciben uel foimulaiio y la foima en que uebe constiuiise la conuicion paia caua uno. Las llaves uel uesciiptoi son los nombies ue las vaiiables que vienen uel foimulaiio y que son paite uel oiigen ue uatos. En el ejemplo el oiigen ue uatos es la supeiglobal $_P0ST.
La uesciipcion ue las opciones paia caua campo es:
[2+(:$ 6#7+8(2+(:$ type Es el tipo ue uato que se espeia iecibii uel foimulaiio. Pueue sei integei, float, uouble, uate y stiing. Bepenuienuo uel tipo ue uato es posible que se apliquen filtios. opeiauoi 0n opeiauoi compatible con el gestoi ielacional utilizauo. Cuanuo la opcion "type" es integei, float, uouble y uate se utiliza el opeiauoi '=' cuanuo es stiing se usa el opeiauoi 'LIKE'. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 112
miss0nNull 0n valoi booleano que ueteimina si se uebe omitii la conuicion caso ue que el valoi iecibiuo sea nulo o el valoi estableciuo paia nulo meuiante 'nullvalue'. Poi uefecto su valoi es true. nullvalue El valoi que uebe entenueise como valoi nulo paia sabei si se uebe omitii al geneiai la conuicion. fieluName El nombie uel atiibuto en la entiuau. Si no se inuica se usa el nombie ue la llave en el uesciiptoi.
Si se envia el valoi coue=1u se piouuce la conuicion:
id = 10
Si se envian los valoies coue=1u y nombie="cheese cake" se piouuce la conuicion:
id = 10 OR name LIKE %cheese%cake%
Si se envian los valoies piouuct_categoiies_iu = 2 y type='A' (type es el nombie uel campo) se piouuce la conuicion:
product_categories_id = 2 OR type = A
Poi uefecto el opeiauoi paia unii las conuiciones es 0R, con lo que si cualquieia ue las opciones se cumple entonces se obtiene el iesultauo. Si se uesea lo contiaiio entonces se pueue enviai el opeiauoi como paimetio ue qetConJitions asi.
$this->Products->find($criteria->getConditions(AND)); bPOcOb I8(%#8(.7 -# <,$).7 Con IormCriterio tambin es posible cieai ciiteiios ue iangos cuyos valoies sean obteniuos ue un foimulaiio ue entiaua ue usuaiio.
Si lo que se iequieie es que apaitii ue campos obteniuos uel foimulaiio se ciee la conuicion entonces uebe uefinii ue la siguiente foima:
Si se envian los valoies fechaInicial="2uu8-1u-2u" y fechaFinal="2uu8-11-22" se piouuciiia la siguiente conuicion: fecha >= 2008-10-20 AND fecha <= 2008-11-22
Y si lo que se iequieie es que el valoi ue la entiaua ue usuaiio se encuentie entie 2 campos ue la tabla entonces se uefine asi:
//La tabla es de registro de vuelos $criteria = new FormCriteria($_POST, array( fecha' => array( 'type' => 'date', 'fieldName' => 'fechaLlegada:fechaSalida' ) ));
Si se envian el valoi fecha="2uu8-1u-2u" se piouuciiia la siguiente conuicion:
fechaLlegada >= 2008-10-20 AND fechaSalida <= 2008-10-20
bPOcOP ;$(8 M,8(,7 +.$-(+(.$#7 vaiias ciiteiios pueuen sei uniuos utilizanuo opeiauoies uifeientes paia ue esta foima constiuii conuiciones ms complejas:
El mtouo esttico IormCriterio::join pueue unii 2 o ms objetos IormCriterio con un opeiauoi uifeiente. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 114
12.4 Informacin del Navegador con Browser Este ActionEelper peimite obtenei infoimacion uel exploiauoi uel cliente uesue el cul se est acceuienuo a la aplicacion. bPOdOb BKZ -# k8.R7#8 El API es la siguiente:
public stotic booleon isIirefox{) Bevuelve tiue si el exploiauoi utilizauo es Nozilla Fiiefox.
public stotic booleon isSofori{) Bevuelve tiue si el exploiauoi utilizauo es Apple Safaii.
public stotic booleon isComino{) Bevuelve tiue si el exploiauoi utilizauo es Camino.
public stotic booleon islnternetFxplorer{) Bevuelve tiue si el exploiauoi utilizauo es Hicrosoft lnternet Fxplorer.
public stotic booleon isHobileSofori{) Bevuelve tiue si el exploiauoi utilizauo es Apple Hobile Sofori, el que usa el S0 uel iPbone y iPoJ Toucb.
public stotic booleon islFHobile{) Bevuelve tiue si el exploiauoi utilizauo es Hicrosoft lnternet Fxplorer Hobile usauo en el sistema opeiativo WinJows Hobile.
public stotic booleon is0peroHobile{) Bevuelve tiue si el exploiauoi utilizauo es 0pero Hobile si el exploiauoi utilizauo es 0peia paia WinJows Hobile.
public stotic strinq qetversion{) Bevuelve la veision uel exploiauoi utilizauo.
public stotic strinq qet0serAqent{) Bevuelve el 0sei Agent uel exploiauoi cliente.
public static boolean isuecko() Bevuelve tiue si el motoi ue ienueiizauo uel exploiauoi es uecko.
public static boolean isWebKit() Bevuelve tiue si el motoi ue ienueiizauo uel exploiauoi es WebKit.
public stotic strinq qetAcceptFncoJinq{) Inuica los tipo ue couificacion sopoitauoi poi el exploiauoi.
public static stiing getAcceptLanguage() 0btiene el iuioma utilizauo poi el exploiauoi usanuo el estnuai RFC.
public stotic booleon occeptCompresseJ0utput{) Inuica si el exploiauoi acepta saliua compiimiua ya sea usanuo gzip o ueflate.
public stotic strinq qetBrowserAbrev{) Bevuelve una abieviatuia uel 0sei Agent uel exploiauoi.
public stotic booleon isHobile{) Inuica si el exploiauoi usauo se encuentia en una platafoima movil.
public stotic booleon isHoc0SX{) Bevuelve true si el sistema opeiativo uel cliente es Apple Nac 0S X.
public stotic booleon isWinJows{) Bevuelve true si el sistema opeiativo uel cliente es Niciosoft Winuows
public stotic booleon islinux{) Bevuelve true si el sistema opeiativo uel cliente es Linux. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 116
12.5 Autocompletar con Scriptaculous El helpei Scriptoculous peimite conveitii un conjunto ue uatos en el foimato compatible al componente visual ue autocompletai que piopoiciona el fiamewoik sciipt.aculo.us. En el siguiente ejemplo se muestia el uso ue este:
En la vista se usa el helpei ue la vista Toq::textWitbAutocomplete paia cieai un campo con autocompletai:
13 Componente Validator 13.1 Introduccin Este componente est integiauo a las implementaciones ue contiolauoies y peimite iealizai valiuaciones sobie la entiaua ue usuaiio. Al sei inuepenuiente ue la capa ue logica ue uominio y piesentacion pueue sei usauo en los puntos ue la aplicacion que se iequieia sin afectai la aiquitectuia ue la misma.
14 Seguridad con Kumbia Enterprise 14.1 Introduccin Las aplicaciones Web y Seivicios Web cieauas usanuo Kumbia Enteipiise Fiamewoik pueuen sei uistiibuiuas e implementauas usanuo uifeientes entoinos uentio ue una misma instancia. Caua aplicacion pueue constituii una aiquitectuia multicapa inuepenuiente con iequeiimientos ue seguiiuau uifeientes.
La seguiiuau ue una aplicacion pueue sei implementaua ue 2 foimas:
6#+3,8,%(M, /H%#8$,5 Se uefinen los iequeiimientos ue seguiiuau ue una aplicacion utilizanuo iecuisos exteinos a la misma sin inteivenii ue maneia intiusiva en la logica ue la aplicacion. La uesciipcion ue esta incluye uetalles sobie como los ioles acceuen a los iecuisos ue la aplicacion y sus politicas. K8.)8,1,+(.$,3 Z$%#8$,5 Esta embebiua en la aplicacion y esta implementaua en foima ue uecisiones ue seguiiuau, es suficiente cuanuo los iequeiimientos ue seguiiuau son simples y no cambian con fiecuencia. 14.2 Caractersticas de Seguridad Necanismos auecuauos ue seguiiuau ofiecen la siguiente funcionaliuau:
Pievienen acceso inautoiizauo a infoimacion y piocesos ue negocio Contiolan que las activiuaues iealizauas poi un usuaiio no inteifieian con las iealizauas poi otios impactanuo la integiiuau uel sistema. Piotegen el los seivicios uel sistema ue iiesgos que pueuan uecaei la caliuau uel seivicio piopoicionaua
La seguiiuau ue aplicaciones basauas en Kumbio Fnterprise Iromework consiste en la implementacion ue componentes que ayuuen a piotegei los iecuisos ue la misma. Los piocesos ue seguiiuau iequieien ue la implementacion auecuaua ue autenticacion, iuentificacion, contiol ue acceso, integiiuau ue uatos y caliuau uel seivicio:
! B"%#$%(+,+(:$5 La aplicacion ejecuta piocesos que peimiten confiai que quien hace uso ue la misma es quien iealmente se espeia. ! B"%.8(>,+(:$5 Es el pioceso ue iuentificai a que conjunto ue iecuisos pueue utilizaiacceuei con el pioposito ue establecei contioles auecuauos ue integiiuau ue uatos y limitaciones. ! Z$%#)8(-,- -# 6,%.75 Peimiten que solo usuaiios o ioles autoiizauos alteien la infoimacion a la que se les ha peimitiuo el acceso y que no inteivengan con otios piocesos ue otios usuaiios autenticauos. ! I.$*(-#$+(,3(-,- : K8(M,+(-,-5 Peimite que la infoimacion solo est uisponible paia el usuaiio auecuauo y ue la foima auecuaua. ! I,3(-,- -#3 '#8M(+(. Vf.'W5 Peimite que se ofiezca una mejoi expeiiencia ue usuaiio apiovechanuo uifeientes tecnologias. ! B"-(%.8(,5 Peimite almacenai un iegistio consistente que peimita sabei las activiuaues que un usuaiio iealizo y bajo que conuiciones se iealizaion. 14.3 Mecanismos de Seguridad Kumbia Enteipiise Fiamewoik ofiece uifeientes componentes paia una auecuaua implementacion ue seguiiuau tanto ue aplicaciones Web como ue Seivicios Web empiesaiiales:
! B++#77 I.$%8.3 E(7% VBIEW5 Este componente peimite cieai listas en uonue se establece a que iecuisos pueue acceuei ueteiminauos ioles. ! B"%C5 Peimite iealizai el pioceso ue autenticacion utilizanuo uifeientes auaptauoies como Bigest, LBAP, Bases ue Batos, KeibeiosS y Rauius. ! B"-(%E.))#85 Peimite cieai iegistios ue auuitoiia ue las activiuaues iealizauas en las aplicaciones. ! '#77(.$5 Nantiene la peisistencia ue sesion inuepenuiente entie aplicaciones y usuaiios autenticauos. ! '#+"8(%\5 Peimite uetectai ataques ue negacion ue seivicio o bloqueai el acceso a un cliente atiavs ue su uiieccion IP. 14.4 Seguridad a nivel de Capa de Aplicacin Los contiolauoies en las aplicaciones son apiopiauos paia establecei contioles ue seguiiuau en las aplicaciones, sin embaigo, touos los iequeiimientos ue seguiiuau no pueuen sei LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 121
contiolauos en piofunuiuau uesue este punto y geneialmente es necesaiio apoyaise poi fiiewalls u otias tcnicas paia aumentai la confiabiliuau ue un sistema.
Como caua aplicacion maneja sus piopios entoinos ue ejecucion y ue memoiia la infoimacion ue seguiiuau iesiue en foima inuepenuiente facilitanuo la auministiacion ue caua entoino. Cuanuo se utilizan seivicios Web con mltiples inteimeuiaiios es posible que haya la necesiuau ue implementai mecanismos ue seguiiuau compaitiuos y tiansfeiencia ue iuentiuau entie aplicaciones.
Las ventajas ue la seguiiuau a nivel ue aplicacion incluyen:
! La seguiiuau ue caua aplicacion se pueue auaptaigeneiai ue acueiuo a las necesiuaues ue caua una. ! La seguiiuau es optimizaua con opciones especificas ue caua una.
Las uesventajas ue este tipo ue implementacion son:
! La aplicacion es uepenuiente ue atiibutos ue seguiiuau que no pueuen sei estableciuos o tiansfeiiuos uesue otia. ! Se ciea un nico punto ue vulneiabiliuau que ue sei violauo exponuiia muchos aspectos ue las aplicaciones. 14.5 Seguridad a nivel de Capa de Transporte El uso ue piotocolos como BTTPSSSL pueue mejoiai la seguiiuau uesue otio punto ue vista sin que pueua ieemplazai la seguiiuau a nivel ue aplicacion. La seguiiuau a nivel ue capa ue tianspoite tiata ue mecanismos uno a uno en uonue poi meuio ue llaves ciiptogificas es posible implementai autenticacion, integiiuau ue mensajes y confiuencialiuau.
Ceitificauos uigitales son iequeiiuos paia implementai este tipo ue seguiiuau. Estos estn uiiectamente asociauos al seiviuoi Web utilizauo y suponen una capa ue la cual el fiamewoik no pueue tenei contiol.
Las ventajas ue la seguiiuau en la capa ue tianspoite son:
! Fcil ue implementai. ! Esta basauo en estnuaies 14.6 Implementar Seguridad Declarativa El componente ue listas ue contiol ue Acceso ue Kumbio Fnterprise (ACL) esta integiauo con el Coie uel fiamewoik inteiceptanuo caua peticion y valiuanuo que su ejecucion este peimitiua en el contexto actual. La seguiiuau ueclaiativa est implementaua usanuo listas ue contiol ue acceso uefiniuas en la configuiacion ue la aplicacion meuiante uesciiptoies.
Los uesciiptoies peimiten uefinii la estiuctuia ue autoiizacion ue seguiiuau que incluye: ioles, contiol ue acceso y iequeiimientos ue autenticacion en foima exteina a la aplicacion.
La opcion securityAccesslist en la seccion application uel aichivo confiq.ini peimite establecei el tipo ue lista ue acceso que contiolai la seguiiuau ue la aplicacion:
/0#123.5 Z123#1#$%,8 7#)"8(-,- -#+3,8,%(M, -#7-# +.$*()O($( [application] mode = production name = "Project Name" dbdate = Y-m-d debug = Off securityAccessList = xml:filePath=%app-base%/security/security.xml
Los uesciiptoies ACL tienen el foimato ue un Boto Source Nome inuicanuo piimeio el nombie uel auaptauoi a utilizai y luego las opciones uel mismo usanuo punto y comas paia sepaiai las mismas. Los uesciiptoies ueben ii entie comillas uobles con el fin ue que cieitos caiacteies no causen conflictos al leei el aichivo .ini.
En el siguiente ejemplo ue un uesciiptoi ue una lista ue acceso basaua en XNL se muestia como uefinii los aspectos bsicos ue una lista. En el capitulo uel componente Acl se uetalla la implementacion ue caua paite uel aichivo XNL.
<!-- ROLES DE LA APLICACION --> <roles-collection> <role> <name>Public</name> <description>Rol para usuarios no autenticados</description> LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 12S
</role> <role> <name>EconomyCustomers</name> <description>Usuarios con plan economico</description> </role> </roles-collection>
<!-- RECURSOS DE LA APLICACION --> <resources-collection> <resource> <name>banking</name> <description>Controlador para operaciones del cajero</description> </resource> <resource> <name>login</name> <description>Controlador para operaciones de inicio de sesin</description> </resource> </resources-collection>
Los iecuisos ue una aplicacion paia la seguiiuau ueclaiativa son los contiolauoies ue la misma y sus nombies coinciuen con estos en las opciones resource-nome en el ejemplo. La asociacion iecuiso-contiolauoi ofiece un potente sistema ue contiol paia caua peticion a la aplicacion ue foima tianspaiente paia el uesaiiollauoi.
El iol con el cual se iealizan las valiuaciones ue seguiiuau es el uefiniuo meuiante el mtouo uel componente Security llamauo setActiveRole{strinq $roleNome), cuanuo el iol no se ha uefiniuo an se usa la convencion paia el iol Public ue tal foima que se asuma que la aplicacion es pblica o no se ha uefiniuo iuentificacion ue quien usa la aplicacion.
Los iecuisos que no se han mencionauo en las listas ue acceso tienen poi uefecto la politica LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 124
'Allow' con lo que se hacen pblicos con solo acceuei a ellos.
Poi caua peticion a la aplicacion el mtouo Security::cbeckResourceAccess valiua si el iol activo tiene acceso al iecuiso solicitauo. Cuanuo se tiene acceso al iecuiso el pioceso ue negocio en la accion uel contiolauoi se ejecuta noimalmente, cuanuo la valiuacion falla, la aplicacion tiata ue eniutai a la accion uel contiolauoi llamaua unoutborizeJAccessAction. 14.7 Implementar Seguridad Programacional La seguiiuau piogiamacional esta embebiua en la aplicacion y esta implementaua en foima ue uecisiones ue seguiiuau. Es ms til cuanuo la seguiiuau ueclaiativa iesulta muy bsica y no se auapta a las necesiuaues ue negocio.
En este punto los filtios ue contiolauoies y el punto ue entiaua a la aplicacion ControllerBose iesultan apiopiauos paia uefinii las ieglas ue seguiiuau y aplicai el API ue los componentes Acl y Autb paia contiolai los piocesos iequeiiuos. 14.8 Definir Realms, Usuarios y Grupos para Autenticacin Los Reolms son colecciones ue usuaiios los cuales pueuen o no peitenecei a un ueteiminauo giupo y son contiolauos meuiante una misma politica ue autenticacion. Noimalmente una aplicacion establece contioles como un usuaiio y contiasea antes ue piopoicionai acceso a un iecuiso piotegiuo, los uatos piopoicionauos poi un usuaiio se valiuan en foima ue cieuenciales piouucienuo un iesultauo ue xito uel pioceso ue autenticacion. Kumbio Fnterprise Iromework ofiece uifeientes auaptauoies ue autenticacion usanuo el componente Autb.
En algunos casos los usuaiios ue las aplicaciones tienen asignauos ioles, esto inuica que hacen paite ue giupos con caiacteiisticas se seguiiuau uefiniuas en un uominio ue aplicacion. bdO`Ob <#,317 Los iealms son bases ue uatos ue usuaiios y giupos que contienen las cieuenciales necesaiias paia contiolai una politica ue autenticacion. Bebiuo a la flexibiliuau uel componente ue autenticacion Auth es posible cieai bases ue uatos ue autenticacion en vaiios foimatos caua uno con caiacteiisticas uistintas. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 12S
bdO`OP ;7",8(.7 Los usuaiios son iuentiuaues inuiviuuales que son ieconociuos poi la aplicacion. 0n usuaiio pueue tenei ioles asociauos que peimiten conocei que iecuisos pueuen acceuei ue acueiuo a una politica ue seguiiuau. bdO`Oc j8"2.7 Los giupos iepiesentan una seiie ue caiacteiisticas compaitiuas poi uno o vaiios usuaiios. 0n giupo es un conjunto ue usuaiios que compaiten los mismos accesos y contioles ue seguiiuau en la aplicacion.
15 Componente ACL (Lista de Control de Acceso) 15.1 Introduccin La Lista ue Contiol ue Acceso o en ingls (Access Contiol List) es un componente ue Kumbio Fnterprise Iromework es un concepto ue seguiiuau infoimtica usauo paia fomentai la sepaiacion ue piivilegios. Es una foima ue ueteiminai los peimisos ue acceso apiopiauos a un ueteiminauo objeto, uepenuienuo ue cieitos aspectos uel pioceso que hace el peuiuo. Al igual que otios componentes uel fiamewoik que estn basauos en componentes se implementa el pation virtuol Proxy, una instancia ue Acl solo acta como un Proxy al objeto ieal instanciauo que coiiesponue al tipo ue auaptauoi utilizauo poi el mismo. 15.2 Estructura del Componente Kumbio Fnterprise Iromework ha integiauo la siguiente estiuctuia jeiiquica ue clases que peimiten la implementacion ue este componente: T,93,5 ]#8,8^"(, -# +3,7#7 -#3 +.12.$#$%# B+3
I3,7# 6#7+8(2+(:$ Acl.php Es la clase constiuctoia ue las listas Acl. Es un Pioxy a la funcionaliuau implementaua en caua auaptauoi. Inteiface.php Es la inteifase que ueben utilizai touos los auaptauoies Acl . AuapteisNemoiy.php Es el auaptauoi que peimite auministiai las listas ue acceso en memoiia. AuapteisXml.php El Auaptauoi peimite uefinii listas ue acceso en aichivos ue uesciipcion en XNL. AuapteisNouel.php Es el auaptauoi peimite la auministiacion ue la lista ue acceso a una base ue uatos como backenu. ResouiceResouice.php Es la clase que peimite auministiai caua iecuiso como una entiuau inuepenuiente ue su backenu. RoleRole.php Es la clase que peimite auministiai los ioles que tenuin acceso a la lista ACL inuepenuientemente ue su backenu. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 127
15.3 Que es un Recurso? 0n iecuiso es cualquiei elemento ue una aplicacion uel cual se pueua contiolai su acceso. Poi conveniencia los contiolauoies ue la aplicacion son vistos como iecuisos con el objetivo ue geneiai un mouelo ue seguiiuau consistente. 15.4 Que es un Rol? 0n iol es un nombie abstiacto paia el peimiso ue usuaiios a un conjunto paiticulai ue iecuisos en una aplicacion. 0n iol pueue sei compaiauo a la llave que abie un canuauo, este abie sin impoitai quien tiene la clave. Los ioles estn geneialmente asociauos a los mismos usuaiios, a los giupos ue estos o a sus peifiles. 15.5 Que es un Acceso? Los accesos son las opeiaciones o acciones que se pueuen iealizai en los iecuisos. Niveles ms piofunuos ue seguiiuau contiolan hasta este nivel lo que se pueua hacei poi paite ue los usuaiios. 15.6 Tipos de Reglas El acceso a un ueteiminauo iecuiso tiene una iegla ue 'peimitii' (ollow) o 'uenegai' (Jeny), no estn sopoitauas otios tipos ue ieglas ue acceso. 15.7 ACL en Accin En el siguiente ejemplo se ilustia como al uefinii un filtio beforeIilter en la clase ControllerBose en opps,Jefoult,controllers,opplicotion.pbp con el que se pueue implementai el contiol ue acceso a los iecuisos ue la aplicacion en foima piogiamacional:
} else { throw new ApplicationControllerException("No tiene permiso para usar esta aplicacin"); } $authLog = new Log(File, "auth_failed.txt"); $authLog->log("Autenticacin fallo para el rol '$role' en el recurso '". $this->getControllerName()."/".$this->getActionName()."'"); return false; } }
}
uiacias a que el mtouo beforeIilter se encuentia en la jeiaiquia ue touos los contiolauoies este se ejecuta pieviamente a cualquiei accion solicitaua. Se obtiene ue los uatos ue sesion, la vaiiable role inuica el nombie uel iol actualmente logueauo, si aun no hay un iol activo es asignauo poi uefecto Public.
Ahoia es posible instanciai la clase Acl, y uefinii como auaptauoi un Nouelo en uonue se ha iefeiencia a la clase Accesslist quien mapea a la tabla llamaua access_list, la cual auministia los accesos a los iecuisos ue la aplicacion. La tabla contiene un Security Policy Bomoin ue un P0S (Point 0f Sale):
/0#123.5 6,%.7 -# 3(7%, BIE 9,7,-, #$ @.-#3.7
SQL > select * from access_list order by role; +----+-----------------+-----------------------+--------+-------+ | id | role | resource | action | allow | +----+-----------------+-----------------------+--------+-------+ | 6 | Public | * | * | Y | | 7 | Public | dinein | * | N | | 15 | Public | users | * | N | | 27 | Public | appmenu | * | Y | | 29 | Public | admin | * | Y | | 30 | Public | menus | * | N | | 9 | Administradores | * | * | Y | | 10 | Cajeros | * | * | Y | | 11 | Cajeros | ambient_items | * | N | | 12 | Cajeros | drop_invoice | * | N | | 13 | Cajeros | menus | * | N | | 14 | Cajeros | menus_items | * | N | | 16 | Cajeros | users | * | N | | 17 | Cajeros | modifiers | * | N | | 18 | Cajeros | ambient_menus_items | * | N | | 19 | Cajeros | discount | * | N | | 26 | Cajeros | data | query | N | +----+-----------------+-----------------------+--------+-------+
El paimetio clossNome peimite establecei un mouelo que contiene la estiuctuia uesciita en la tabla anteiioi. El campo resource y oction pueuen contenei asteiiscos () que son usauos como comouines paia cualquiei ciiteiio que coinciua. El campo ollow pueue tenei los valoies Y(es) o N(o) paia inuicai si le conceue el acceso al iecuiso.
La piincipal ventaja ue la listas ACL es que valiuan los accesos en foima jeiiquica ya sea a LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 129
nivel ue iecuisos o meuiante heiencia ue ioles. En el ejemplo el acceso ue jeiaiquia ms alto es en el que hay comouines tanto paia el iecuiso como paia la accion, el mtouo Acl::isAlloweJ busca jeiiquicamente si existe un acceso o no en la lista ue acceso.
Segn el ejemplo las siguientes consultas a la lista ue acceso uaiian como iesultauo:
//Esta permitido el rol Public a acceder al recurso menus en la operacin index? //No Permitido $acl->isAllowed("Public", "menus", "index")
//Esta permitido el rol Cajeros a acceder al recurso dinein en cualquier operacin? //Permitido $acl->isAllowed("Cajeros", "dinein", "*")
//Esta permitido el rol Cajeros a acceder al recurso data en la operacin query? //No Permitido $acl->isAllowed("Cajeros", "data", "query")
El piimei paimetio ue Acl::isAlloweJ es el nombie uel iol, el segunuo el nombie uel iecuiso y el teiceio el nombie ue la accion. Cuanuo no se encuentia una iegla especifica paia iol- iecuiso-opeiacion, se busca iol-iecuiso-cualquieia y poi ultimo iol-cualquieia-cualquieia. 15.8 Herencia de Roles 0na ue las gianues ventajas uel uso ue listas ue contiol ue acceso es la constiuccion ue aiboles ue jeiaiquia ue ioles. Be esta foima los peimisos ue acceso pueuen sei heieuauos o compaitiuos entie vaiios ioles sin que haya ieuunuancia ue infoimacion piopoicionanuo a la aplicacion capaciuaues ue contiol ue acceso potentes y flexibles. 15.9 Adaptadores de ACL Kumbio Fnterprise Iromework peimite utilizai vaiios backenus paia almacenai listas Acl. Caua auaptauoi implementa la inteiface Acllnterfoce:
<?php
interface AclAdapter {
public function addRole(AclRole $roleObject, $accessInherits=''); public function addInherit($role, $roleToInherit); public function isRole($role_name); public function isResource($resource_name); LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1Su
public function addResource(AclResource $resource); public function addResourceAccess($resource, $accessList); public function dropResourceAccess($resource, $accessList); public function allow($role, $resource, $access); public function deny($role, $resource, $access); public function isAllowed($role, $resource, $accessList);
}
A continuacion se explican las consiueiaciones ue uso ue caua auaptauoi: bNOiOb B+3@.-#3 La lista ue accesos tambin pueue sei auministiaua usanuo mouelos uisponibles en la aplicacion. Paia esto es necesaiio cieai una entiuau con la siguiente estiuctuia:
CREATE TABLE `access_list` ( `id` int(11) NOT NULL, `role` varchar(24) NOT NULL, `resource` varchar(32) NOT NULL, `action` varchar(32) NOT NULL, `allow` char(1) default NULL, PRIMARY KEY (`id`), )
Al instanciai el objeto Acl se uebe inuicai el mouelo a utilizai meuiante el paimetio className, luego el compoitamiento y utilizacion es el noimal:
bNOiOP B+3@#1.8\ El auaptauoi AclHemory almacena los peimisos en memoiia. La lista ue contiol ue acceso pueue constiuiise en un pioceso inicializauoi y almacenaise en un backenu ue cache paia usaise en otias peticiones. Paia aplicaciones con iequeiimientos ue valiuacion ue contiol ue acceso ieuuciuos este auaptauoi pueue sei una opcion a tenei en cuenta. bNOiOc B+3l@E Este auaptauoi peimite cieai listas ue contiol ue acceso en aichivos XNL. Estos aichivos mantienen los contioles ue foima estiuctuiaua hacienuo sencilla su manipulacion uesue otios lenguajes y aplicaciones.
! 0n nouo iaiz 'secuiity' que contenui la lista en si ! 0n solo nouo 'ioles-collection' que contiene nouos 'iole' con infoimacion ue ioles ! Los nouos 'iole' ueben tenei los sub-nouos 'name' y 'uesciiption' con el nombie y uesciipcion uel iol iespectivamente. ! 0n solo nouo 'iesouices-collection' que contiene nouos 'iesouice' con infoimacion ue los iecuisos en la lista. ! Los nouos 'iesouice' ueben tenei los sub-nouos 'name' y 'uesciiption' con el nombie y uesciipcion uel iecuiso iespectivamente. ! Nltiples nouos 'access-constiaint' con las ieglas ue acceso. El oiuen ue estas inuica la piioiiuau ue caua una. ! Caua nouo 'access-constiaint' contiene los nouos 'iole-name' que es nombie uel iol, 'iesouice-name' que es el nombie uel iecuiso, 'action-name' que es nombie uel acceso y 'iule-type' que contiene 'allow' si tiene acceso al iecuiso y 'ueny' ue lo contiaiio.
El siguiente es el ejemplo ue una lista ACL en XNL:
<!-- ROLES DE LA APLICACION --> <roles-collection> <role> <name>Public</name> <description>Rol para usuarios no autenticados</description> </role> <role> <name>Customers</name> <description>Usuarios clientes de la empresa</description> </role> <role> <name>QueryOnly</name> <description>Usuarios con permisos de solo lectura</description> </role>
</roles-collection>
<!-- RECURSOS DE LA APLICACION --> <resources-collection> <resource> <name>banking</name> <description>Controlador para operaciones del cajero</description> </resource> <resource> <name>login</name> <description>Controlador para operaciones de inicio de sesin</description> </resource> </resources-collection>
<action-name>*</action-name> <rule-type>deny</rule-type> </access-constraint> <access-constraint> <role-name>Public</role-name> <resource-name>login</resource-name> <action-name>validateCredentials</action-name> <rule-type>allow</rule-type> </access-constraint> <access-constraint> </security> 15.10 API de un Adaptador public booleon oJJRole{AclRole $role0bject, mixeJ $occesslnberits) Agiega un iol a la lista ue ioles ue la lista ue Acceso. En este tipo ue Auaptauoi el iol se ciea en la entiuau uefiniua en el constiuctoi ue la lista en el paimetio: iolesClassName.
public voiJ oJJlnberit{$role, $roleTolnberit) Agiega una heiencia a la lista en la que el iol $iole heieua touos los constiaints ue acceso que tiene el iol $roleTolnberit.
public booleon isRole{strinq $roleNome) Peimite sabei si $roleNome esta piesente en la lista ACL
public booleon isResource{strinq $resourceNome) Peimite sabei si un iecuiso existe o no en la lista ue acceso actual.
public booleon oJJResource{AclResource $resource) Agiega un iecuiso paia sei auministiauoi poi la lista ue contiol ue acceso.
public voiJ oJJResourceAccess{strinq $resource, mixeJ $occesslist) Agiega una opeiacionaccion a un iecuiso ue la lista ACL. El paimetio $accessList pueue sei un stiing o un vectoi.
public voiJ JropResourceAccess{$resource, $occesslist) Elimina una opeiacionaccion ue un iecuiso ue la lista ACL. El paimetio $accessList pueue sei un stiing o un vectoi.
public voiJ ollow{strinq $role, strinq $resource, mixeJ $occess) Agiega una iegla que ua acceso a un ueteiminauo iol a un iecuiso. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1SS
public voiJ Jeny{strinq $role, strinq $resource, mixeJ $occess) Agiega una iegla ueneganuo el acceso ue un ueteiminauo iol a un iecuiso.
public booleon isAlloweJ{strinq $role, strinq $resource, orroy $occesslist) Realiza una consulta en la lista ACL 15.11 API de AclResource public voiJ qetNome{) 0btenei el nombie uel iecuiso
public voiJ qetBescription{) 0btenei la uesciipcion uel iecuiso 15.12 API de AclRole public voiJ qetNome{) 0btenei el nombie uel Role
public voiJ qetBescription{) 0btenei la uesciipcion uel Role, usualmente el nombie extenuiuo uel iol.
16 Componente Auth 16.1 Introduccin El componente Auth esta uiseauo paia peimitii la autenticacion y auministiacion ue la entiuau ue los usuaiios en una aplicacion ya sea ue foima inuepenuiente o ue maneia compaitiua.
Este componente acceue a sus auaptauoies usanuo el pation virtuol Proxy, es uecii, una instancia ue Autb solo acta como un Proxy al objeto ieal instanciauo que coiiesponue al tipo ue auaptauoi utilizauo poi el mismo. Esta implementacion peimite cieai un punto ue entiaua nico pai la utilizacion ue auaptauoies uel fiamewoik o ue usuaiio.
La instancia inteina uel auaptauoi se pueue obtenei usanuo el mtouo Autb::qetAJopterlnstonce{). 16.2 Adaptadores de Auth El componente implementa una aiquitectuia ue auaptauoies ue autenticacion, estos establecen inteifaces consistentes a uifeientes pioveeuoies ue iuentificacion bajo una misma inteifaz ue aplicacion. Caua auaptauoi iequieie ue uifeientes paimetios solicitauos poi el seivicio ue autenticacion utilizauo.
Los auaptauoies uisponibles son:
T,93,5 B-,2%,-.8#7 -# B"%C -(72.$(93#7 B-,2%,-.8 6#7+8(2+(:$ Bigest Peimite la autenticacion usanuo un iealm basauo en un aichivo plano ue texto. Rauius Implementa autenticacion usanuo piotocolo Rauius Autentication RFC- 286S. Keibeios v Autentica usanuo seiviuoies Keibeios S y auems peimite obtenei las politicas asociauas al usuaiio iuentiuau. Nouel 0sa un mouelo ue la aplicacion en uonue los atiibutos ue esta actuan como cieuenciales en la autenticacion. LBAP Peimite utilizai seiviuoies LBAP como ActiveBiiectoiy paia LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1SS
autenticaise en una aplicacion.
Touos los auaptauoies ue Autb implementan la inteiface Autblnterfoce:
interface AuthInterface {
public function __construct($auth, $extraArgs); public function getIdentity(); public function authenticate();
} 16.3 Administracin de Identidad La auministiacion ue iuentiuau es uno ue los piocesos ms usuales en cualquiei aplicacion Web, una vez se piouuce la autenticacion e iuentificacion uel usuaiio es necesaiio conocei la iuentiuau uuiante toua la sesion uel mismo en la aplicacion.
Al iealizai una autenticacion satisfactoiia con el componente Autb automticamente se ciea un iegistio ue la iuentiuau ue quien inicio sesion y pouei cumplii con objetivos ue la aplicacion como peisonalizacion o confiuencialiuau.
El mtouo esttico ue Autb llamauo qetActivelJentity{) uevuelve la iuentiuau cieaua en la autenticacion en cualquiei paite ue la aplicacion. Paia uestiuii la iuentiuau activa se usa el tambin mtouo esttico JestroylJentity{).
Paia conocei si existe una iuentiuau valiua en la aplicacion se usa el mtouo Autb::isvoliJ{) que uevuelve un valoi boleano coiiesponuiente a esa infoimacion. 16.4 Expiracin de Sesin El componente Autb sopoita expiiacion ue la sesion con lo que es posible contiolai que un usuaiio autenticauo solamente pueua utilizai la aplicacion uuiante un ueteiminauo iango ue tiempo.
En estos casos se uebe establecei el tiempo en segunuos que uebe uuiai la sesion meuiante el mtouo uel objeto Autb llamauo setFxpireTime uespus ue la autenticacion uel usuaiio. 16.5 Control de Autenticacin concurrente Las ieglas uel negocio en una aplicacion pouiian contemplai que un usuaiio este autenticauo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S6
en una aplicacion solamente uesue una teiminal ue tiabajo. En otios casos cuanuo se geneie una autenticacion uel usuaiio uesue otia maquina se iequieia que se cieiie o se invaliuen las sesiones abieitas en otias teiminales. 16.6 Autenticacin con Modelos El auaptauoi HoJel peimite iealizai la autenticacion meuiante un iealm en una entiuau uel gestoi ielacional poi uefecto en confiq,environment.ini. La piincipal ventaja ue este auaptauoi es que apiovecha las capaciuaues paia atenuei mltiples peticiones concuiientes ue autenticacionn que pueua tenei el gestoi ielacional.
El siguiente ejemplo ilustia como iealizai una autenticacion atiavs usanuo este auaptauoi:
/0#123.5 ;7. -#3 +.12.$#$%# B"%C +.$ 1.-#3.7
<?php
class LoginController extends ApplicationController {
T,93,5 K,8U1#%8.7 ^"# 8#^"(#8# #3 ,-,2%,-.8 B"%C +.$ 1.-#3.7 4.198# 6#7+8(2+(:$ class Nombie ue la clase uel mouelo que seiviia como iealm.
Los campos que confoiman la clave ue iuentiuau ueben sei pasauos como paimetios con su iespectivo valoi.
La iuentiuau se constiuye apaitii ue los atiibutos ue la entiuau exceptuanuo los campos ue passwoiu o contiasea. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S7
16.7 Autenticacin con KerberosV Este auaptauoi peimite autenticaise usanuo seiviuoies auministiativos Keibeios S asi como obtenei las politicas asociauas a los usuaiios autenticauos.
Pueue obtenei ms infoimacion sobie seiviuoies Keibeios en http:web.mit.euukeibeioswwwkibS-1.2kibS-1.2.8uocaumin_toc.html.
El siguiente ejemplo ilustia como iealizai una autenticacion atiavs usanuo este auaptauoi:
T,93,5 K,8U1#%8.7 ^"# 8#^"(#8# #3 ,-,2%,-.8 B"%C +.$ h#89#8.7Y 4.198# 6#7+8(2+(:$ seivei Es el nombie ue uominio o uiieccion IP uel seiviuoi Keibeios v. Este paimetio es obligatoiio. iealm El nombie ue la base ue uatos con la politica ue autenticacion en el seiviuoi KS. piincipal 0na combinacion usuaiiogiupo con el que se hai la autenticacion passwoiu Contiasea uel usuaiio usauo en piincipal.
La iuentiuau uevuelta est consta ue los campos iealm y useiname.
!"#$%&$'()*+ El uso ue este auaptauoi iequieie que este piesente la extension ue PBP llamaua php_kaumS. 16.8 Autenticacin con Radius Este auaptauoi peimite la autenticacion meuiante piotocolo Rauius (RFC286S - http://www.faqs.org/rfcs/rfc2865). Este auaptauoi iequieie ue la extension php_iauius que se encuentia uisponible en platafoimas 0nix (FieeBSB, Linux) y Winuows.
El siguiente ejemplo ilustia como iealizai una autenticacion atiavs usanuo este auaptauoi:
T,93,5 K,8U1#%8.7 ^"# 8#^"(#8# #3 ,-,2%,-.8 B"%C +.$ <,-("7 4.198# 6#7+8(2+(:$ seivei Es el nombie ue uominio o uiieccion IP uel seiviuoi Rauius v. Este paimetio es obligatoiio. poit Pueito 0BP uonue escucha el seivicio Rauius. Si el pueito es u el auaptauoi localiza el seivicio meuiante el aichivo etcseivices y como ltima opcion el pueito estnuai 1812. seciet La clave compaitiua que se pasai al seiviuoi Rauius. timeout Nmeio ue segunuos que el auaptauoi espeia poi obtenei iespuesta uel seiviuoi. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S9
max_ietiies Nmeio ue intentos que iealiza paia tiatai ue autenticaise. useiname Nombie ue usuaiio a autenticai. passwoiu Passwoiu el usuaiio a autenticai.
La iuentiuau se constiuye con el campo useiname. 16.9 Autenticacin con Digest El auaptauoi ue autenticacion Biqest peimite utilizai aichivos planos ue texto como iealms paia la compiobacion ue iuentiuau ue los usuaiios ue una aplicacion. 0n aichivo Bigest tiene la siguiente estiuctuia:
Caua linea uel aichivo constituye una iuentiuau. Los campos ue la iuentiuau estn sepaiauos poi ":" (uos puntos). El piimei campo es el nombie uel usuaiio, este pueue tenei la foima john.smith. El segunuo campo es el iealm al que peitenece el usuaiio, un aichivo uigest pueue tenei vaiios iealms en l. Poi ltimo el teicei campo es un iesmen ciiptogifico coiiesponuiente al passwoiu uel usuaiio. El algoiitmo estnuai ue una sola via utilizauo es NBS peio es posible utilizai otio meuiante la opcion ue configuiacion olqoritbm. Paia un aichivo uigest como el siguiente:
T,93,5 K,8U1#%8.7 ^"# 8#^"(#8# #3 ,-,2%,-.8 B"%C +.$ 6()#7% 4.198# 6#7+8(2+(:$ filename Ruta al aichivo uigest. El aichivo uebe sei ue texto, si est uisponible la extension ue PBP Nultibyte Stiings su couificacion pueue sei cualquieia que sopoite sta. useiname Nombie uel usuaiio a autenticai passwoiu Passwoiu plano uel usuaiio iealm Realm al que peitenece el usuaiio a autenticai algoiithm Callback uel algoiitmo que se utilizai paia compaiai el passwoiu uel usuaiio con los uel aichivo uigest. Poi uefecto es NBS. chaiset Couificacion que tiene el aichivo ue iuentiuaues uigest. El valoi poi uefecto es 0TF-8.
La iuentiuau se constiuye a paitii ue los campos useiname y iealm uel usuaiio encontiauo. 16.10 Autenticacin con LDAP El piotocolo LBAP "liqbtweiqbt Birectory Access Protocol" es utilizauo paia acceuei a seiviuoies ue uiiectoiios. Estos son estiuctuias que almacenan uatos en una jeiaiquia ue aibol.
El auaptauoi ue autenticacion LBAP sopoita autenticacion con seiviuoies ue uiiectoiios como Niciosoft Active Biiectoiy, 0penLBAP, Sun 0penBS o Nac 0S X Seivei LBAP Seivice.
La notacion BN o "Bistinguisheu Name" iepiesentan iutas a objetos alojauos en un seiviuoi LBAP. Caua atiibuto esta inuicauo con su nombie estanuai, un igual y su valoi. Los atiibutos estn sepaiauos poi comas y el oiuen ue lectuia ue los atiibutos se iealiza ue ueiecha a izquieiua.
En el siguiente ejemplo se ilustia la autenticacion a un seiviuoi LBAP a paitii ue los paimetios ue un foimulaiio:
Los siguientes paimetios ueben sei inuicauos paia iealizai una autenticacion satisfactoiia en un seiviuoi LBAP:
T,93,5 K,8U1#%8.7 ^"# 8#+(9# #3 ,-,2%,-.8 B"%C +.$ E6BK 4.198# 6#7+8(2+(:$ seivei Es el nombie ue uominio o uiieccion IP uel seiviuoi LBAP. Este paimetio es obligatoiio. accountBomainName Nombie uel uominio al que peitenece la cuenta a autenticai. useiname BN uel usuaiio que se va a autenticai en el seiviuoi. Este paimetio LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 142
es obligatoiio. passwoiu Contiasea uel usuaiio que se va a autenticai. Si el paimetio no es inuicauo se piouuce un intento ue autenticacion anonimo. baseBN BN base uonue se hace la bsqueua ue la iuentiuau uel usuaiio. Es el BN uel seiviuoi uonue la cuenta se encuentia ubicaua. poit Pueito uel seiviuoi uonue escucha el LBAP Seivei. iuentityAttiibutes Atiibutos ue la entiaua uel seiviuoi LBAP que sein usauos paia constiuii la iuentiuau uel usuaiio autenticauo. accountCanonicalFoim Inuica la foima en la que el nombie ue usuaiio esta canonizauo, uepenuienuo uel tipo ue seiviuoi LBAP el auaptauoi tiauuce este nombie automticamente al auecuauo. 0n valoi ue 2 inuica la foima noimal, S usa la foima \\SERvIB0R\usuaiio y la 4 usuaiioseiviuoi.
La iuentiuau se constiuye apaitii ue los campos uel iegistio uel nombie canonico uel usuaiio en el seiviuoi LBAP.
!"#$%&$'()*+ El uso ue este auaptauoi iequieie que este piesente la extension ue PBP llamaua php_luap.
17 Componente AuditLogger 17.1 Introduccin El componente AuJitloqqer esta uiseauo paia asistii las taieas ue auuitoiia ue sistemas cieanuo logs que lleven el iegistio ue las activiuaues iealizauas en una aplicacion ue negocios poi paite ue caua uno ue los ioles que la utilizan. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 14S
17.2 Crear un componente de control <?php
class MyApplicationAudit extends AuditLogger {
public function __construct($note, $transaction=null){ parent::__construct("Audit"); $this->bindToField("USER_ID", "usuarios_id"); $this->bindToField("USERNAME", "nombre"); $this->bindToField("NOTE", "nota"); $this->bindToField("IP_ADDRESS", "ipaddress");
18 Componente Security 18.1 Introduccin El objetivo ue este componente es ofiecei funcionaliuaues vaiias ue seguiiuau a aplicaciones web empiesaiiales. 0na caiacteiistica impoitante ue este componente es un Fiiewall que peimite uefinii ieglas ue acceso estilo fiiewall a una aplicacion. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 144
18.2 Subcomponente SecurityFirewall b`OPOb Z$%8.-"++(:$ El objetivo uel subcomponente SecuiityFiiewall es el ue peimitii al uesaiiollauoi analizai el entoino uesue el cual se acceue a un ueteiminauo punto ue la aplicacion y valiuai si se peimite el acceso o no.
Las ieglas se uefinen en un aichivo XNL en el oiuen ue piioiiuau como ueben sei evaluauas. 0n ejemplo es el siguiente uocumento XNL:
El nouo iaiz firewollRules abie el uocumento. Los nouos bostTroslotion contienen tiauucciones pieuefiniuas paia nombies-ue-maquinauiiecciones-ip, asi es posible inuicaile al fiiewall que un mismo nombie ue maquina tiene vaiias uiiecciones IP asignauas. En el ejemplo la uiieccion ::1 uel loopback ue una maquina Nac 0S X es agiegaua como localhost.
Los nouos rule peimiten uefinii las ieglas uel fiiewall. Poi obligacion estos nouos ueben tenei un atiibuto taiget que inuica que el tipo ue accion a ejecutai cuanuo se cumple la iegla.
b`OPOP I.1. 7# #M,3",$ 3,7 8#)3,7 Las ieglas son evaluauas en el oiuen en el que se uefinieion en el aichivo XNL. Si una iegla cumple con las conuiciones uel entoino ue la peticion entonces las uems ieglas no son evaluauas. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 14S
Es necesaiio tenei en cuenta el oiuen en el que se uefinen paia evitai que una iegla sobieesciiba a otias y no se logie el objetivo espeiauo. b`OPOc T(2.7 -# B%8(9"%.7 -# "$, <#)3, 0na iegla uel SecuiityFiiewall pueue tenei los siguientes tipos ue atiibutos:
4.198# 6#7+8(2+(:$ souice El oiigen ue la peticion. Pueue sei un nombie ue maquina en la ieu, un nombie ue uominio o una uiieccion IP. Cuanuo se establece un nombie ue maquina se utilizan las capaciuaues ue iesolucion ue nombies que tenga la maquina actual paia obtenei las uiiecciones IP coiiesponuientes. La uiieccion IP uel cliente se obtiene incluso cuanuo el acceso se iealiza meuiante un pioxy tianspaiente. Las IPs no pueuen sei obteniuas cuanuo se usa un pioxy anonimo. mac La NIC ue la taijeta ue ieu pueue sei obteniua cuanuo la aplicacion es ejecutaua en sistemas Linux0nix y cuanuo los clientes se encuentian en la mismo iango ue ieu uel seiviuoi. contiollei El nombie uel contiolauoi ue aplicacion o seivicio web en la aplicacion activa que se est tiatanuo ue acceuei. Se pueue usai como comouin que coinciua con cualquiei contiolauoi. action El nombie ue la accion en el contiolauoi solicitauo que se est tiatanuo ue acceuei. Se pueue usai como comouin que coinciua con cualquiei nombie ue accion. isAjaxRequesteu Inuica si la peticion se est tiatanuo ue hacei usanuo A}AX. isSoapRequesteu Inuica si la peticion se est tiatanuo ue hacei uesue un cliente Soap. isSecuie Inuica si la conexion se iealiza usanuo una conexion seguia. isFlashRequesteu Inuica si la conexion se iealiza uesue un plug-in ue Auobe Flash. hasBeauei Si la peticion contiene un ueteiminauo encabezauo. Nltiples encabezauos pueuen uefiniise sepaianuolos poi pipes (|). methou Peimite inuicai el tipo ue mtouo BTTP utilizauo paia solicitai la peticion.
19 Persistencia, Transacciones y Concurrencia 19.1 Introduccin El papel ue la capa ue peisistencia en una aplicacion es tiaei y llevai los uatos iequeiiuos paia LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 147
que la logica ue uominio en los contiolauoies pueue iealizai su tiabajo coiiectamente. Cuanuo se habla ue peisistencia se piensa noimalmente en bases ue uatos ielacionales y el tiatamiento ue estas geneialmente conlleva a tiatai inconvenientes ue bajo nivel como conexiones o incompatibiliuau ue la sintaxis ue lenguaje SQL.
Kumbio Fnterprise Iromework ofiece una vaiieuau ue componentes paia acceuei a gestoies ielacionales a bajo o alto nivel.
20 Componente Db 20.1 Introduccin Kumbio Fnterprise Iromework implementa una uoble capa ue abstiaccion paia la manipulacion ue la peisistencia ue la aplicacion cuanuo se utilizan bases ue uatos. El componente Bb auministia touo lo ielacionauo con la inteiaccion a bajo nivel con los gestoies ielacionales ue base ue uatos, esto incluye abstiaei uetalles ue conexion, utilizacion ue lenguaje SQL, cuisoies, tiansacciones, etc.
Esta inuepenuencia se logia meuiante la implementacion ue auaptauoies que ciean puntos ue compatibiliuau a los motoies ue bases ue uatos ue tal foima que sin impoitai el gestoi utilizauo se gaiantice que las opeiaciones sobie ellos va a sei consistente logianuo el iesultauo espeiauo.
Nientias que el Kumbio PEP Iromework ofiece mltiples opciones paia conectaise a bases ue uatos, Kumbio Fnterprise Iromework iecomienua su uso en piouuccion a los auaptauoies ue NySQL y 0iacle, aunque algunos otios tienen una mauuiez aceptable. 20.2 Capas de acceso El componente Bb pueue utilizai multiples capas ue abstiaccion existentes paia el acceso a gestoies ielacionales, ue esta foima se aumentan las posibiliuaues y capaciuaues ue apiovechai la funcionaliuau uel motoi uesue una aplicacion.
Las capas ue acceso sopoitauas son las siguientes:
Native Sin capa inteimeuia. 0tiliza las extensiones PBP esciitas en lenguaje C que implementan acceso uiiecto a los motoies ue base ue uatos. PB0 0tiliza la capa PBP Bata 0bjects (PB0) esciita en lenguaje C que implementa acceso unifoime a los piincipales motoies ue base ue uatos ue couigo abieito y ceiiauo. }BBC 0tiliza la capa ue acceso a bases ue uatos }ava Batabase Connectivity (}BBC) ue }ava. Con lo que es possible utilizai uiiveis }BBC y la funcionaliuau ue estos. Solo uisponible cuanuo se usa IBN WebSpheie sNash.
20.3 Adaptadores del componente Db En la siguiente tabla se uetalla los auaptauoies ue la uistiibucion ue Kumbio Fnterprise Iromework junto con sus caiacteiisticas y estauo ue mauuiez:
Caua auaptauoi nativo heieua ue la clase BbBose la cual implementa mtouos utiles valiuos paia cualquiei gestoi ielacional en foima ue capa ue abstiaccion inteimeuia. La inteiface BbBoselnterfoce es implementaua poi caua auaptauoi ue tal foima que caua uno mantenga una estiuctuia consistente que peimita efectuai opeiaciones bsicas y avanzauas sin incuiiii en uetalles ue bajo nivel o uepenuientes ue caua gestoi ielacional.
La estiuctuia ue la inteiface BbBoselnterfoce es la siguiente:
interface DbBaseInterface {
public function __construct($descriptor=''); public function connect($descriptor=''); public function query($sqlStatement); public function fetchArray($resultQuery='', $opt=''); public function close(); public function numRows($resultQuery=''); public function fieldName($position, $resultQuery=''); public function dataSeek($position, $resultQuery=''); public function affectedRows($resultQuery=''); public function error($errorInfo='', $resultQuery=''); public function noError($resultQuery=''); public function inQuery($sqlStatement, $type=db::DB_BOTH); public function inQueryAssoc($sql); public function inQueryNum($sql); public function fetchOne($sql); public function fetchAll($sql); public function insert($tableName, $values, $fields='', $automaticQuotes=true); public function update($tableName, $fields, $values, $whereCondition=null, $automaticQuotes=true); public function delete($tableName, $whereCondition=''); public function limit($sqlStatement, $number); public function forUpdate($sqlQuery); public function sharedLock($sqlQuery); public function begin(); public function rollback(); public function commit(); public function listTables($schemaName=''); public function describeTable($tableName, $schemaName=''); public function getRequiredSequence($tableName='', $identityColumn='', $sequenceName=''); public function lastInsertId($tableName='', $identityColumn='', $sequenceName=''); public function createTable($tableName, $definition, $index=array(), $tableOptions=array()); public function dropTable($tableName, $ifExists=false); public function tableExists($tableName, $schema=''); public function getDateUsingFormat($date, $format='YYYY-MM-DD'); public function getHaveAutoCommit(); public function setIsolationLevel($isolationLevel); public function getCurrentDate(); public function getLastResultQuery(); public function getConnectionId(); public function getDatabaseName(); public function getUsername(); public function getHostName();
} 20.4 Generacin de SQL Caua gestoi ielacional sigue estnuaies uel lenguaje SQL, piincipalmente ue las especificaciones ANSI92 y ANSI99. Nuchos motoies ue base ue uatos agiegan extensiones al lenguaje o no implementan auecuauamente los estnuaies estableciuos poi uiveisas iazones. Cuanuo se esciiben aplicaciones multi-motoi es posible encontiai cieitas incompatibiliuaues que pouiian conllevai a ieesciituias ue couigo que ieabien el ciclo uel softwaie y pouiian geneiai sobiecostos. La capa ue abstiaccion ue Kumbio Fnterprise Iromework se encaiga ue los uetalles y geneia la mayoi paite ue las sentencias ue BNL que sopoita un gestoi LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1Su
ielacional.
A nivel ue aplicacion el lenguaje PBP ofiece una extensa biblioteca ue funciones que peimiten conectaise y efectuai opeiaciones sobie una gian vaiieuau ue gestoies ielacionales. Sin embaigo, la foima en que estan implementauas estas funciones no es estnuai y consistente poi lo que el cambio ue un gestoi a otio conlleva a ieesciibii couigo y se piesentan las situaciones mencionauas anteiioimente.
//Conexin a Oracle $connId = oci_connect("scott", "tiger", "//192.168.0.40/XE");
//Conexin a Informix $connId = ifx_connect("stores@ol_srv1", "informix", "pass");
//Conexin en PostgreSQL $connId = pg_connect("host=192.62.10.1 port=5432 dbname=bankdb user=dma password=2fe051871");
Clausulas que extenuienuen el lenguaje SQL como LINIT en SELECT, estan sopoitauas poi algunos gestoies ielacionales y en otios es necesaiio implementailos ue tal foima que sea tianspaiente y funcionen como se espeia.
//LIMIT en SQLServer Sybase SELECT * FROM (SELECT TOP 10 * FROM (SELECT TOP 10 customers.categoryId FROM customers) AS itable) AS otable
//LIMIT en MySQL SELECT customers.categoryId FROM customers LIMIT 10
El componente BBR implementa en caua uno ue los auaptauoies mtouos que geneian SQL optimizauo paia caua gestoi ielacional sopoitauo aumentanuo las capaciuaues ue caua aplicacion uesaiiollaua con el mismo. 20.5 Conexiones a gestores relacionales por defecto Caua aplicacion piopoiciona el aichivo ue configuiacion environment.ini en uonue se pueuen establecei los paimetios ue conexion ue acueiuo a los entoinos ue las fases ue uesaiiollo ue la aplicacion.
Los paimetios ue conexion tienen el piefijo uatabse y pueuen vaiiai ue acueiuo al gestoi ielacional utilizauo. Paia inuicai el auaptauoi a usai se utiliza el paimetio Jotobose.type. A continuacion se explican las consiueiaciones ue conexion paia los motoies sopoitauos: PQONOb I.$7(-#8,+(.$#7 2,8, [8,+3# 0iacle es muy conociuo poi sus capaciuaues ue escalamiento y caiacteiisticas, auems es liuei en bases ue uatos y est uisponible en vaiias platafoimas.
El auaptauoi ue conexion a 0iacle iequieie que la extension ue PBP oci8 este uisponible, meuiante esta es posible conectaise a 0iacle en sus veisiones 8i, 9i, 1ug y 11g. Auicional a esto es necesaiio instalai el 0iacle Instant Client apiopiauo a la platafoima iequeiiua.
Estas libieiias pueuen sei uescaigauas en la siguiente 0RL: http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html.
Las vaiiables ue entoino 0RACLE_B0NE, 0RACLE_SIB, LB_PREL0AB Y NLS_LANu ueben estai uefiniuas paia iealizai la conexion a 0iacle.
Paimetios ue configuiacion ue la extension 0CI8 como oci8.mox_persistent, oci8.persistent_timeout y oci8.Jefoult_prefetcb tambin uebeiian teneise en cuenta.
Be acueiuo a la veision ue la extension 0CI8 pouiia o no habei compatibiliuau con el gestoi LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S2
ielacional iequeiiuo. En la siguiente tabla se piesenta la compatibiliuau ue acueiuo a la veision ue 0CI8:
Este auaptauoi no sopoita mltiples tiansacciones simultaneas, esto quieie uecii que al tiatai ue cieai una tiansaccion cuanuo ya hay una activa se geneiai una excepcion.
Los paimetios ue conexion al conectaise a 0iacle son:
T,93,5 K,8U1#%8.7 -# +.$#H(:$ , [8,+3# "7,$-. ,-,2%,-.8 4,%(M. K,8U1#%8. 6#7+8(2+(:$ uatabase.useiname Los usuaiios en 0iacle son piopieuau ue schemas que tienen el mismo nombie uel usuaiio. Este paimetio peimite inuicai LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1SS
el nombie uel usuaiio o ambiguamente el schema. uatabase.host Nombie ue la maquina o uiieccion IP uonue se encuentia el seiviuoi 0iacle. uatabase.passwoiu Contiasea uel usuaiio con el que se iealiza la conexion. uatabase.instance Nombie ue la instancia ue 0iacle o uel seivicio uel TNS Listenei. Cuanuo se usa 0iacle Batabase Expiess este es 'XE' poi uefecto. uatabase.poit Pueito uel seivicio TNS Listenei. Poi uefecto es 1S21. uatabase.soit Este paimetio peimite establecei como se hai el oiuenamiento ue columnas que contengan valoies alfanumiicos como CBAR o vARCBAR2. Su valoi poi uefecto es spanish_m. En paises hispano-hablantes las letias ch, ll y son consiueiauas paite uel alfabeto y esta vaiiable peimite que el oiuenamiento sea auecuauo a la localizacion utilizaua. uatabase.comp Es la foima en la que se iealizan las compaiaciones entie valoies constantes y columnas ue las tablas. El valoi poi uefecto linguistic peimite que las compaiaciones no sean sensibles a maysculasminsculas. uatabase.chaiset Peimite establecei el chaiset en el que se almacenanuevolveian valoies en las bases ue uatos. El valoi AlS20TF8 es el nombie ue 0iacle paia el chaiset 0TF8. uatabase.teiiitoiy Peimite establecei el teiiitoiio en el que se encuentia la aplicacion. Bepenuienuo ue este los foimatos ue fechas y ue valoies nmeiicos se ajusta a la localizacion iequeiiua. Poi uefecto es 'spain'. uatabase.language El iuioma en el que se piesentain los mensajes ue eiioi uel motoi y se foimateain los iesultauos numiicos y ue fechas. Poi uefecto es 'spanish'.
PQONObOb I.$#+%,8 , [8,+3# 1#-(,$%# ]6kI Tambin es posible iealizai conexiones a 0iacle usanuo el auaptauoi }BBC cuanuo la aplicacion ha siuo implementaua en un conteneuoi ue aplicaciones IBN WebSpheie sNash.
El aichivo }AR ojubc14.jai uebe estai ubicauo en el uiiectoiio lib ue la aplicacion sNash siguienuo las convenciones ue aiquitectuia ue la maquina. Poi ejemplo si se ejecuta en Linux sobie un piocesauoi aiquitectuia x86 entonces la ubicacion es:
PQONOP I.$7(-#8,+(.$#7 2,8, @(+8.7.*% 'fE '#8M#8 SQL Seivei es el motoi ue base ue uatos ielacional ue Niciosoft. La conexion a este motoi es iealizaua via PBP Bata 0bjects (PB0). Este auaptauoi solo sopoita conexiones a SQL Seivei uesue Winuows usanuo conexiones 0BBC meuiante el uiivei php_puo_oubc. Las veisiones ue SQL Seivei sopoitauas van uesue la 7.x hasta la 2uu8.
PQONOPOb I8#,+(:$ -# "$ 6'4 [6kI 2,8, 'fE '#8M#8 A continuacion se ilustia el pioceso ue cieacion ue una conexion a SQL Seivei meuiante 0BBC. 0tilizanuo un usuaiio con cieuenciales auministiativas se abie el Auministiauoi ue 0iigenes ue Batos 0BBC uesue Panel ue Contiol - Beiiamientas Auministiativas.
En esta pantalla se selecciona la pestaa 'BSN ue usuaiio' y se ua click en el boton 'Agiegai' paia cieai una nuevo oiigen ue uatos:
Se ua click en 'Finalizai' paia abiii el asistente ue oiigenes ue uatos paia SQLSeivei. Se piesenta la siguiente pantalla:
El campo nombie hace iefeiencia nombie al oiigen ue uatos o Boto Source Nome (BSN) que sei utilizauo luego paia iealizai la conexion en la aplicacion. El campo seiviuoi inuica el nombie ue la instancia y maquina uonue est instalauo SQL Seivei. Se ua click en siguiente paia continuai.
El tipo ue autenticacion se uebe tenei en cuenta cuanuo se iealice la conexion uesue Kumbio Fnterprise. Si se selecciona autenticacionn ue Winuows NT no sei necesaiio inuicai el paimetio 0IB y PWB uel usuaiio ue conexion. En este caso el usuaiio con el que se ejecute el pioceso uel seiviuoi web se utilizai paia autenticaise en SQL Seivei. Si se selecciona autenticacion ue SQL Seivei se ueben inuicai los paimetios mencionauos anteiioimente.
En la siguiente pantalla se pueue configuiai la base ue uatos pieueteiminaua. Las opciones '0sai iuentificauoies entiecomillauos ANSI' y '0sai nulos, iellenos y auveitencias ANSI' ueben estai seleccionauos.
En esta pantalla se pueuen activai otias opciones, al teiminai se ua click en 'Finalizai':
K,8U1#%8. 6#7+8(2+(:$ uatabase.puo Inuica que se uebe caigai un Auaptauoi PB0. Su valoi uebe sei 0n paia que tenga efecto. uatabase.usn Inuica los paimetios uel Bata Souice Name (BSN) uel oiigen uatos. SERvER es la maquina uonue est instalaua la instancia uel fiamewoik. BATABASE es el nombie ue la base ue uatos ue tiabajo. 0IB es el nombie uel usuaiio con el que se hai la conexion. PWB es el passwoiu uel usuaiio. BRIvER es el nombie uel uiivei 0BBC paia SQL Seivei, noimalmente es 'SQL Seivei'.
PQONOc I.$7(-#8,+(.$#7 2,8, @\'fE NySQL es uno ue los motoies 0pen Souice ms populaies y con mayoi piesencia en aplicaciones paia Inteinet. Existen 2 auaptauoies que peimiten la conexion a NySQL, el piimeio es "mysql" que usa la extension ue PBP nativa uel mismo nombie y que peimite la conexion usanuo libieiias cliente uesue la veision 4.1. La segunua es "mysqli" que utiliza la extension uel mismo nombie y que tiene una funcionaliuau y ienuimiento supeiioi a la ue la LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 161
Kumbio Fnterprise Iromework pueue tiabajai con NySQL cuanuo est en mouo SQL estiicto y no estiicto. En mouo estiicto se geneiain excepciones BblnvoliJIormotFxception cuanuo se tiate ue inseitai un valoi que no tenga un foimato auecuauo al tipo ue uato iequieiiuo ue la columna ue este.
Los paimetios iequeiiuos ue conexion al conectaise con el auaptauoi "mysql" son:
Los posibles paimetios ue conexion al conectaise con el auaptauoi "mysql" son:
[production] database.type = mysql database.host = localhost database.username = root database.password = my_password database.name = production_db database.port = 3306 database.autocommit = Off database.compression = Off database.ssl = Off database.interactive = Off
La uesciipcion ue los paimetios anteiioies es la siguiente:
T,93,5 K,8U1#%8.7 -# +.$#H(:$ , @\'fE "7,$-. #3 ,-,2%,-.8 D1\7^3F K,8U1#%8. 6#7+8(2+(:$ uatabase.useiname El nombie ue usuaiio ue NySQL con el que se efectuai la conexion. uatabase.passwoiu El passwoiu uel usuaiio ue NySQL. uatabase.host Seiviuoi ue NySQL. Se pueue utilizai el stiing ue conexion hostname:pueito o :pathalsocket cuanuo se tiata ue localhost. uatabase.name Nombie ue la base ue uatos. uatabase.poit Pueito uel seiviuoi ue NySQL al especificaise se hace la LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 162
conexion poi TCPIP. uatabase.autocommit Cuanuo el valoi es 0n. Inuica si la sesion ue NySQL uebe estableceise en mouo A0T0C0NNIT, esto significa que se uebe hacei un C0NNIT obligatoiiamente paia que se tenga efecto los cambios iealizauos sobie la base ue uatos. Poi uefecto es 0ff. uatabase.compiession Inuica si el cliente NySQL uebe compiimii touo el tifico ue ieu entie la aplicacion y el seiviuoi ue base ue uatos. Poi uefecto es 0ff uatabase.ssl Inuica si se uebe enciiptai el tifico entie la aplicacion y el seiviuoi ue base ue uatos meuiante SSL. Poi uefecto es 0ff. uatabase.inteiactive Inuica si se uebe cieai una sesion inteiactiva en vez ue una conexion tempoial. Poi uefecto es 0ff.
Los paimetios iequeiiuos ue conexion al conectaise con el auaptauoi "mysqli" son:
K,8U1#%8. 6#7+8(2+(:$ uatabase.socket Aplica cuanuo el host el localhost y peimite establecei el path al socket 0NIX o al nameu pipe en Winuows. uatabase.chaiset Peimite establecei el chaiset utilizauo poi el cliente NySQL paia enviai la infoimacion al seiviuoi. uatabase.key La iuta a uonue se encuentia el aichivo ue llave compaitiua. Este paimetio solo aplica cuanuo la opcion SSL est 0n. Poi uefecto su valoi es N0LL. uatabase.ceit La iuta al aichivo ue ceitificauo. Este paimetio solo aplica cuanuo la opcion SSL est 0n. Poi uefecto su valoi es N0LL. uatabase.ca La iuta al aichivo ceitificate authoiity. Este paimetio solo aplica cuanuo la opcion SSL est 0n. Poi uefecto su valoi es N0LL. uatabase.capath La iuta al aichivo que contiene ceitificauos SSL valiuos en foimato PEN. Este paimetio solo aplica cuanuo la opcion SSL est 0n. Poi uefecto su valoi es N0LL. Poi uefecto su valoi es N0LL. uatabase.ciphei 0na lista ue mtouos ue cifiauo paia usai en la enciiptacion SSL. Este paimetio solo aplica cuanuo la opcion SSL est 0n. Poi uefecto su valoi es N0LL.
PQONOd I.$7(-#8,+(.$#7 2,8, Zk@ Z$*.81(H Kumbio Fnterprise utiliza PEP Boto 0bjects {PB0) paia acceuei a bases ue uatos IBN Infoimix. Es posible iealizai conexiones a Infoimix (IBS) veision 7.x, 0niveisal Seivei (I0S) 9.x y a Infoimix Bynamic Seivei 2uuu, 1u y 11. Los siguientes iequisitos son necesaiios paia iealizai una conexion satisfactoiia a este motoi:
PBP uebe estai compilauo con la extension puo_infoimix, esta pueue sei obteniua via PECL o al compilai PBP uesue el couigo fuente. Cuanuo se compila uesue el couigo fuente la opcion ue configuiacion uebe incluii ./configure --with-pdo-informix=/path/to/SDK[,shared] La extension PECL pueue sei instalaua usanuo el comanuo pecl install pdo_informix en entoinos 0nix. Paia una compilacion satisfactoiia ue la extension el cliente SBK ue IBN paia Infoimix uebe estai instalauo en la maquina o el seiviuoi LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 164
Infoimix en si mismo. La vaiiable ue entoino INF0RNIXBIR uebe apuntai al uiiectoiio ue instalacion ue infoimix o uel client SBK. ESQLC es necesaiio paia tiabajai con infoimix. El Infoimix Client SBK contiene este softwaie. El client SBK paia IBN Infoimix pueue sei uescaigauo uesue el sitio web ue sopoite ue IBN en http://www-306.ibm.com/software/data/informix/tools/csdk/ . Si est utilizanuo Infoimix veision 1u o 11 no es necesaiio instalai CSBK ya que este viene incluiuo en la uistiibucion uel seiviuoi. El seiviuoi ue Infoimix uebe estai configuiauo paia aceptai conexiones meuiante tcp meuiante el mouulo onsoctcp.
0na vez las extensiones pbp_pJo y pbp_pJo_informix se encuentien uisponibles la conexion pueue iealizaise ue la siguiente foima:
K,8U1#%8. 6#7+8(2+(:$ uatabase.puo Inuica que se uebe caigai un auaptauoi PB0. Su valoi uebe sei 0n paia que tenga efecto. uatabase.usn Los paimetios ue conexion uel Bata Souice Name. El paimetio host inuica el nombie uel maquina o uiieccion IP uonue est instalauo el Infoimix. Seivice es el pueito uonue se iealizai la conexion TCPIP. Batabase es el nombie ue la base ue uatos. Seivei es nombie ue la instancia ue infoimix. Piotocol uebe sei siempie onsoctcp. EnableSciollableCuisois uebe sei igual a 1 paia peimitii el uso ue cuisoies que se pueuen iecoiiei en cualquiei oiuen, esto pueue mejoiai el ienuimiento cuanuo se usan paginauoies poi ejemplo.
0tias opciones que se pueuen enviai en el BSN son: Tiaslation0ption, peimite utilizai una libieiia ue tiauuccion ue LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 16S
mensajes, con valoi u peimite solucionai un pioblema comn en unix0BBC.
IsolationLevel: Inuica el nivel ue isolacion ue la conexion. u es Pieueteiminauo, 1 es Reau 0ncommiteu, 2 es Reau Commiteu, S es Repeteable Reau, 4 es Seiializable y S es LastCommiteu.
CuisoiBehavioi: Cuanuo es u el cuisoi se cieiia automticamente al iecoiiei los iegistios, cuanuo es 1 se pieseiva.
ClienteLocale: Peimite establecei la localizacion uel cliente. Poi uefecto es en_0S.CP12S1
BatabaseLocale: Peimite establecei la localizacion ue la base uatos poi uefecto es: en_0S.819
AutoCommit0ptimization: Inuica si el uiivei uebe efectuai optimizacion paia conexiones no-tiansaccionales. uatabase.useiname Nombie uel usuaiio que iealizai la conexion. uatabase.passwoiu Contiasea uel usuaiio.
PQONOdOb I.$*()"8,+(:$ -#3 '#8M(-.8 Es posible que ueba cambiai el usuaiio con el que se ejecutan los piocesos uel seiviuoi web al usuaiio infoimix o un usuaiio uel giupo infoimix. En el caso ue Apocbe Web Server pueue mouificai esto cambianuo los paimetios 0sei y uioup asi:
User informix Group informix
Si el seiviuoi est instalauo en Winuows y se usa Niciosoft IIS se uebe entiai a la consola ue auministiacion ue seivicios. Pueue ingiesai a ella meuiante el comanuo seivices.msc en el cuauio ue uialogo ejecutai. Se ua click ueiecho en el seivicio "Infoimix IBS - Nombie" y luego en piopieuaues. En la pestaa inicio ue sesion se coloca el usuaiio con peimisos uel motoi y luego click en 'Aceptai'.
La siguiente es una configuiacion ue las vaiiables ue entoino paia un piofile paia el usuaiio "infoimix" en un seiviuoi 0nix o Winuows: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 166
El aichivo INF0RNIXSQLB0STS uebe tenei al menos un seivicio tcpip uisponible:
ol_server onsoctcp localhost informixserver
El aichivo etcseivices uebe incluii la uesciipcion TCP paia el seivicio cieauo:
informixserver 9800/tcp # Informix Dynamic Server
PQONOdOP I.$7(-#8,+(.$#7 +.$ T8,$7,++(.$#7 El uesaiiollauoi uebe activai el logging ue la base ue uatos a 0nbuffeieu Logging o Buffeieu Logging usanuo la heiiamienta onmonitor o meuiante el comanuo ontope -B Jbnome, ue lo contiaiio el auaptauoi geneiai una excepcion al tiatai ue iealizai un commit o un iollback a una tiansaccion.
Infoimix no geneia un timeout cuanuo iegistios que se vayan a mouificai o leei esten sienuo mouificauos en otia tiansaccion. Kumbio Fnterprise geneiai una excepcion como InfoimixInfoimix 0BBC BiiveiInfoimixCoulu not uo a physical-oiuei ieau to fetch next iow. sqleiim(t) (SQLFetchScioll-244 at iootPB0_INF0RNIXinfoimix_statement.c:889) (-244) ue tipo BblockAJquisitionTimeout.
Touos los niveles ue isolacion son sopoitauos en iuntime. El nivel ue isolacion C0RS0R SCALABILITY es valiuauo con IS0LATI0N_SERIALIZABLE.
4.%,5 IBN Infoimix no sopoita la extension uel lenguaje SQL LINIT poi lo que el uesaiiollauoi uebe aseguiaise que los iesultauos uevuelva el nmeio ue iegistios iequeiiuos via conuiciones en la clausula WBERE. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 167
PQONON I.$7(-#8,+(.$#7 +.$ 'fE(%# SQLite es un motoi ue base ue uatos esciito en C que es embebible en aplicaciones web ue baja concuiiencia. La libieiia SQLite peimite auministiai bases ue uatos que se ciean en un solo aichivo y que se pueuen uistiibuii junto con la aplicacion.
Como se menciono anteiioimente las bases ue uatos SQLite no estn iecomenuauas paia gianues aplicaciones con alto tifico y acceso concuiiente elevauo.
Kumbio Fnterprise sopoita SQLite veision S meuiante la capa ue abstiaccion PB0 (PBP Bata 0bjects) poi lo que se iequieie que las extensiones ue PBP puo y puo_sqlite esten uisponibles poi la aplicacion. Este auaptauoi no sopoita mltiples tiansacciones simultneas.
K,8U1#%8. 6#7+8(2+(:$ uatabase.layei Inuica que se uebe caigai un Auaptauoi PB0. Su valoi uebe sei "puo" paia que tenga efecto. uatabase.usn Cuanuo se tiata ue SQLite inuica la iuta al aichivo base ue uatos. La extension .ub es opcional peio es ms iepiesentativa. El PATB uel aichivo pueue sei un path absoluto uesue el uiiectoiio uonue est instalaua la instancia o un path ielativo. 20.6 Pool de Conexiones El componente BbBose meuiante la implementacion ue un Sinqleton contiola que caua vez que se solicite la conexion a la base ue uatos se uevuelva la misma conexion evitanuo la cieacion ue mltiples conexiones al gestoi ielacional ue foima innecesaiia aumentanuo los iecuisos iequeiiuos poi la aplicacion.
El mtouo esttico Botobose::rowConnect{) uevuelve la misma conexion activa sin impoitai el nmeio ue veces que sea invocauo, si aun no existe una conexion entonces la ciea. Los paimetios ue conexion son los estableciuos poi entoino activo en environment.ini. Si se LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 168
iequieie una nueva conexion al gestoi se pueue enviai true como piimei paimetio y si se iequieie ienovai la conexion es uecii ieemplazai la conexion uel Sinqleton se envia true como segunuo paimetio. PQOeOb I.$#H(.$#7 -# k,0. 4(M#3 Es posible establecei conexiones ue bajo nivel a mltiples motoies inuepenuientemente uel gestoi ielacional iequeiiuo. El subcomponente BblooJer peimite tanto caigai el auaptauoi activo estableciuo en enviroment.ini como uno cualquieia usanuo el mtouo esttico factoiy.
El piimei paimetio coiiesponue al nombie uel auaptauoi iequeiiuo paia efectuai la conexion, el segunuo es un vectoi que contiene las opciones ue conexion. Estas son las mismas utilizauas en una seccion ue un aichivo ue configuiacion enviroment.ini.
$descriptor = mysql:host=localhost;username=root;password=mypass;name=bankdb; $db = DbLoader::factoryFromDescriptor($descriptor); PQOeOP T8,>,8 I.$#H(.$#7 La piopieuau ue las conexiones ue geneiai tiazas peimite obtenei una lista ue touas las opeiaciones SQL ue bajo nivel ejecutauas en una session al gestoi ielacional.
Paia activai la tiaza en una conexion se uebe llamai al mtouo setTrocinq con paimetio tiue apaitii uel momento uonue se uesea empezai la tiaza:
$db = DbBase::rawConnect(); $db->setTracing(true); $results1 = $db->fetchAll(SELECT * FROM customers); $results2 = $db->fetchAll(SELECT * FROM customers WHERE status = Active); foreach($db->getTracedSQL() as $sqlStatement){ echo $sqlStatement.\n; } 20.7 Generar Profiles de ejecucin de SQL Los objetos uel componente Bb peimiten geneiai Piofiles ue la ejecucion ue sentencias SQL que se envian al gestoi ielacional. La infoimacion geneiaua incluye los tiempos en milisegunuos que uuio la ejecucion ue caua sentencia y asi pouei iuentificai cuellos ue botella en la aplicacion.
Inteinamente una instancia ue BbProfiler es instanciaua paia geneiai los piofiles ue las opeiaciones SQL. El uesaiiollauoi pueue uefinii su piopio piofilei establecienuo una instancia ue la clase que implemente la inteifaz BbProfilerlnterfoce como paimetio ue setProfilinq{).
La inteiface BbProfilerlnterfoce exige la implementacion ue:
interface DbProfileInterface {
public function startProfile($sqlStatement); public function stopProfile(); public function getNumberTotalStatements(); public function getTotalElapsedSeconds(); public function getProfiles(); public function reset(); public function getLastProfile();
} 20.8 Manejar Excepciones de Db Cieai la instancia uel auaptauoi o uiiectamente en el constiuctoi uel mismo ciea automticamente una conexion a la base ue uatos. Si ocuiien pioblemas al hacei la conexion o alguno ue los paimetios es invaliuo se geneia una excepcion en la misma la cual uebe sei contiolaua poi el uesaiiollauoi.
Las excepciones son contiolauas meuiante un bloque try,cotcb que captuie una excepcion uel tipo BbFxception:
BbException Excepcion geneiica lanzaua poi auaptauoi ue conexion al gestoi ielacional utilizauo. BbLockAuquisitionException Excepcion lanzaua cuanuo la tiansaccion actual en la conexion no pueue efectuai un bloqueo sobie algn iecuiso poi ejemplo una tabla o una seiie ue iegistios. BbSQLuiammaiException Excepcion lanzaua cuanuo se envia una sentencia SQL mal foimaua o con eiioies ue sintaxis. BbContiaintviolationException Excepcion lanzaua cuanuo la opeiacion ue mouificacion o actualizacion viola un constiaint ue llave foinea. BbInvaliuFoimatException Excepcion lanzaua cuanuo se tiata ue inseitai o actualizai un valoi en una tabla con un foimato eiioneo.
PQO`OP Z$*.81,+(:$ #H%#$-(-, -# #H+#2+(.$#7 )#$#8,-,7 2.8 69 Las excepciones geneiauas poi el componente Bb ofiecen infoimacion extenuiua uel oiigen ue una excepcion. Cuanuo la aplicacion se encuentia en mouo uebug esta infoimacion se pueue visualizai en pantalla. La iefeiencia ue la pantalla ue excepciones es la siguiente:
En la esquina supeiioi ueiecha se piesenta el tipo ue excepcion geneiaua:
Bespus ue esta el mensaje que ha enviauo el gestoi ielacional y la sentencia SQL que geneio la excepcion. En este caso tanto el tipo ue excepcion como el mensaje ue eiioi inuica que la LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 172
sentencia SQL esta mal foimaua o tiene eiioies ue sintaxis.
El iu ue conexion es un couigo inteino que iuentifica el iecuiso utilizauo paia conectaise al motoi ue base ue uatos. El mensaje ue la excepcion infoima que conexion estaba activa cuanuo se piouujo la excepcion. El iu apaiece al final como "Resource iJ #64".
El couigo ue eiioi enviauo poi el motoi tambin pueue iesultai ue ayuua en algunos casos. Este se muestia al final uel mensaje ue eiioi entie paintesis.
Como la aplicacion se encuentia en mouo uebug se visualiza la tiaza ue ejecucion ue la excepcion. Si Kumbia Entepiise uetecta que la excepcion se ha geneiauo en un aichivo ue la aplicacion entonces se muestia el fiagmento ue couigo iesaltanuo la linea exacta uonue se geneio la excepcion:
Bebajo ue la tiaza se encuentia el cuauio "Batos ue la conexion activa" y piesenta atiibutos uel estauo ue la conexion en el momento ue la excepcion:
En este caso la tiaza se encuentia uesactivaua, al activaila se obtenuiia touas las intiucciones SQL que se ejecutaion en la misma conexion pieviamente a que se piouujeia la excepcion. La tiaza se pueue activai ueclaiativamente en el mouo activo en confiq,environment.ini o piogiamacionalmente pasanuo el paimetio "trocinq" =~ true al constiuctoi uel objeto conexion.
El aichivo confiq,environment.ini entonces queuaiia asi:
Al ejecutai nuevamente el pioceuimiento se pueue visualizai la tiaza ue la conexion:
El campo "Tiaza" uice "SI" y uebajo ue este el nuevo campo "Conteniuo ue la Tiaza" muestia en oiuen cionologico las sentencias SQL geneiauas en la conexion activa.
Ns uebajo se visualiza el cuauio uatos ue entiaua, en l se uetalla la infoimacion que fue enviaua al pioceuimiento uesue el foimulaiio o enlace anteiioi. El objetivo uel cuauio es iuentificai si los uatos ue entiaua pueuen sei los causantes uel pioblema:
Los valoies ue entiaua se muestian en mouo uetallauo ayuuanuo asi a conocei su conteniuo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 174
ms fcilmente.
Si la infoimacion geneiaua no es suficiente paia iuentificai la causa ue la excepcion pueue utilizai el componente Bebuq el cual piopoiciona ayuuas paia iealizai pioceuimientos tiauicionales ue iastieo ue piocesos. 20.9 Tipos de Resultado al Obtener de Registros Caua auaptauoi implementa los mismos tipos ue vectoi al obtenei iegistios, esto se iefieie a la foima en la que los vectoies uevueltos estan inuexauos. Los mtouos inuery, fetcb0ne y fetcbAll peimiten establecei en su segunuo paimetio los valoies ue las constantes que peimiten cambiai la foima en la que estan uispuestos los iesultauos al obteneilos.
T,93,5 T(2.7 -# +.$7%,$%#7 2,8, .9%#$#8 3.7 8#)(7%8.7 -# "$ 8#7"3%,-. I.$7%,$%# 6#7+8(2+(:$ Bb::BB_N0N Bevuelve caua iegistio como un vectoi inuexauo solamente numiicamente. Bb::BB_ASS0C Bevuelve caua iegistio como un vectoi inuexauo solamente asociativamente. Las claves utilizauas como inuices coiiesponuen a los nombies ue las columnas ue la sentencia SELECT ejecutaua. Cuanuo se iealizan }0INs en mltiples tablas es posible que el nombie ue los inuices se iepita poi lo cual es necesaiio implementai alias paia las columnas iepetiuas.
Paia touos los gestoies ielacionales los inuices se encuentian en minsculas. Bb::BB_B0TB Bevuelve caua iegistio inuexauo tanto numiicamente como asociativamente. El nmeio ue elementos poi vectoi iesultauo es el uoble uel nmeio ue columnas uevuelto en la sentencia SELECT.
20.10 Leer registros Los siguientes mtouos coiiesponuen al API uel componente Bb que peimiten leei iegistios ue las entiuaues:
public orroy finJ{strinq $tobleNome, strinq $wbereClouse, strinq $fielJs="", strinq $orJerBy="1") Realiza una consulta SELECT en una tabla en foima abstiaiua.
//Mostrar todos los clientes activos $db = DbBase::rawConnect(); $resultset = $db->find(customers, status = Active); foreach($resulset as $row){ print $row[name].\n; }
public orroy inuery{strinq $sqluery, int $fetcbType=Jb::BB_B0TE) Bevuelve los iesultauos ue una consulta SQL en un aiiay. El paimetio $fetcbType se iefieie a las constantes Jb::BB_ASS0C, Jb::BB_N0H y Jb::BB_B0TE que es el tipo ue inuexamiento uel vectoi uevuelto poi iegistio.
public orroy fetcbAll{strinq $sqluery, int $fetcbType=Jb::BB_B0TE) 0btiene touos los iesultauos ue una consulta SQL en un aiiay. Es un alias paia el mtouo inQueiy.
public orroy inueryAssoc{strinq $sqluery) 0btiene touos los iesultauos ue una consulta SQL en un aiiay. Caua iegistio es un aiiay inuexauo asociativamente.
$db = db::rawConnect(); $customers = $db->inQueryAssoc(SELECT id, name FROM customers ORDER BY id); foreach($customers as $customer) { print $customer[name].\n; }
public orroy inueryNum{strinq $sqluery) 0btiene touos los iesultauos ue una consulta SQL en un aiiay. Caua iegistio es un aiiay inuexauo numiicamente.
$db = db::rawConnect(); $customers = $db->inQueryNum(SELECT id, name FROM customers ORDER BY id); foreach($customers as $customer) { print $customer[1].\n; //Imprime el nombre }
public orroy fetcb0ne{strinq $sqluery, int $fetcbType=Jb::BB_B0TE) Bevuelve un solo iegistio en un aiiay ue la consulta SELECT en $sqluery. El paimetio $type se iefieie a las constantes Jb::BB_ASS0C, Jb::BB_N0H y Jb::BB_B0TE que es el tipo ue inuexamiento uel aiiay uevuelto poi iegistio.
$db = DbBase::rawConnect(); $customer = $db->fetchOne(SELECT * FROM customers WHERE id = 124);
public orroy fetcbArroy{resource $resultuery) 0btiene un iegistio uel ultimo iecuiso ue consulta geneiauo en el objeto auaptauoi o el inuicauo meuiante el iecuiso $resultuery. El iesultauo uevuelto uepenue uel fetchNoue estableciuo con setIetcbHoJe.
Bevuelve el nmeio ue filas obteniuas en la ultima consulta SQL ejecutaua en el objeto auaptauoi. Es posible establecei el iecuiso uevuelto poi el mtouo query paia obtenei esta infoimacion.
$db = Db::rawConnect(); $result = $db->query("SELECT id, name FROM customer WHERE status = 'Active'"); print "Hay ".$result->numRows($result)." clientes activos";
public booleon JotoSeek{int $number, resource $resultuery=null) Peimite establecei la posicion en el cuisoi inteino o el estableciuo poi $resultuery hacienuo que el pioximo iegistio que obtenga fetcbArroy sea el nmeio $number.
$db = DbLoader::factory('MySQL', array( "host" => "127.0.0.1", "username" => "root", "password" => "hea101", "name" => "bankdb" )); $db->query("SELECT id, name FROM customer WHERE category_id = 1"); if($db->numRows()>10){ //Empezar desde el 10 registro $db->dataSeek(10); while($row = $db->fetchArray()){ print $row['name']."\n"; } }
public resource qetlostResultuery{) 0btiene el ltimo iecuiso geneiauo en una consulta SQL meuiante el objeto.
/0#123.5 [9%#$#8 #3 G3%(1. 8#7"37#% )#$#8,-.
<?php
$db = Db::rawConnect(); $db->query("SELECT id, name FROM customer WHERE status = 'A'"); $result = $db->getLastResultQuery(); while($row = $db->fetchArray()){ print $row['name']."\n"; }
public strinq limit{strinq $sqluery, int $number) La extension uel la sentencia SQL SELECT llamaua LINIT peimite especificai al gestoi LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 178
ielacional que no uebe uevolvei ms uel numeio ue iegistios limitauos a $number. No touos los gestoies ielacionales implementan esta extension y otios peimiten haceilo utilizanuo otios pioceuimientos.
Este mtouo peimite cieai una sentencia SQL que iepiouuzca la funcionaliuau LINIT en foima tianspaiente.
$db = Db::rawConnect(); $sqlQuery = $db->limit("SELECT id, name FROM customer WHERE status = 'A'", 10); $db->query($sqlQuery); $result = $db->getLastResult(); while($row = $db->fetchArray()){ print $row['name']."\n"; } 20.11 Manipular Registros Los siguientes mtouos peimiten la geneiacion y ejecucion ue sentencias SQL que peimiten la manipulacion ue iegistios:
public booleon insert{strinq $toble, orroy $volues, orroy $fielJs=orroy{), booleon $outomoticuotes=folse) Peimite iealizai una inseicion sin usai SQL uiiectamente. El SQL es geneiauo est ue acueiuo al gestoi ielacional utilizauo. Notese que poi uefecto el mtouo espeia que los valoies a inseitai esten coiiectamente escapauos, el paimetio $outomoticuotes peimite que se agiegen comillas simples y se escapen los valoies usanuo la funcion oJJslocbes{) en foima automtica.
Las columnas que son omitiuas se les aplica la iegla uel gestoi ielacional BEFA0LT si esta existe, en caso contiaiio se inseitan valoies nulos.
//Usando Quotes en forma automtica $values = array(0044, England); $fields = array(code, name); if($db->insert(countries, $values, $fields, true)){ Flash::success(Se insert correctamente el registro); }
Cuanuo se agiega el paimetio $outomoticuotes y se iequieie inseitai expiesiones o ejecucion ue funciones ue la base ue uatos es necesaiio inuicai estos usanuo instancias ue la clase BbRowvolue.
public booleon upJote{strinq $toble, orroy $fielJs, orroy $volues, strinq $wbereClouse=null, booleon $outomoticuotes=folse) Peimite iealizai una actualizacion sin usai SQL uiiectamente. El SQL es geneiauo ue acueiuo al gestoi ielacional utilizauo. Notese que poi uefecto el mtouo espeia que los valoies a actualizai esten coiiectamente escapauos, el paimetio $outomoticuotes peimite que se agiegen comillas simples y se escapen los valoies usanuo la funcion oJJslocbes{).
public voiJ Jelete{strinq $toble, strinq $wbereConJition="") Peimite iealizai una eliminacion ue iegistios sin usai SQL uiiectamente. El SQL es geneiauo ue acueiuo al gestoi ielacional utilizauo.
/0#123.5 <#,3(>,8 "$, #3(1($,+(:$ -# -,%.7
<?php
$db = DbBase::rawConnect();
//Eliminar todos los registros de la tabla customer if($db->delete(customer)==true){ Flash::success(Se eliminaron correctamente todos los registros); }
//Eliminar usando condiciones if($db->delete(customer, status = Active)==true){ Flash::success(Se eliminaron correctamente los registros); }
public inteqer offecteJRows{Resource $resultuery=null) Bevuelve el numeio ue filas afectauas poi una opeiacion ue inseicion, actualizacion o boiiauo. El paimetio $iesultQueiy peimite cambiai el iecuiso uevuelto poi otia ejecucion uel mtouo query o exec.
$db = Db::rawConnect(); $db->query("DELETE FROM customer WHERE status = 'I'"); print "Filas borradas = ".$db->affectedRows(); 20.12 Administrar Transacciones public booleon beqin{) Peimite iniciai una tiansaccion en la conexion utilizaua.
public booleon rollbock{) Peimite anulai una tiansaccion en la conexion utilizaua.
public booleon commit{) Peimite hacei commit a una tiansaccion penuiente en la conexion actual.
public strinq for0pJote{strinq $sqluery) ueneia un SQL que efecta un bloqueo no-compaitiuo uel giupo ue iegistios seleccionauos.
public strinq sboreJlock{strinq $sqluery) ueneia un SQL que efecta un bloqueo compaitiuo uel giupo ue iegistios seleccionauos.
public voiJ setlsolotionlevel{int $isolotionlevel) Peimite establecei el nivel ue isolacion ue la conexion. Los niveles ue isolacion ueben estai uisponibles en el gestoi ielacional, consulte la uocumentacion si tiene uuuas ue ello. El valoi uel paimetio $isolotionlevel es alguna ue las constantes:
T,93,5 6#7+8(2+(:$ -# +.$7%,$%#7 -# $(M#3#7 -# Z7.3,+(:$ Y,3.8 4.198# 6#7+8(2+(:$ 1 IS0LATI0N_REAB_0NC0NNITEB Los SELECTs se ejecutan en un mouo ue no-bloqueo. 2 IS0LATI0N_REAB_C0NNITEB Las consultas se ejecutan un un mouo ue lectuias consistentes con no-bloqueo. S IS0LATI0N_REPEATABLE_REAB uestoies tiansaccionales noimalmente tiabajan sobie este mouo ue isolacion. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 182
4 IS0LATI0N_SERIALIZABLE Algunos gestoies ielacionales como 0iacle sopoitan nativamente este mouo, otios como NySQL convieiten touas las instiucciones SELECT en SELECT L0CK IN SBARE N0BE bloqueanuo el giupo ue iegistios obteniuos en una consulta a mouo-solo lectuia.
public booleon is0nJerTronsoction{) Peimite conocei si la conexion se encuentia bajo una tiansaccion activa.
public voiJ qetEoveAutoCommit{) Peimite conocei si la conexion tiene auto-commit o nivel ue isolacion REAB 0NC0NNITEB. 20.13 Crear, Cerrar y obtener informacin de conexiones public Bb rowConnect{booleon $newConnection=folse, booleon $renovote=folse) 0btiene un objeto conexion a la base ue uatos uel entoino actual con los paimetios estableciuos en el aichivo confiq,enviroment.ini. Este mtouo implementa el pation Sinqleton contiolanuo que solo una instancia ue la conexion se ciee caua vez que se hace el llamauo al mismo uesue cualquiei paite ue la aplicacion.
<?php
//Crear o obtener la ltima conexin creada $db = DbBase::rawConnect();
//Crear una nueva conexin sin cambiar la conexin del Singleton $db = DbBase::rawConnect(true);
//Crear una nueva conexin renovando la conexin del Singleton $db = DbBase::rawConnect(true, true);
public ResourceConnection connect{stJCloss $Jescriptor) Establece la conexion al gestoi ielacional.
public resource qetConnectionlJ{) 0btiene el iecuiso inteino ue bajo nivel con el que se iuentifica la conexion al gestoi ielacional.
public voiJ close{) Cieiia la conexion actual con el gestoi ielacional. Si la conexion es peisistente no se ceiiai.
public voiJ setReoJ0nly{booleon $reoJ0nly) Establece si la conexion sei ue solo lectuia. En este estauo se geneiai una excepcion cuanuo se tiate ue iealizai una inseicion, mouificacion o eliminacion ue uatos.
public voiJ isReoJ0nly{) Peimite sabei si la conexion es ue solo lectuia o no. 20.14 Informacin de Errores public strinq error{strinq $errorStrinq=, resource $resultuery=null) Bevuelve infoimacion uel ltimo eiioi geneiauo en el auaptauoi.
public inteqer noFrror{resource $resultuery=null) Bevuelve el nmeio uel ltimo eiioi geneiauo. 20.15 Obtener el valor de la columna identidad Algunos gestoies ielacionales sopoitan columnas iuentiuau, es uecii, que manejan un consecutivo auto-numiico paia uifeienciai univocamente caua iegistio en una tabla.
public inteqer lostlnsertlJ{strinq $toble=, strinq $iJentityIielJ="") 0btiene el ltimo valoi inseitauo en una columna iuentiuau. Algunos gestoies ielacionales no sopoitan este tipo ue columnas y poi ello es necesaiio obtenei el valoi buscanuo el mximo valoi inseitauo en el campo llave piimaiia.
public booleon tobleFxists{strinq $toble, strinq $scbemo="") Peimite consultai si una ielacion con el nombie $table existe en el schema ue la conexion LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 184
actual o el inuicauo usanuo el paimetio $schema. 20.16 Obtener informacin de Tablas public orroy qetIielJsIromToble{strinq $tobleNome) Este mtouo obtiene los campos ue una tabla en un vectoi. El vectoi pueue sei inuexauo numiicamente o asociativamente:
public strinq fielJNome{int $number, Resource $resultuery=null) 0btiene el nombie ue un campo en la posicion estableciua poi $numbei uel iesultauo $iesultQueiy.
public orroy listTobles{strinq $scbemoNome=) Bevuelve un aiiay con las tablas que hay en la schema actual o en el que se inuique en $schemaName. En algunos gestoies ielacionales tambin se uevuelven las vistas a las que tenga acceso el usuaiio ue la conexion activa.
public orroy JescribeToble{strinq $tobleNome=, strinq $scbemoNome=) Bevuelve un aiiay con la uesciipcion ue los campos ue una tabla junto con sus tipos ue uatos. 20.17 Crear y Eliminar Tablas public booleon creoteToble{strinq $tobleNome, orroy $Jefinition, orroy $inJex=orroy{), orroy $toble0ptions=orroy{)) Peimite cieai tablas fisicas o tempoiales en la conexion activa. El paimetio $Jefinition es un vectoi con la lista ue campos ue la tabla y sus atiibutos. El paimetio $inuex peimite inuicai inuices que se ueban cieai junto con la tabla y poi ltimo $table0ptions peimite inuicai opciones ue la tabla a cieai tales como el Fnqine en el caso ue NySQL, el chaiset o el tablespace en el caso ue 0iacle. Bevuelve un valoi booleano inuicanuo el xito ue la opeiacion.
Los tipos ue atiibutos con los que se pueue uesciibii un campo en la uefinicion ue las columnas es la siguiente:
B%8(9"%. 6#7+8(2+(:$ type El tipo ue uato que se almacenai en la columna, se pueue utilizai un stiing con el tipo ue uato o usai las constantes uel auaptauoi lo que es ms iecomenuable. notNull Inuica si la columna uebe peimitii nulos o no. piimaiy Inuica si el campo hace paite ue la llave piimaiia ue la tabla. auto Inuica si el campo es iuentiuau. Solo pueue habei un campo autonumiico en la tabla. size Tamao uel campo. scale Peimite establecei la escala uel campo. piecision Peimite establecei la piecision uel campo. uefault Peimite establecei el valoi poi uefecto ue la columna cuanuo se inseita un valoi nulo en ella.
public booleon JropToble{strinq $tobleNome, $ifFxists=folse) Elimina una tabla uel schema actual ue la conexion. El paimetio $ifFxists peimite establecei si se uebe compiobai que la tabla exista antes ue sei eliminaua lo que evita una excepcion geneiaua poi el gestoi ielacional. Bevuelve un valoi booleano inuicanuo el xito ue la opeiacion.
20.18 Fecha del gestor relacional public strinq qetBote0sinqIormot{strinq $Jote, strinq $formot="YYYY-HH-BB") Bevuelve la fecha uel gestoi ielacional en un ueteiminauo foimato.
public strinq qetCurrentBote{) 0btiene la fecha actual uesue el gestoi ielacional.
public strinq oJJuotes{strinq $volue) Agiega comillas especiales sopoitauas poi el gestoi ielacional a un valoi $value. 20.19 Debug, Seguimiento y Traza protecteJ voiJ loq{strinq $msq, int $type=loqqer::BFB06) Envia un valoi al log inteino uel objeto conexion. La vaiiable $type uebe tenei el valoi ue una ue las constantes uel componente loqqer.
protecteJ voiJ Jebuq{strinq $sqlStotement) Realiza un uebug ue la instiuccion SQL $sqlStatement envianuola a pantalla. ueneialmente no es usauo exteinamente y se invoca cuanuo la conexion se encuentia en mouo uebug.
public voiJ setBebuq{booleon $Jebuq) Peimite impiimii en pantalla las opeiaciones inteinas ue SQL geneiauas en el objeto.
public voiJ setTrocinq{booleon $trocinq) Establece si el objeto est en mouo tiaza o no.
public orroy qetTroceJSl{) Bevuelve un vectoi con las opeiaciones SQL ejecutauas en la conexion mientias se encontiaba en mouo tiaza.
public voiJ setloqqer{mixeJ $loqqer) Establece el nombie uel aichivo con el que se hai seguimiento a las opeiaciones SQL geneiauas en la conexion. Si se envia true como paimetio se cieai un log con la convencion JbYYYYHHBB.txt. Si se establece una instancia ue un auaptauoi ue loggei este es tomauo paia hacei el seguimiento.
21 Componente Active Record - ORM 21.1 Introduccin Nuchos ue los piocesos ciiticos uel softwaie en una empiesa estn ielacionauos con el funcionamiento, uesaiiollo y mantenimiento ue los uatos que iepiesentan la infoimacion, un activo muy valioso ue una oiganizacion. Los entoinos empiesaiiales actuales iequieien ue la integiacion continua ue iequeiimientos uauas las conuiciones ue un munuo cambiante y evolutivo. Las aplicaciones uesaiiollauas bajo un componente ue acceso a la infoimacion poco escalable o uemasiauo uepenuiente ue componentes y pioveeuoies tecnologicos, pueue llevai a que una oiganizacion pieiua clientes o uineio uebiuo a la imposibiliuau ue auaptaise ipiuamente a las necesiuaues iequeiiuas sin peiuei estabiliuau o iequiiienuo mayoi tiempo ue uesaiiollo e implementacion geneianuo sobie costos.
0n componente impoitante en Kumbio Fnterprise Iromework es el componente ActiveRecorJ. Este es el encaigauo ue iealizai el mapeo objeto-ielacional y ue encaigaise ue los mouelos en la aiquitectuia NvC ue las aplicaciones. El concepto ue 0RN se iefieie a una tcnica ue mapeai las ielaciones ue una base ue uatos a objetos nativos uel lenguaje utilizauo (PBP en este caso), ue tal foima que se pueua inteiactuai con ellos en foima ms natuial. Los objetivos ue este componente van ms all ue mapeai tablas y conveitiilas en clases (incluyenuo tipos ue uatos, constiaints, logica ue uominio, etc.) o ue conveitii iegistios en objetos. La iuea es ieuucii los uetalles ue la inteiaccion con las bases ue uatos en gian meuiua meuiante vaiias capas ue abstiaccion, incluyenuo ieuucii el uso ue SQL o liuiai con conexiones y sintaxis piogiamacional ue bajo nivel.
Al implementai el acceso a las bases ue uatos usanuo un 0RN se gana:
Inuepenuencia ue la base ue uatos utilizaua en gian meuiua, esto aumenta las caiacteiisticas comeiciales ue un softwaie ya que es posible cambiai ue RBBN con un menoi impacto sobie las ieas implicauas al uso e implementacion uel mismo. Reuuccion uel tamao uel couigo hacienuo ms simple el uso y entenuimiento a nivel ue uesaiiollo ue sistemas que utilicen bases ue uatos. La capa inteimeuia ue acceso a loas RBBNs piopoiciona un mtouo potente ue inteiceptacion ue cualquiei evento ielacionauo con las bases ue uatos, lo cual facilita la valiuacion ue la logica ue uominio, integiiuau ue uatos, uefinii niveles ue seguiiuau, LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 189
logging , auuitoiia ue sistemas, etc. El 0RN peimite auministiai las asociaciones ue las entiuaues uel mouelo incluso si el backenu ue almacenamiento es uistinto. ActiveRecoiu piopoiciona event hanuling en la capa inteimeuia, lo cual peimite notificai cambios en el mouelo ue foima unifoime y consistente.
La mayoi paite ue la implementacion ue ActiveRecorJ se basa en el pation ue uiseo uel tipo Boto Source Arcbitecturol uel mismo nombie. En conjunto con el almacenamiento ue meta- uatos y la auministiacion ue tiansacciones se iealizan los piocesos ue inteiaccion con bases ue uatos a ms alto nivel. 21.2 Cuando usar ActiveRecord ActiveRecorJ es un pation ue uiseo en los cual los uatos y la estiuctuia ue los mismos se encuentian asociauos en una misma clase. Los uatos geneialmente son peisistentes, es uecii que estn almacenauos en algn gestoi ielacional, aichivo o meuio fisico. La logica ue acceso a los uatos es fcilmente implementable usanuo ActiveRecoiu y auems la convieite en paite ue la logica ue uominio ue la aplicacion.
ActiveRecorJ es una buena opcion cuanuo la logica ue uominio no es muy compleja, es uecii se implementa un mouelo isomoifico, se usan ueiivaciones, colecciones o heiencia no-sencilla. Nouelos entiuau-ielacion con un uiseo consistente ayuuan a mejoiai la implementacion ue pation ue uiseo. 21.3 Entidades Las entiuaues son objetos peisistentes ligeios que noimalmente iepiesentan una tabla en una base ue uatos ielacional. El estauo peisistente ue una entiuau este iepiesentauo usanuo atiibutos peisistentes asociauos a los campos ue las tablas. Caua entiuau se implementa en un mouelo que es una clase en un aichivo en el uiiectoiio moJels,. PbOcOb <#^"#8(1(#$%.7 -# 3,7 I3,7#7 -# /$%(-,-#7 Las clases ueben tenei los siguientes iequeiimientos:
Caua aichivo uebe tenei el nombie ue la tabla y la extension .php Bebe habei una entiuau poi aichivo La clase uebe sei subclase (heieuai) ue la clase ActiveRecorJ LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 19u
La clase no uebe tenei constiuctoies La clases que iepiesenten entiuaues finales no uebe sei abstiacta
PbOcOP B%8(9"%.7 -# 3,7 /$%(-,-#7 Bebiuo a que PBP es un lenguaje con tipificacion uinmica los atiibutos ue las clases entiuau no iepiesentan el tipo ue uato ieal uel campo en la base ue uatos. Con objetivos funcionales los getteis ue algunos campos ciean objetos asociauos al tipo ue uato ieal, poi ejemplo, los campos tipo fecha uevuelven un objeto ue la clase Bote con el valoi uel campo.
Es posible agiegai casting al valoi ue caua objeto usanuo la opcion uel sciipt que ciea mouelos asi:
21.4 Atributos y Campos persistentes La implementacion ue los atiibutos ue las entiuaues en las clases se pueue iealizai estticamente o uinmicamente uepenuienuo ue los iequeiimientos ue la aplicacion. En geneial una implementacion esttica piopenue poi mejoies piacticas ue uesaiiollo y softwaie ms seguio.
En la foima esttica se uefinen los campos ue la tabla como atiibutos piotegiuos ue la clase. Esto peimite encapsulai el estauo inteino ue caua piopieuau y evitai que sea cambiaua poi LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 191
equivocacion o a pioposito en logica ue la aplicacion. En estos casos tambin es necesaiio implementai mtouos getset paia pouei obteneiestablecei el valoi ue los atiibutos. Los mtouos ue ActiveRecorJ isAttribute{$property), writeAttribute{$property, $volue) y reoJAttribute{$property) peimiten uinmicamente conocei si existe un atiibuto, obtenei y uevolvei su valoi en foima pblica. Poi ejemplo isNome{), qetNome{) y setNome{) es una implementacion esttica paia el atiibuto 'name' ue una entiuau Customer.
La foima geneial en la que los getteissetteis ueben sei implementauos es la siguiente:
public function getProperty(); public function setProperty($valueOfProperty);
El mtouo piotegiuo setTiasient($attiibute) peimite establecei que campos ue la entiuau no ueben sei peisistiuos. Las opeiaciones ue inseicion y actualizacion omiten los atiibutos maicauos como Tiasient.
protected function initialize(){ $this->setTransient(user_code); }
Cuanuo los campos se mapean uinmicamente su visibiliuau queua estableciua como pblica poi uefecto. 21.5 Llaves Primarias ueneialmente ue entiuaues tienen una llave piimaiia que peimite iuentificai un iegistio en foima nica. Kumbio Fnterprise Iromework lee los meta-uatos ue la tabla mapeaua uiiectamente uel gestoi ielacional e iuentifica la llave piimaiia con sus caiacteiisticas: simples, compuestas yo auto-numiicas.
El tipo ue uato ue llaves piimaiias uebe sei un tipo ue uato integial, en geneial se uebe evitai el uso ue campos con tipo ue uato flotante, uecimal o Noney, ya que pueuen vaiiai ligeiamente y no ofiecen seguiiuau en que un iegistio sea univoco.
Los accesoies (mtouos get) ue los atiibutos que peitenezcan a una llave piimaiia compuesta o simple ueben sei touos pblicos. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 192
21.6 Convenciones en llaves primarias Kumbio Fnterprise Iromework sopoita convencion en llave piimaiia, paia esto uebe tenei los siguientes iequisitos:
El campo uebe llamaise 'iu' El campo uebe estai maicauo como llave piimaiia en el gestoi ielacional El campo uebe sei enteio piefeiiblemente unsigneu (sin signo) El campo uebe sei una columna iuentiuau osea sei autonumiico (BB2, NySQL, Sybase, Niciosoft SQL Seivei) o estai asociauo a una secuencia (0iacle, BB2, PostgieSQL, Inteibase)
El uso ue esta convencion ieuuce la complejiuau ue la aplicacion y ieuuce la couificacion ya que muchos aspectos el fiamewoik pueue asumii esto. 21.7 Fechas Auto-Asignables ActiveRecorJ sopoita fechas auto-asignables meuiante convencion meuiante lo cual se pueue iealizai veisionamiento concuiiente optimista o simplemente llevai un iegistio ue fechas ue cieacion y mouificacion ue iegistios.
Las convenciones paia fechas auto-asignables son las siguientes:
! Paia que un campo tome automticamente la fecha uel sistema en la opeiacion ue inseitai este uebe tenei el sufijo "_at" y peimitii valoies nulos. ! Paia que un campo tome automticamente la fecha uel sistema en la opeiacion ue actualizai este uebe tenei el sufijo "_in" y peimitii valoies nulos. 21.8 Multiplicidad en Relaciones de Entidades Existen cuatio tipos ue multipliciuau en ielaciones: una-a-una, una-a-muchos, muchos-a-una y muchos-a-muchos. La multipliciuau pueue sei uniuiieccional o biuiieccional y caua una pueue sei simple o meuiante combinacion ue tablas. El tipo ue ielaciones establece como se lleva a peisistencia una instancia ue una entiuau. Noimalmente el gestoi ielacional auministia constiaints ue llave foinea coiiesponuientes a estas ielaciones, la uefinicion ue estos ayuua a que la integiiuau ue uatos sea confiable y las ielaciones uefiniuas obtengan los iesultauos espeiauos. A tiavs ue la implementacion ue las ielaciones es posible acceuei a los iegistios LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 19S
ielacionauos a caua iegistio ue foima unifoime ahoiianuo couigo. PbO`Ob I.$M#$+(.$#7 #$ <#3,+(.$#7 Los nombies ue campos ue las entiuaues con cieitas convenciones peimiten que se establezcan automticamente los campos iefeiencias y se automaticen taieas ue couificacion meuiante una estiuctuia nemotcnica:
Paia especificai un campo que es llave foinea a otia ielacion se utiliza el nombie ue campo "nombie_tabla_iu" La tabla iefeienciaua uebe tenei un campo iuentiuau que sea llave piimaiia con nombie "iu". Si es posible, los campos ielacionauos ueben tenei el mismo tipo ue uato.
PbO`OP <#3,+(.$#7 ;$(-(8#++(.$,3#7 Las ielaciones uniuiieccionales son aquellas que se geneian ue una ielacion a otia peio no viceveisa. Neuiante los mtouos belonqsTo, bosHony o bos0ne se establece que uno o mas campos hacen iefeiencia a otios equivalentes en otia entiuau. PbO`Oc <#3,+(.$#7 k(-(8#++(.$,3#7 Las ielaciones biuiieccionales establecen asociaciones en las que caua una ue ellas tiene una viceveisa complementaiia. PbO`Od @"+C.7 , "$. La asociacion uniuiieccional muchos-a-uno es la ms comn ue touas. Paia establecei una ielacion ue este tipo se utiliza el mtouo piotegiuo ue ActiveRecoiu belongsTo:
El mouelo ue ciuuaues con una ielacion muchos-a-uno se implementa asi:
<?php
class City extends ActiveRecord {
protected function initialize(){ $this->belongsTo(country_code, country, code); }
}
El piimei paimetio ue belonqsTo inuica el campo ue la entiuau que hace la asociacion, el segunuo inuica el nombie ue la entiuau iefeienciaua y el teiceio el nombie uel campo en la entiuau iefeienciaua. La asociacion una vez uefiniua se pueue utilizai asi:
0n gettei con el nombie ue la ielacion 'Country' peimite obtenei el iegistio asociauo al pais en la ciuuau consultaua.
<#3,+(.$,-, +.$ M,8(.7 +,12.75 El siguiente ejemplo implementa una ielacion muchos a uno con 2 campos iefeiencia, en este caso los nombies ue los campos son iguales en ambas tablas si fuesen uifeientes se pouiian uefinii en el teicei paimetio ue belonqsTo.
0n gettei con el nombie ue la ielacion peimite obtenei el iegistio asociauo al cliente en el vuelo consultauo. PbO`ON ;$. , @"+C.7 La asociacion uniuiieccional uno-a-muchos inuica que paia caua iegistio ue una entiuau existen uno o ms iegistios asociauo en la entiuau iefeienciaua. Paia establecei una ielacion ue este tipo se utiliza el mtouo piotegiuo ue ActiveRecorJ bosHony. PbO`Oe ;$. , ;$. La asociacion uniuiieccional uno-a-uno es la ms inusual ue touas. Inuica que paia caua iegistio ue una entiuau existe solo uno asociauo en la entiuau iefeienciaua. Paia establecei una ielacion ue este tipo se utiliza el mtouo piotegiuo ue ActiveRecorJ bos0ne. PbO`Oa @"+C.7 , @"+C.7 FALTA 21.9 API de ActiveRecord A continuacion se piesenta una iefeiencia ue los piincipales mtouos ue la clase ActiveRecorJ. PbOiOb [8()#$ -# 6,%.7 public voiJ setSource{$source) LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 196
Peimite establecei la entiuau uel gestoi ue uonue se mapeaian los atiibutos uel mouelo.
public strinq qetSource{) Bevuelve el nombie ue la entiuau usaua inteinamente paia mapeai los atiibutos uel mouelo.
public voiJ setScbemo{strinq $scbemo) Establece el nombie uel $schema en uonue se encuentia la tabla uonue se mapeaian los uatos.
public voiJ setConnection{Bb $connection) Peimite establecei un objeto Bb uinmicamente sobiesciibienuo la conexion actual uel mouelo.
public BbBose qetConnection{) 0btiene el objeto Bb utilizauo paia iealizai las opeiaciones a bajo nivel con el gestoi ielacional. PbOiOP Y.3+,-. -# @#%,A6,%.7 public booleon isBumpeJ{) Inuica si ya se han obteniuo los meta-uatos uel gestoi ielacional en el objeto.
public voiJ JumpHoJel{) Foiza al mouelo a obtenei los meta-uatos uel gestoi ielacional.
protecteJ booleon Jump{) 0btiene los meta-uatos uel gestoi ielacional. Si ya se han obteniuo no se vuelven a consultai
public voiJ resetHetoBoto{) Elimina los meta-uatos obteniuos uel gestoi-ielacional caiganuolos nuevamente. PbOiOc 6#9") \ '#)"(1(#$%. public voiJ setBebuq{booleon $Jebuq) Establece si el mouelo esta en mouo uebug. Touas las opeiaciones inteinas ue la conexion activa se visualizan como Ilosb::notices en la saliua al navegauoi.
Establece el mouelo en mouo uebug. Touas las opeiaciones inteinas ue la conexion asociaua al mouelo son almacenauas en un aichivo con nombie $loqqer. Si el piimei paimetio es true se utiliza la convencion ubYYYYNNBB.txt
//Grabar todas las operaciones SQL internas a un archivo en logs/customersDebug.txt $this->Employees->setLogger(customersDebug.txt);
Tambin es posible pasai una instancia ue loggei utilizanuo cualquiei auaptauoi uisponible utilizanuo como paimetio el objeto cieauo:
$logger = new Logger(Compressed, log.employees.txt.gz); $logger->setPath(/usr/local/log/); $this->Employees->setLogger($logger);
El uesaiiollauoi tambin pueue pasai una instancia ue un objeto que implemente un mtouo log como paimetio e implementai opeiaciones peisonalizauas meuiante l.
$myLog = new MyUserLog(); $this->Employees->setLogger($myLog);
public strinq inspect{) 0btiene una cauena ue inspeccion con los valoies inteinos ue caua atiibuto ue la entiuau.
PbOiOd T8,$7,++(.$#7 public voiJ setTronsoction{ActiveRecorJTronsoction $tronsoction) Establece la tiansaccion utilizaua paia efectuai las opeiaciones en el mouelo. La tiansaccion uebe habeise inicializauo antes ue asignaila al objeto o geneiai una excepcion ActiveRecorJFxception. PbOiON I.$7"3%,8 8#)(7%8.7 public ActiveRecorJResulset finJAllBySql{strinq $sqluery) Peimite iealizai una consulta en el mouelo usanuo lenguaje ue consulta SQL. Los valoies obteniuos son uevueltos como instancias ue la clase.
public ActiveRecorJResulset finJBySql{strinq $sqluery) Peimite iealizai una consulta en el mouelo que uevuelve un solo iegistio usanuo lenguaje ue consulta SQL. Los valoies obteniuos son uevueltos como instancias ue la clase.
//Obtener los empleados con una condicin en un subselect $empoyees = $this->Employees->findBySql(SELECT employees.* FROM employees WHERE id NOT IN (SELECT employees_id FROM historical_data WHERE period = 2005-02);
public BbResource sql{strinq $sqluery) Peimite iealizai una consulta usanuo lenguaje SQL. El cuisoi ue bajo nivel es uevuelto uiiectamente.
public ActiveRecorJ finJIirst{mixeJ $poroms) Peimite iealizai una bsqueua ue iegistios que uevuelve un solo iegistio o el piimeio que coinciua con las conuiciones inuicauas. Los paimetios ue consulta se establecen usanuo paimetios poi nombie.
//Obtener el primer empleado que se almacen en la entidad $employee = $this->Employees->findFirst();
//Obtener el primer usuario cuyo login sea j.smith $user = $this->Users->findFirst(login = j.smith);
//Obtener el ultimo producto cuyo precio sea menor a 100 y este activo $user = $this->Products->findFirst(price < 100 AND status = Active, order: price DESC);
public ActiveRecorJResulset finJ{mixeJ $poroms) Peimite iealizai una bsqueua ue iegistios que uevuelve touos los que coinciuan con las conuiciones inuicauas.
//Obtener todos los registros de una entidad $employees = $this->Employees->find();
//Obtener todos los registros que cumplan con una condicin $employees = $this->Employees->find(status = Active); LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 199
//Obtener todos los registros que cumplan una condicin y aplicndoles un ordenamiento $employees = $this->Employees->find(status = Active, order: name desc);
//Obtener todos los registros y aplicarles un ordenamiento $employees = $this->Employees->find(order: name);
//Obtener los 20 primeros registros que cumplan con unas condiciones $employees = $this->Employees->find(agreement_date >= 2008-12-31 AND status=Active, limit: 20);
public ActiveRecorJResulset finJIor0pJote{$poroms) Peimite iealizai una bsqueua ue iegistios que uevuelve touos los que coinciuan con las conuiciones inuicauas. Los iegistios encontiauos son bloqueauos en mouo no compaitiuo poi lo que otias sesiones ue aplicacion que tiaten ue leeiesciibii estos iegistios iesultaian en una espeia.
class OrdersController extends ApplicationController {
public function increaseQuantityAction(){ try { $transaction = new ActiveRecordTransaction(true); $this->Products->setTransaction($transaction); foreach($this->Products->findForUpdate(quantity<100) as $product){ $product->setQuantity($product->getMinStock()*2); if($product->save()==false){ $transaction->rollback(); } } } catch(TransactionFailed $e) { Flash::error($e->getMessage()); } } }
public ActiveRecorJResulset finJWitbSboreJlock{$poroms) Peimite iealizai una bsqueua ue iegistios que uevuelve touos los que coinciuan con las conuiciones inuicauas. Los iegistios encontiauos son bloqueauos en mouo no compaitiuo poi lo que otias sesiones ue aplicacion que tiaten ue esciibii en estos iegistios iesultaian en una espeia poi paite uel gestoi ielacional.
public strinq convertPoromsToSql{mixeJ $poroms) Ciea una consulta ue SQL meuiante los paimetios poi nombie inuicauos.
public orroy Jistinct{mixeJ $poroms) Realiza una sentencia BISTINCT sobie una columna uel mouelo uevolvienuo un listauo ue los valoies uifeientes encontiauos.
public booleon exists{strinq $wberePk)
public ActiveRecorJResultset finJAllBy{strinq $fielJ, mixeJ $volue)
public stotic orroy sinqleSelect{strinq $sql) Realiza una consulta SQL sobie el gestoi ielacional en la tabla 'uual' en el caso ue 0iacle o solo hace la instiuccion SELECT sobie ninguna entiuau en otios motoies. PbOiOe I.$%,8 8#)(7%8.7 public inteqer count{mixeJ $poroms) Bevuelve un conteo ue iegistios a paitii ue las conuiciones inuicauas. Los paimetios pueuen sei estableciuos usanuo paimetios poi nombie o un aiiay cuyos inuices inuiquen el tipo ue paimtio a establecei. El paimetio especial qroup mouifica el iesultauo obteniuo agiupanuolo meuiante otios atiibutos ue la entiuau.
//Cuantos productos tienen categoria 1 $this->Products->count("categories_id = 1");
//Contar productos por categoria foreach($this->Products->count("group: categories_id") as $result){ print $result->categories_id." ".$result->rowcount; }
// Contar productos por categoria, mostrar aquellas categorias que tienen mas de // 10 productos $resultset =$this->Products->count("group: categories_id", having: rowcount>10); foreach($resultset as $result){ print $result->categories_id." ".$result->rowcount; }
public mixeJ countBySql{strinq $sqluery) Realiza un conteo en el mouelo meuiante una sentencia SQL. PbOiOa K8.1#-(,8 8#)(7%8.7 public Jouble overoqe{$poroms) LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2u1
Bevuelve un piomeuio ue los valoies ue una columna numiica a paitii ue las conuiciones inuicauas. El paimetio especial qroup mouifica el iesultauo obteniuo agiupnuolo meuiante otios atiibutos ue la entiuau.
//En promedio, cual es el precio de un producto $this->Products->average(price);
//En promedio, cual es el precio de un producto activo $this->Products->average(price, conditions: status=Active);
//Promedio de precios por categoria $averages = $this->Products->average(price, group: categories_id); foreach($averages as $result){ print $result->categories_id." ".$result->average.\n; }
PbOiO` <#,3(>,8 7"1,%.8(,7 public Jouble sum{$poroms) Este mtouo peimite iealizai sumatoiias ue los atiibutos ue la entiuau. El paimetio especial qroup mouifica el iesultauo obteniuo agiupanuolo meuiante otios atiibutos ue la entiuau.
//Cuanto suman los impuestos en las ordenes de compra? $this->Orders->sum(taxes);
//Cuanto suman los impuestos del ao 2007? $this->Orders->sum(taxes, conditions: year = 2007);
//Cuanto suman las cantidades en las ordenes de compra por cada cliente $summatories = $this->Orders->sum(quantity, group: customers_id); foreach($summatories as $result){ print $result->categories_id." ".$result->summatory.\n; }
//Cuanto suman las cantidades en las ordenes de compra por cada cliente, cuya //cantidad sea superior a 100 unidades $summatories = $this->Orders->sum(quantity, group: customers_id, having: summatory>100); foreach($summatories as $result){ print $result->categories_id." ".$result->summatory.\n; }
PbOiOi [9%#$#8 #3 M,3.8 1UH(1. -# "$ ,%8(9"%. public mixeJ moximum{$poroms) Bevuelve un valoi mximo ue una columna numiica a paitii ue las conuiciones inuicauas. El paimetio especial qroup mouifica el iesultauo obteniuo agiupanuolo meuiante otios LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2u2
//Quien es el empleado ms antiguo? $this->Employees->maximum(contract_date, conditions: status=Active); PbOiObQ [9%#$#8 #3 M,3.8 1=$(1. -# "$ ,%8(9"%. public mixeJ minimum{$poroms) Bevuelve un valoi minimo ue una columna numiica a paitii ue las conuiciones inuicauas. El paimetio especial qroup mouifica el iesultauo obteniuo agiupanuolo meuiante otios atiibutos ue la entiuau.
//Quien es el empleado ms nuevo? $this->Employees->minimum(contract_date, conditions: status=Active);
PbOiObb B7()$,8 M,3.8#7 , ($7%,$+(,7 public ActiveRecorJ JumpResult{orroy $result) Toma un vectoi cuyos inuices coinciuen con los nombies ue los atiibutos uel mouelo y los asigna uevolvienuo un objeto copia ue este con los valoies asignauos. Si algn inuice no coiiesponue a un atiibuto uel mouelo se geneia una excepcion.
public voiJ JumpResultSelf{orroy $result) Toma un vectoi cuyos inuices coinciuen con los nombies ue los atiibutos uel mouelo y los asigna al mismo objeto. Si algn inuice no coiiesponue a un atiibuto uel mouelo se geneia una excepcion. PbOiObP Y,3(-,+(:$ public orroy qetHessoqes{) 0btiene los mensajes ue valiuacion geneiauos en un pioceso ue inseicion o actualizacion.
public voiJ oppenJHessoqe{ActiveRecorJHessoqe $messoqe) Agiega un mensaje al buffei ue mensajes ue valiuacion uel mouelo. PbOiObc Z$*.81,+(:$ -# ,%8(9"%.7 public orroy qetAttributes{) LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2uS
0btiene un vectoi con los nombies ue los atiibutos ue la entiuau.
public orroy qetAttributesNomes{) 0btiene un vectoi con los nombies ue los atiibutos ue la entiuau. Es un alias ue getAttiibutes().
public booleon bosIielJ{$strinq fielJ) Peimite consultai si una entiuau tiene un ueteiminauo campo $fielu.
public orroy qetPrimoryKeyAttributes{) 0btiene un vectoi con los nombies ue los atiibutos ue la entiuau que son llave piimaiia.
public orroy qetNonPrimoryKeyAttributes{) 0btiene un vectoi con los nombies ue los atiibutos ue la entiuau que no son llave piimaiia.
public orroy qetNotNullAttributes{) 0btiene un vectoi con los nombies ue los atiibutos ue la entiuau que no aceptan valoies nulos.
public orroy qetBotesAtAttributes{) 0btiene un vectoi con los nombies ue los atiibutos ue la entiuau que auto-asignan la fecha actual cuanuo se iealiza una opeiacion ue inseicion.
public orroy qetBoteslnAttributes{) 0btiene un vectoi con los nombies ue los atiibutos ue la entiuau que auto-asignan la fecha actual cuanuo se iealiza una opeiacion ue mouificacion.
public booleon isANumericType{strinq $fielJ) Peimite consultai si un atiibuto en la tabla tiene un tipo ue uato nmeiico (int, integei, float, numbei, bigint, Noney, etc).
PbOiObd I8#,+(:$ \ ,+%",3(>,+(:$ -# 8#)(7%8.7 public booleon creote{orroy $volues=orroy{))
public booleon sove{) Este mtouo peimite cieaiactualizai iegistios ue acueiuo a si estos ya existen en la entiuau asociaua a un mouelo. El mtouo save es llamauo tambin inteinamente poi los mtouos creote y upJote ue ActiveRecorJ. Paia que este mtouo funcione como se espeia es necesaiio que se haya uefiniuo una llave piimaiia coiiectamente en la entiuau paia pouei ueteiminai si un iegistio uebe sei actualizauo o cieauo.
El mtouo save() ejecuta los valiuauoies asociauos, llaves piimaiias viituales y eventos que se hayan uefiniuo en el mouelo. El geneiauoi ue iuentificauoies asociauo tambin es ejecutauo y al teiminai el pioceso el objeto se iefiesca con los valoies finales que queuaion en la base ue uatos.
$product = new Products(); $product->setName('Potattos'); $product->setType('Food'); if($product->save()==false){ foreach($product->getMessages() as $message){ Flash::error($message->getMessage()); } }
El ejecutaise save(), este uevuelve un valoi booleano inuicanuo el xito ue la opeiacion. En el ejemplo anteiioi se obtienen y muestian los mensajes ue valiuacion en pantalla cuanuo save() uevuelve false. PbOiObN /3(1($,+(:$ -# 8#)(7%8.7 public booleon Jelete{$poroms) Elimina el iegistio activo asociauo al objeto ActiveRecoiu. PbOiObe [2#8,+(.$#7 #$ k,%+C public booleon upJoteAll{$volues)
PbOiOba E#+%"8,J#7+8(%"8, -# B%8(9"%.7 public mixeJ reoJAttribute{strinq $ottribute) 0btiene el valoi ue un atiibuto uel mouelo apaitii ue su nombie. Este mtouo lee el valoi inuepenuiente ue la visibiliuau ue la piopieuau en la clase.
public mixeJ writeAttribute{strinq $ottribute, mixeJ $volue) Asigna un valoi a un atiibuto uel mouelo apaitii ue su nombie. Este mtouo esciibe el valoi inuepenuiente ue la visibiliuau ue la piopieuau en la clase. PbOiOb` Y,3(-,+(:$ protecteJ voiJ voliJote{strinq $voliJotorCloss, orroy $options) Agiega un valiuauoi a un mouelo. Consulte el capitulo ue valiuauoies ue integiiuau paia apienuei ms sobie este mtouo.
public booleon voliJotionEosIoileJ{) Este mtouo pueue sei usauo uentio ue un evento ue valiuacion paia inuicai si el pioceso ue completo ue valiuacion ha fallauo. Consulte el capitulo ue valiuauoies ue integiiuau paia apienuei ms sobie este mtouo. PbOiObi @"3%(23(+(-,- -# 8#3,+(.$#7 protecteJ voiJ bos0ne{mixeJ $fielJs, strinq $referenceToble, mixeJ $referenceJIielJs) Ciea una ielacion 1 a 1 con otia entiuau piesente en el auministiauoi ue entiuaues. El piimei paimetio especifica el atiibuto o atiibutos en la entiuau local y $iefeienceuFielus el atiibuto o atiibutos en la tabla iefeienciaua. El paimetio $iefeienceTable inuica la tabla iefeienciaua.
//Relacin de un campo a otro por convencin $this->hasOne(tabla_id);
//Relacin de un campo a otro $this->hasOne(campo, tabla_referenciada, campo_referenciado);
//Relacin de varios campos a varios campos $this->hasOne( array(campo1, campo2), tabla_referenciada, array(campo_referenciado1, campo_referenciado2) );
Ciea una ielacion 1 a 1 inveisa con otia entiuau piesente en el auministiauoi ue entiuaues. El piimei paimetio especifica el atiibuto o atiibutos en la entiuau local y $iefeienceuFielus el atiibuto o atiibutos en la tabla iefeienciaua. El paimetio $iefeienceTable inuica la tabla iefeienciaua.
//Relacin de un campo a otro por convencin $this->belongsTo(tabla_id);
//Relacin de un campo a otro $this->belongsTo(campo, tabla_referenciada, campo_referenciado);
//Relacin de varios campos a varios campos $this->belongsTo( array(campo1, campo2), tabla_referenciada, array(campo_referenciado1, campo_referenciado2) );
protecteJ voiJ bosHony{mixeJ $fielJs, strinq $referenceToble, mixeJ $referenceJIielJs) Ciea una ielacion 1 a n con otia entiuau piesente en el auministiauoi ue entiuaues. El piimei paimetio especifica el atiibuto o atiibutos en la entiuau local y $iefeienceuFielus el atiibuto o atiibutos en la tabla iefeienciaua. El paimetio $iefeienceTable inuica la tabla iefeienciaua.
//Relacin de un campo a otro por convencin $this->hasMany(tabla_id);
//Relacin de un campo a otro $this->hasMany(campo, tabla_referenciada, campo_referenciado);
//Relacin de varios campos a varios campos $this->hasMany( array(campo1, campo2), tabla_referenciada, array(campo_referenciado1, campo_referenciado2) );
piotecteu voiu hasAnuBelongsToNany(mixeJ $fielJs, strinq $referenceToble, strinq $qoteToble, mixeJ $referenceJIielJs) Ciea una ielacion n a m inveisa con otia entiuau piesente en el auministiauoi ue entiuaues. El piimei paimetio especifica el atiibuto o atiibutos en la entiuau local y $referenceJIielJs el atiibuto o atiibutos en la tabla iefeienciaua. El paimetio $referenceToble inuica la tabla LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2u7
iefeienciaua y $qoteToble la tabla puente paia acceuei a la tabla iefeienciaua. PbOiOPQ L#8#$+(, public voiJ porent0f{strinq $porent) Establece una ielacion ue heiencia que utiliza una estiategia ue tabla poi subclase meuiante un uisciiminauoi. El paimetio $paient inuica la entiuau pauie. PbOiOPb /H+#2+(.$#7 protecteJ voiJ exceptions{$e) Al ieesciibii este mtouo es posible tiatai las excepciones geneiauas uentio ue un mouelo antes que sean lanzauas a otias paites ue la aplicacion. 21.10 Identifiers Las clases mapeauas con ActiveRecorJ que pietenuan efectuai opeiaciones ue manipulacion ue uatos ueben ueclaiai llaves piimaiias. Poi uefecto se utilizan estiategias paia obtenei el valoi ue estas al hacei una inseicion.
Los tipos ue iuentificauoies sopoitauos son:
T,93,5 T(2.7 -# )#$#8,-.8#7 7.2.8%,-.7
T(2. 6#7+8(2+(:$ Inciement ueneia iuentificauoies ue tipo integei, que son nicos solo cuanuo otios piocesos no geneiai opeiaciones ue inseicion concuiientes. Esta opcion no uebeiia sei usaua en clusteies. Iuentity No iealiza ninguna opeiacion en especial ya que apiovecha una columna iuentiuau piesente en la entiuau. Este tipo ue columnas son sopoitauas poi NySQL, IBN BB2, Niciosoft SQL Seivei, IBN Infoimix y SQLite. Sequence 0btiene el valoi ue un objeto uel gestoi ielacional llamauo secuencias. Las secuencias son sopoitauas poi 0iacle, PostgieSQL e IBN BB2. Bilo 0tiliza un algoiitmo tipo hilo paia eficientemente geneiai los valoies nicos ue tipo inteqer. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2u8
00IB ueneia iuentificauoies unicos ue 128bits tipo stiing basauos en el algoiitmo 00IB (0niveisal 0nique Iuentifiei. Assigneu No aplica ninguna estiategia y utiliza el valoi asignauo uiiectamente al objeto instancia uel mouelo. 0niqiu Peimite obtenei iuentificauoies nicos ue 128bits usanuo la funcion ue PBP llamaua uniqiJ.
PbObQOb /7%,93#+#8 #3 j#$#8,-.8 Paia establecei este tipo ue iuentificauoies se uebe usai el mtouo piotegiuo ue ActiveRecorJ llamauo setlJ6enerotor. El piimei paimetio inuica que tipo ue geneiauoi se usai y el segunuo peimite establecei las opciones uel geneiauoi. PbObQOP B3).8(%1. L(JE. El geneiauoi BiLo peimite obtenei el valoi que ueba se utilizauo como llave piimaiia ue un campo en otia entiuau en foima eficiente. En una tiansaccion al obtenei el valoi uel iuenticauoi se efecta (si se sopoita) un bloqueo poi fila en el iegistio paia aseguiaise que ningn otio pioceso obtenga el mismo valoi.
public function initialize(){ $this->setIdGenerator("Hilo", code, array( "table" => "invoces_data", "column" => "consecutive", "max_lo" => 100 )); }
}
La opcion max_lo inuica el valoi minimo que uebe tomai el consecutivo.
T,93,5 K,8U1#%8.7 -#3 )#$#8,-.8 L(JE.
T(2. 6#7+8(2+(:$ table Table uonue se encuentia el consecutivo columna Columna que lleva el consecutivo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2u9
souice Es opcional. Peimite establecei que la tabla se encuentia en otio schema. max_lo Es opcional. Peimite contiolai el minimo valoi que uebe almacenai la columna. numbei Es opcional. Inuica cuantos consecutivos se ueben geneiai paia aumentai la eficiencia.
0no ue los objetivos uel algoiitmo BiLo es aumentai la eficiencia meuiante la ieuuccion ue la lectuiaesciituia ue la tabla consecutivo. Esto solo es posible cuanuo la opeiacion se encuentia en meuio ue una tiansaccion auministiaua poi el TronsoctionHonoqer. PbObQOc B3).8(%1. ;;Z6 El algoiitmo 00IB geneia iuentificauoies nicos que pueuen sei usauos como llave piimaiia meuiante el algoiitmo uel mismo nombie. El sistemas 0NIX utiliza uevuianuom paia geneiai el iuentificauoi.
public function initialize(){ $this->setIdGenerator("Uuid", id); }
} PbObQOd j#$#8,-.8 ;$(^Z- El geneiauoi 0niqiu geneia iuentificauoies nicos apaitii ue la funcion 0niqiu ue PBP. El valoi geneiauo es un stiing ue S2 caiacteies (un nmeio hexauecimal ue 128 bits) que es muy uificil ue iepetii.
public function initialize(){ $this->setIdGenerator("Uniqid", id); }
}
PbObQON j#$#8,-.8 4,%(M# El geneiauoi "Native" uebe usaise en aquellos casos en los que el valoi ue la columna iuentiuau son asignauos poi un tiiggei en la tabla y que toma el valoi ue una secuencia. En estos casos ActiveRecorJ no asignai ningn valoi en la sentencia INSERT cieaua iespetanuo el consecutivo ue la secuencia aunque si consultai su valoi paia actualizai el estauo uel objeto.
El geneiauoi "Native" uebe estableceise ue la siguiente foima:
public function sequenceName(){ return ORDERS_SEQ; }
public function initialize(){ $this->setIdGenerator("Native", id); }
}
PbObQOe I.3"1$,7 Z-#$%(-,- \ '#+"#$+(,7 Paia bases ue uatos que sopoiten columnas iuentiuau el geneiauoi asigna el valoi auecuauo paia que se geneie valoi autonumiico en la columna auecuaua. En estos casos el geneiauoi lJentity se pueue usai con motoies como IBN BB2, NySQL y Niciosoft SQL Seivei.
Paia los motoies que sopoitan secuencias como 0iacle, PostgieSQL e IBN BB2 se uebe utilizai el geneiauoi "Sequence" o "Native". El geneiauoi "Sequence" se uebe establecei cuanuo no existan tiiggeis que asignen el valoi ue la columna en la tabla ya que esto hai que se alteie el consecutivo innecesaiiamente.
public function initialize(){ $this->setIdGenerator("Sequence", id, array( name => ORDERS_ID )); }
}
El nombie ue la secuencia tambin pueue sei estableciuo meuiante el mtouo pblico sequenceNome tanto paia los mouelos con geneiauoies como los que tienen iuentificauoi poi convencion:
public function sequenceName(){ return ORDERS_ID_SEQ; }
public function initialize(){ $this->setIdGenerator("Sequence", id); }
} 21.11 Convenciones en Identificadores ActiveRecorJ pueue automticamente establecei el tipo ue geneiauoi a lJentity si en los meta- uatos ue la entiuau encuentia que existe una columna iuentiuau. Igualmente si el campo se llama explicitamente 'iu' igualmente se entenuei la convencion que se tiata ue un campo iuentiuau geneiauo poi el gestoi ielacional o meuiante el geneiauoi Inciement.
Requisitos paia utilizai la convencion en iuentificauoies:
El campo uebe llamaise "iu" El campo uebe tenei un tipo ue uato enteino (bigint, int, integei, numbei) El campo uebe sei la llave piimaiia ue la tabla El campo uebe sei no nulo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 212
21.12 Los Meta-datos en ActiveRecordMetadata uian paite ue la ciencia en la implementacion ue ActiveRecorJ esta ielacionaua con la auministiacion ue los metauatos ue las tablas mapeauas. El almacenamiento ue sus caiacteiisticas es punto funuamental paia la utilizacion ue los mtouos que consultan, boiian, mouifican, almacenan, etc. El subcomponente ActiveRecorJHetoJoto implementa el pation HetoJoto Hoppinq el cual peimite cieai un uata map poi schema sobie la infoimacion ue las tablas y asi ieuucii el consumo ue memoiia poi objeto ActiveRecorJ y consoliuai una base ue uatos in-memoiy ue las caiacteiisticas ue caua entiuau utilizaua en la aplicacion.
Noimalmente los meta-uatos son esciitos manualmente poi el uesaiiollauoi peio Kumbio Fnterprise los toma uiiectamente uel gestoi ielacional, con esto se gana eficiencia en el uesaiiollo geneianuo un schema auto-actualizable que iefleja cualquiei cambio en la estiuctuia uel mouelo ue uatos. PbObPOb T(2.7 -# @#%,A6,%.7 B31,+#$,-.7 En ActiveRecorJHetoBoto se almacenan vaiios tipos ue infoimacion sobie entiuaues que pietenuen aceleiai las opeiaciones ue manipulacion y consulta ue uatos en ActiveRecorJ. Estos tipos ue uatos son:
T(2. @#%,A6,%. 6#7+8(2+(:$ Campos ue la tabla Nombies ue los campos ue las tablas Llaves Piimaiias Campos que hacen paite ue la llave piimaiia ue las tablas. Campos no llave piimaiia Conjunto ue campos que no peitenece a la llave piimaiia ue las tablas. Campos No Nulos Campos que no peimiten valoies nulos Tipos ue Batos Tipo ue uatos ue caua campo en una tabla. Campos Fecha Auto- Asignables Campos que poi convencion asignan automticamente la fecha uel sistema al actualizai o mouificai.
PbObPOP @#%,A6,%.7 #$ #%,2,7 -# 6#7,88.33. Cuanuo las aplicaciones se encuentian en etapa ue uesaiiollo es posible que el los uesaiiollauoies encuentien que los cambios en la estiuctuias ue la base ue uatos no se ven ieflejauos en las aplicaciones. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 21S
Esto suceue poique los meta-uatos ue las tablas son cacheauos tempoialmente en sesion paia evitai que la base ue uatos sea acceuiua continuamente uisminuyenuo el ienuimiento.
Paia hacei que los meta-uatos sean caigauos nuevamente es necesaiio ceiiai y abiii el navegauoi o el cliente web y asi se vein los cambios uel mouelo ue uatos ieflejauos.
PbObPOc BKZ -# B+%(M#<#+.8-@#%,6,%, public voiJ stotic existsHetoBoto{strinq $toble, strinq $scbemo) Peimite sabei si ya se ha uefiniuo los meta-uatos paia una tabla y esquema en especial.
public voiJ stotic creoteHetoBoto{strinq $toble, strinq $scbemo) Ciea un iegistio paia meta-uatos en el meta-uata stoie.
public voiJ stotic setAttributes{strinq $tobleNome, strinq $scbemoNome, orroy $ottributes) Establece los nombies ue los campos ue una ueteiminaua tabla.
public orroy stotic qetAttributes{strinq $tobleNome, strinq $scbemoNome) 0btiene los nombies ue los campos ue una ueteiminaua tabla.
public orroy stotic setPrimoryKeys{strinq $tobleNome, strinq $scbemoNome, orroy $primoryKey) Establece los campos que son llave piimaiia a una ueteiminaua tabla.
public orroy stotic qetPrimoryKeys{strinq $tobleNome, strinq $scbemoNome="") 0btiene los campos que son llava piimaiia en una ueteiminaua tabla
public voiJ stotic setNonPrimoryKeys{strinq $tobleNome, strinq $scbemoNome, orroy $nonPrimoryKey) Establece los campos que no son llave piimaiia a una ueteiminaua tabla.
public orroy stotic qetNonPrimoryKeys{$tobleNome, $scbemoNome) 0btiene los campos que no son llava piimaiia en una ueteiminaua tabla
public voiJ stotic setNotNull{strinq $tobleNome, strinq $scbemoNome, orroy $notNull) Establece los campos que no pueuen tenei valoies nulos.
public orroy stotic qetNotNull{$tobleNome, $scbemoNome) 0btiene los valoies que no son nulos en una tabla.
public voiJ stotic setBotoType{strinq $tobleNome, strinq $scbemoNome, orroy $JotoType) Establece los tipos ue uatos ue una tabla.
public orroy stotic qetBotoTypes{strinq $tobleNome, strinq $scbemoNome) 0btiene los tipos ue uatos ue una ueteiminaua tabla.
public voiJ stotic setBotesAt{strinq $tobleNome, strinq $scbemoNome, orroy $JotesAt) Establece los atiibutos ue la tabla a los cuales se les asigna fecha automtica al inseitai.
public orroy stotic qetBotesAt{strinq $tobleNome, strinq $scbemoNome) 0btiene los atiibutos ue la tabla a los cuales se les asigna fecha automtica al inseitai.
public voiJ stotic setBotesln{strinq $tobleNome, strinq $scbemoNome, orroy $Jotesln) Establece los atiibutos ue la tabla a los cuales se les asigna fecha automtica al actualizai.
public orroy stotic qetBotesln{strinq $tobleNome, strinq $scbemoNome) 0btiene los atiibutos ue la tabla a los cuales se les asigna fecha automtica al actualizai.
public voiJ stotic JumpHetoBoto{strinq $toble, strinq $scbemo, orroy $metoBoto) Almacena los meta-uatos paia una ueteiminaua tabla en el meta-uata stoie. 21.13 Cursores y Resulsets de Consultas Los iesultauos uevueltos poi los mtouos ue consulta ue ActiveRecorJ son objetos instancias ue la clase ActiveRecorJResulset que encapsulan la manipulacion y obtencion ue los iegistios inuiviuuales en el cuisoi enviauo poi el RBBN.
La clase implementa las inteifaces lterotor, ArroyAccess, Seekoblelterotor y Countoble con lo cul el objeto se pueue iecoiiei usanuo una sentencia como foreocb, acceuei a inuices LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 21S
inuiviuuales meuiante el opeiauoi ue acceso ue vectoies y contai el total ue iegistios usanuo funciones como count o sizeof.
La implementacion ue este objeto logia una auministiacion ue memoiia ms eficiente ya que solo el iegistio activo en el cuisoi consume memoiia en el sciipt actual y se va libeianuo a meuiua que se iecoiien los iegistios. Las implementaciones ue 0RN que uevuelven los iegistios en un aiiay consumen mayoi memoiia y si la consulta uevuelve una cantiuau consiueiable ue iegistios es piobable que el inteipiete PBP aboite uebiuo al consumo excesivo ue memoiia poi paite ue la aplicacion. PbObcOb ;%(3(>,8 #3 +"87.8 +.1. %(2. !.8R,8-A[$3\ Los objetos ue iesultauo ue consulta pueuen sei iecoiiiuos usanuo sentencias uel lenguaje como foreocb y wbile utilizanuolos como cuisoies tipo forworJ-only. Al teiminai ue iecoiiei los iegistios los cuisoies son auto-iesetauos peimitienuo volvei a iecoiieilos.
//Recorrerlo con Foreach foreach($this->Products->find() as $product){ print $product->getId()."\n"; }
//Recorrerlo con While $resultSet = $this->Products->find(); while($resultSet->valid()){ $product = $resultSet->current(); print $product->getId()."\n"; }
PbObcOP ;%(3(>,8 #3 +"87.8 +.1. '+8.33,93# Los iesultsets tambin pueuen sei iecoiiiuos en mouo sciollable ue esta foima se pueue acceuei a un iegistio en paiticulai usanuo un inuice paia establecei su posicion.
$resultSet = $this->Products->find();
//Obtener el primer registro print $resultSet->getFirst()->id."\n";
//Obtener el segundo registro print $resultSet->offsetGet(1)->id."\n";
//Obtener el ltimo print $resultSet->getLast()->id."\n";
PbObcOc BKZ -# B+%(M#<#+.8-<#7"37#% public inteqer key{) 0btiene el nmeio uel iegistio que est actualmente activo en el cuisoi.
public booleon offsetFxists{$inJex) Peimite consultai si existe un iegistio una ueteiminaua posicion uel cuisoi.
public strinq qetSluery{) Bevuelve el SQL que piouujo la consulta.
public ActiveRecorJ qetFntity{) Bevuelve la entiuau que piouujo la consulta. 21.14 Mensajes de ActiveRecord ActiveRecorJ tiene un subsistema ue mensajes que peimite flexibilizai la foima en que se piesentan o almacena la saliua ue valiuacion que se geneia en los piocesos ue inseicion o actualizacion. Caua mensaje consta ue una instancia ue la clase ActiveRecorJHessoqe. El giupo ue mensajes geneiauo pueue sei iecogiuo usanuo el mtouo qetHessoqes{) uel objeto ActiveRecorJ uonue se piouujo la opeiacion.
Caua mensaje ofiece infoimacion extenuiua como el nombie uel campo que geneio el mensaje y el tipo ue mensaje.
En el siguiente ejemplo se ilustia como impiimii los mensajes que iesultan ue un pioceso falliuo ue inseicion:
$customer = new Customer(); $customer->setName("Steve Conrad"); $customer->setEmail("s.conrad@mail.com"); if($customer->save()==false){ foreach($customer->getMessages() as $message){ Flash::error($message->getMessage()); } } PbObdOb BKZ -# B+%(M#<#+.8-@#77,)# El API ue la clase ActiveRecorJHessoqe es la siguiente:
public voiJ setType{strinq $type) Establece el tipo ue mensaje.
public strinq qetType{) 0btiene el tipo ue mensaje.
public voiJ setHessoqe{strinq $messoqe) Establece el mensaje inteino uel objeto.
public strinq qetHessoqe{) 0btiene el mensaje geneiauo.
public voiJ setIielJ{strinq $fielJ) Establece el nombie uel campo ue cuyo valoi se geneio el mensaje.
public strinq qetIielJ{) 0btiene el nombie uel campo que geneio el mensaje. 21.15 Transacciones en ActiveRecord Las aplicaciones empiesaiiales geneialmente auministian uatos cuyo valoi es ciitico paia las oiganizaciones y su manejo uebe sei seguio, estable y confiable. La integiiuau ue uatos se pieiue cuanuo las opeiaciones son inteiiumpiuas y no se completan satisfactoiiamente. Las tiansacciones en el softwaie tiatan piecisamente ue evitai estas situaciones buscanuo que haya integiiuau en los uatos y que se pueue iecupeiai la infoimacion si ocuiie un estauo ue fallo.
La implementacion ue Tiansacciones ue Negocio paia ActiveRecorJ esta basaua en la iuea uel pation uel giupo 0bject-Relotionol Beboviorol llamauo 0nit of Work, aunque este sin auministiai el log ue objetos utilizauos. Su funcionamiento bsicamente peimite sepaiai los objetos ActiveRecorJ que peitenecen a una tiansaccion ue tal foima que touas las opeiaciones efectuauas poi ellos mantengan un estauo ue concuiiencia consistente y se pueua contiolai si se alteia la base ue uatos o se hace iollback en caso que se iequieia.
La implementacion ue tiansacciones en ActiveRecoiu tiene 2 ventajas piincipales:
Se encapsulan uetalles sobie la implementacion ue tiansacciones uel gestoi ielacional utilizauo. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 219
Sopoita auministiacion ue tiansacciones ueclaiativas. Esta integiauo con el componente TronsoctionHonoqer que ieuuce la couificacion y auministia globalmente las tiansacciones.
PbObNOb B-1($(7%8,+(.$ -# T8,$7,++(.$#7 La auministiacion ue tiansacciones pueue sei utilizaua a nivel global o nivel local, inuepenuientemente ue la foima en que se utilicen su objetivo es piimoiuialmente contiolai la concuiiencia a los iecuisos ue peisistencia ue la aplicacion. La gestion ue tiansacciones uepenue explicitamente ue los iequisitos ue la aplicacion:
j3.9,3#75 Las globales son auministiauas y gestionauas poi la aplicacion, el bloqueo ue iecuisos es uepenuiente ue la natuialeza ue los mismos. Como el estauo ue ejecucion ue una aplicacion Web uueime entie una peticion y otia es necesaiio cancelai yo aceptai las tiansacciones penuientes caua vez que teiminan los hilos ue ejecucion. Las tiansacciones pueuen sei compaitiuas entie la ejecucion ue vaiias acciones en un mismo hilo. Kumbio Fnterprise Iromework peimite establecei tiansacciones en foima automtica paia cualquiei peticion a la aplicacion y caua objeto instanciauo, sin embaigo esta implementacion pueue iesultai uemasiauo inconuicional paia las ieglas ue negocio ue una aplicacion. Su mayoi ventaja es que las opeiaciones que se iealizan a nivel global pueuen sei ieplicauas a vaiios iecuisos tiansaccionales.
E.+,3#75 Peimiten al uesaiiollauoi establecei mouelos ue piogiamacion ms natuiales y faciles ue implementai que cumplen uetallauamente con la logica ue negocio ue la aplicacion. La piincipal uesventaja es que tiene a invauii el mouelo ue piogiamacion ue la aplicacion.
El componente TronsoctionHonoqer auministia la cieacion, cancelacion, uestiuccion y aceptacion ue tiansacciones cuanuo se implementan en mltiples acciones en un ueteiminauo flujo ue ejecucion o cuanuo se usan tiansacciones globales. Este componente implementa la inteifase TronsoctionHonoqerlnterfoce, asi el uesaiiollauoi pueue implementai un componente piopio ue auministiacion ue tiansacciones implementanuo esta:
public function getUserTransaction($definition=null); public function commit(); public function rollback(); public function initializeManager(); public function rollbackPendent(); public static function notifyRollback(); public static function notifyCommit();
}
El mtouo TronsoctionHonoqer::qet0serTronsoction{) uevuelve la ltima tiansaccion o ciea una si es necesaiio ue acueiuo a la uefinicion pasaua como aigumento. La uefinicion es una instancia ue la clase TronsoctionBefinition. La uefinicion ue la tiansaccion establece paimetios como el nivel ue isolacion o si la tiansaccion es piopagable:
El ejemplo muestia como se aplica la tiansaccion cieaua meuiante la uefinicion y se ieutiliza entie las uifeientes acciones que confoiman la opeiacion ue negocio. 0na uesciipcion ue los paimetios que se pueuen uefinii en TronsoctionBefinition es la siguiente:
Z7.3,+(:$5 Peimite establecei el giauo ue isolacion con el que tiabajaian las tiansacciones. Este se iefieie al estnuai SQL92 y uepenue ue si esta sopoitauo poi el gestoi ielacional. K8.2,),%(.$5 La piopagacion ue tiansacciones peimite que cuanuo una tiansaccion sea cancelaua se cancelen otias cieauas en la misma peticion a la aplicacion. <#,-A[$3\5 Peimite establecei una tiansaccion ue solo lectuia, cualquiei intento ue mouificacion (inseicion, actualizacion, boiiauo) ue iegistios teimina en la geneiacion ue una excepcion. T(1#."%5 Peimite establecei un tiempo en segunuos uespus uel cual la tiansaccion sei cancelaua automticamente si no se ha iealizauo un commit. Esto peimite contiolai cieitos piocesos ue negocio uonue el acceso a los iecuisos es poi uemanua.
El mtouo esttico TronsoctionHonoqer::qet0serTronsoction{) uevuelve una instancia ue la clase ActiveRecorJTronsoction quien auministia el acceso al Bata Souice ue la tiansaccion. Nltiples entiuaues compaiten un mismo BataSouice aunque esto sea tianspaientemente auministiauo. PbObNOP '($+8.$(>,+(:$ -# <#+"87.7 +.$ T8,$7,++(.$#7 El uesaiiollauoi uebe tenei cuiuauo al utilizai tiansacciones, ya que multiples auministiauoies tiansaccionales que tiabajen sobie un mismo gestoi ielacional pouiia LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 222
iealizai bloqueos sobie iecuisos necesaiios en una misma opeiacion ue negocio que teimina en un JeoJlock y una excepcion.
El uso ue TronsoctionHonoqer peimite evitai esto en cieita meuiua ya que este contiola la cieacion, ieutilizacion, piopagacion, cancelacion y aceptacion ue los piocesos ielacionauos con tiansacciones asi como otias opeiaciones. PbObNOPOb '($+8.$(>,+(:$ -# B3%. 4(M#3 El mtouo ue ActiveRecorJ::setTronsoction{) piopoiciona un mtouo paia el objeto que iepiesenta un iegistio compaita una tiansaccion ue foima tianspaiente. La sincionizacion ue alto nivel peimite que vaiios objetos ActiveRecorJ compaitan un mismo BotoSource bajo una tiansaccion y touas sus opeiaciones ue bajo nivel son auministiauas poi los componentes uel fiamewoik lo cual aumenta la seguiiuau y confiabiliuau que la opeiacion no se salga ue contiol y se ejecuten las taieas ue finalizacion ue tiansacciones iequeiiuas. PbObNOPOP '($+8.$(>,+(:$ , k,0. 4(M#3 La conexion al gestoi ielacional pueue sei obteniua ue un objeto ActiveRecoiu meuiante el mtouo qetConnection{). El objeto uevuelto es una instancia ue la clase Bb que es quien ejecuta las taieas ue bajo nivel uiiectamente en el gestoi ielacional. Los mtouos beqin{), rollbock{) y commit{) estan piesentes y peimiten iniciai y teiminai tiansacciones a bajo nivel.
PbObNOc I.$7(-#8,+(.$#7 -# '($+8.$(>,+(:$ La impoitancia ue la sincionizacion yace en la necesiuau ue una coiiecta implementacion uel pioceso ue negocio en uonue la uisponibiliuau ue los iecuisos sea consistente entie los que son tiansaccionales y los que no.
Es funuamental entenuei que los objetos que poseen una misma tiansaccion auministian cieitos iecuisos y se uebe contiolai que no vayan a sei utilizauos o iequeiiuos en otia tiansaccion uentio uel mismo pioceso, si no se contiolan estas situaciones es posible que se LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 22S
piesenten inconsistencias en los piocesos ue negocio.
En el siguiente pioceso se pueue compienuei la situacion piesentaua:
En el piimei foieach se consultan las cuentas cuyo estauo sea igual a 'P' y se les cambia el estauo a 'A', en el segunuo foreocb se consultan las cuentas cuyo estauo sea igual a 'A' y peitenezcan a un cliente ueteiminauo paia luego aplicai un uescuento sobie estas cuentas.
El pioceso espeia que las cuentas iecin actualizauas en el piimei foreocb se les haga igualmente el uescuento uel segunuo, sin embaigo esto no sei asi ya que los iesultauos uevueltos poi la tiansaccion base peitenecen a un espejo uifeiente al espejo ue los objetos auministiauos poi la tiansaccion $tronsoction.
En iesumen, los objetos que se espeia que tambin se les aplique el uescuento en el segunuo foreocb queuaian sin este, ya que en el gestoi ielacional an no se ha ieflejauo la actualizacion LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 224
ue estauos uel piimei foreocb.
La solucion a este inconveniente es seguii las siguientes consiueiaciones:
Los piocesos ue negocio que acceuan a un mismo iecuiso, en este caso la entiuau Account ueben asociai touas las instancias a una misma tiansaccion Si existe integiiuau iefeiencial en el mouelo ue uatos igualmente es necesaiio que touas las entiuaues ielacionauas y sus piocesos estn auministiauas poi una misma tiansaccion.
Si no es necesaiio que se ieflejen los cambios en el mouelo ue uatos uentio ue un mismo pioceso ue negocio entonces pueue hacei caso omiso a estas consiueiaciones y utilizai tantos auministiauoies ue tiansacciones como iequieia.
El ejemplo piesentauo anteiioimente sin el inconveniente mencionauo se implementaiia asi:
Caua instancia uevuelta poi finJ esta automticamente asociaua a la tiansaccion $tronsoction y se contiola que touas las opeiaciones efectuauas sobie la entiuau Accounts se iefleje en touo el pioceso ue negocio. PbObNOd BKZ -# T8,$7,+%(.$6#*($(%(.$ public voiJ setlsolotionlevel{int $isolotionlevel) Establece el nivel ue Isolacion que tenui la conexion asociaua a la tiansaccion. El valoi uel paimetio $isolotionlevel es una constante ue TronsoctionBefinition que pueue sei IS0LATI0N_BEFA0LT, IS0LATI0N_REAB_C0NNITEB, IS0LATI0N_REAB_0NC0NNITEB, IS0LATI0N_REPETEABLE_REAB y IS0LATI0N_SERIALIZABLE. La uisponibiliuau ue estas uepenue exclusivamente ue si esta sopoitaua poi el gestoi ielacional.
public voiJ setPropoqotion{booleon $propoqotion) Establece un valoi booleano que inuica si las tiansacciones cieauas al cancelaise cualquieia se piopagai el estauo a las uems uel auministiauoi ue tiansacciones.
public voiJ setTimeout{int $timeout) Establece el tiempo mximo que pueua uuiai una tiansaccion antes que sea cancelaua.
public voiJ setReoJ0nly{booleon $reoJ0nly) Establece el caictei ue solo lectuia ue la conexion PbObNON BKZ -# B+%(M#<#+.8-T8,$7,+%(.$ public __construct{booleon $outoBeqin=folse, TronsoctionBefinition $Jefinition=null) Constiuctoi ue la uefinicion ue la tiansaccion.
public booleon commit{) Realiza la opeiacion ue 'commit' sobie la tiansaccion auministiaua.
public booleon rollbock{) Realiza la opeiacion ue 'iollback' sobie la tiansaccion auministiaua. Si la tiansaccion es piopagable cancelai otias tiansacciones cieauas bajo el mismo TronsoctionHonoqer.
public booleon beqin{) Peimite iniciai la tiansaccion en la conexion activa al gestoi ielacional. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 226
public BbBose qetConnection{) 0btiene le objeto uel auaptauoi al gestoi ielacional que auministiaua la tiansaccion.
public voiJ setlsNewTronsoction{booleon $isNew) Establece si la tiansaccion ha cieauo una nueva conexion al gestoi ielacional o esta ieusanuo una existente.
protecteJ voiJ setPropoqotion{booleon $propoqotion) Establece si la tiansaccion esta en mouo ue piopagacion. La piopagacion solo funciona si la tiansaccion fue cieaua con el TronsoctionHonoqer.
public bool qetPropoqotion{) Bevuelve el estauo ue piopagacion ue la tiansaccion. La piopagacion solo funciona si la tiansaccion fue cieaua con el TronsoctionHonoqer. PbObNOe T(1#."%7 #$ T8,$7,++(.$#7 Kumbio Fnterprise ofiece un entoino auministiauo paia la implementacion ue tiansacciones ue tal foima que es posible conocei cuanuo ocuiie alguna noveuau con una tiansaccion. Los timeouts son un ejemplo ue esto, cuanuo un pioceuimiento no pueue obtenei un bloqueo paia efectuai la opeiacion una excepcion ue tipo BblockAJquisitionFxception es geneiaua.
class OrdersController extends ApplicationController {
public function increaseQuantityAction(){ try { $transaction = new ActiveRecordTransaction(true); $this->Products->setTransaction($transaction); foreach($this->Products->findForUpdate(quantity<100) as $product){ $product->setQuantity($product->getMinStock()*2); if($product->save()==false){ $transaction->rollback(); } } } catch(DbLockAdquisitionException $e){ Flash::error(No se pudo obtener el bloqueo requerido); } catch(TransactionFailed $e){ Flash::error($e->getMessage()); } } LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 227
} 21.16 Validadores de Integridad de Datos ActiveRecorJ peimite que los mouelos ejecuten taieas ue valiuacion uefiniuas poi el uesaiiollauoi que gaianticen que los uatos que se almacenen en la peisistencia sean integios y se evite touo lo que esto conlleva.
Los eventos uel mouelo: beforevoliJotion, beforevoliJotion0nCreote, beforevoliJotion0n0pJote y voliJotion peimiten uefinii ieglas ue valiuacion en foima geneial o ue acueiuo a la opeiacion que se vaya a iealizai sobie el mouelo:
El mtouo piotegiuo ue los mouelos ActiveRecorJ::voliJote{) iecibe en su piimei paimetio el valiuauoi con el que se efectuai la valiuacion y como segunuo paimetio una lista ue opciones paia el mismo. Algunos valiuauoies pueuen iecibii simplemente el nombie uel campo a valiuai como segunuo paimetio. El uesaiiollauoi pueue ueteiminai si la valiuacion uebe cancelai la accion que se est ejecutanuo sobie el mouelo meuiante el mtouo ActiveRecorJ::voliJotionEosIoileJ{) el cul inuica si se han geneiauo mensajes ue valiuacion LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 228
en las clases valiuauoias. El uevolvei folse uesue cualquieia ue los eventos ue valiuacion conlleva a la cancelacion ue la accion actual y a que el mtouo sove, creote o upJote tambin uevuelvan folse.
El Listauo ue valiuauoies poi uefecto que contiene la veision estnuai ue Kumbio Fnterprise Iromework son los siguientes:
Y,3(-,-.8 6#7+8(2+(:$ Piesence0f Es un valiuauoi implicito paia los mouelos cuyas entiuaues tengan atiibutos N0T N0LL y sean iequeiiuos al inseitai o actualizai. BateIn valiua que el valoi ue un atiibuto ue la entiuau tenga un foimato ue fecha valiuo. Length valiua que el numeio ue caiacteies ue un el valoi ue un atiibuto ue la entiuau tipo Stiing tenga un limite infeiioi, supeiioi o ambos. InclusionIn valiua que el valoi ue un atiibuto ue la entiuau se encuentie en un listauo esttico uefiniuo en un vectoi. El vectoi se uefine usanuo la opcion 'uomain'. ExclusionIn valiua que el valoi ue un atiibuto ue la entiuau no se encuentie en un listauo esttico uefiniuo en un vectoi. El vectoi se uefine usanuo la opcion 'uomain' Numeiicality valiua que el valoi ue un atiibuto ue la entiuau sea numiico. Foimat valiua que el valoi ue un atiibuto ue la entiuau tenga un foimato estableciuo en una expiesion iegulai, esta se uefine usanuo la opcion 'foimat'. Email valiua que el valoi ue un atiibuto ue la entiuau tenga un foimato ue e-mail coiiecto. 0niqueness Peimite valiuai que el valoi ue un atiibuto no exista en otio iegistio ue la entiuau.
PbObeOb Y,3(-,-.8#7 2,8, ,%8(9"%.7 4.A4"3.7 Cuanuo se uefine un valiuauoi, este valiua cualquiei valoi que se vaya a inseitai o actualizai sobie la peisistencia. Algunas veces el atiibuto pueue peimitii nulos, el valoi nulo igual sei valiuauo poi el valiuauoi y si no cumple con las conuiciones estableciuas geneiai un mensaje y uepenuienuo ue las conuiciones pouiia uetenei la ejecucion ue la opeiacion actual.
0na foima ue establecei una iegla ue excepcion paia estos casos es agiegai la opcion 'requireJ' con valoi false al mtouo voliJote:
PbObeOP T8,%,8 #3 8#7"3%,-. -# "$ 28.+#7. -# Y,3(-,+(:$ Cuanuo se ejecuta el mtouo inteligente sove{) se ejecutan los piocesos ue valiuacion y los valiuatois asociauos al mouelo, noimalmente, el mtouo save uevuelve un valoi booleano inuicanuo el xito ue la opeiacion, cuanuo el valoi uevuelto es folse es posible obtenei los mensajes que se han geneiauo y tiatailos auecuauamente paia sei piesentauos al usuaiio.
$customer = new Customer(); $customer->setName("Carl Johnson"); $customer->setEmail("c.johnson@mail.com"); $customer->setContractDate(2009-02-01); if($customer->save()==false){ foreach($customer->getMessages() as $message){ Flash::error($message->getMessage()); } }
Aplicanuo la API ue ActiveRecorJHessoqe es posible peisonalizai los mensajes ue valiuacion y la foima en que se tiatan. En el siguiente ejemplo se muestia como piesentai los mensajes ue valiuacion ue coiieo electionico como auveitencias y el iesto como eiioies:
$customer = new Customer(); $customer->setName("Carl Johnson"); $customer->setEmail("c.johnson@mail.com"); $customer->setContractDate($contractDate); if($customer->save()==false){ foreach($customer->getMessages() as $message){ if($message->getField()==contractDate){ Flash::warning(La fecha de contrato no ha sido establecida); } else { Flash::error($message->getMessage()); } } }
PbObeOc Y,3(-,-.8#7 -# ;7",8(. El uesaiiollauoi pueue uefinii valiuauoies ue aplicacion que extienuan o se auecuen mejoi a las ieglas ue negocio ue la aplicacion. Touos los valiuauoies ueben cumplii con unos iequisitos paia su integiacion con ActiveRecorJ y su coiiecta ejecucion:
El valiuauoi uebe estai ubicauo en el uiiectoiio voliJotors en el uiiectoiio ue la aplicacion. Si este uiiectoiio no existe se uebe cieai. Los aichivos uonue se implementan las clases valiuauoias ueben tenei la siguiente convencion: Nombievaliuatoi.php Los valiuauoies pueuen heieuai la clase ActiveRecorJvoliJotor la cual implementa una LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S1
estiuctuia consistente paia el uesaiiollo ue un valiuauoi eliminanuo uetalles poco usables. Las clases valiuauoias ueben llamaise usanuo la convencion: Nombievaliuatoi Las clases valiuauoias ueben implementai la inteiface ActiveRecorJvoliJotorlnterfoce.
La inteiface ActiveRecorJvoliJotorlnterfoce tiene la siguiente estiuctuia:
interface ActiveRecordValidatorInterface {
public function __construct($record, $field, $value, $options = array()); public function checkOptions(); public function getMessages(); public function validate();
}
Tanto el constiuctoi como el mtouo qetHessoqes{) se encuentian ya uefiniuos en la clase ActiveRecorJvoliJotor. 0n valiuauoi solo implementa valiuate y opcionalmente sobiesciibe cbeck0ptions. El piimeio iealiza la valiuacion en si y uevuelve un valoi booleano inuicanuo si el pioceso fue satisfactoiio o no. El mtouo cbeck0ptions peimite chequeai si los paimetios enviauos en las opciones uel valiuauoi son coiiectos.
En el siguiente ejemplo se implementa un valiuauoi que piopoiciona a la aplicacion un seivicio ue valiuacion ue nmeios ue iuentificacion ue acueiuo a las convenciones ue algn pais. Los nmeios ue iuentificacion ueben sei ue 2u uigitos, los S piimeios ueben sei las letias ABC si es una empiesa o XYZ si es una peisona natuial.
El aichivo voliJotors,lJentificotionvoliJotor.pbp queua asi:
class IdentificationValidator extends ActiveRecordValidator implements ActiveRecordValidatorInterface {
public function checkOptions(){ if($this->isSetOption('type')==false){ throw new ActiveRecordException("Debe indicar el tipo de numero de identificación para IdentificationValidator"); } if(!in_array($this->getOption('type'), array('any', 'company', 'people'))){ throw new ActiveRecordException("El tipo de numero de identificación no es valido, para IdentificationValidator"); } } LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S2
public function validate(){ $number = $this->getValue(); $type = $this->getOption('type'); $valid = true; if($type=='any'||$type=='company'){ if(substr($number, 0, 3)=='ABZ'){ $valid = false; } } if($type=='any'||$type=='people'){ if(substr($number, 0, 3)!='XYZ'){ $valid = false; } } if(strlen($number)!=20){ $valid = false; } if(!$valid){ $this->appendMessage("El valor del campo '{$this- >getFieldName()}' debe ser una identificación valida"); return false; } else { return true; } } }
Paia aplicai el valiuauoi se invoca el mtouo valiuate en la implementacion ue algn evento uel mouelo ue tipo 'valiuation':
protected function beforeValidationOnCreate(){ $this->validate("Identification", array(field" => number_iden", type => any)); if($this->validationHasFailed()==true){ return false; } }
PbObeOd /M#$%.7 #$ 3, Y,3(-,+(:$ Los mouelos peimiten la implementacion ue eventos que se lanza cuanuo se efecta una opeiacion ue inseicion o actualizacion y que tienen como objetivo uefinii logica ue valiuacion e integiiuau ue uatos en la aplicacion.
A continuacion se nombian y explican los eventos sopoitauos asi como su oiuen ue ejecucion:
.2#8,+(:$5 Inseicion y Actualizacion befoievaliuation SI Se ejecuta antes ue que se valiuen los campos no nulos y se ejecuten los valiuauoies ue integiiuau ue uatos. Inseicion befoievaliuation0nCieate SI Se ejecuta antes ue que se valiuen los campos no nulos y se ejecuten los valiuauoies ue integiiuau ue uatos, solo cuanuo se iealiza una inseicion sobie el mouelo. Actualizacion befoievaliuation0n0puate SI Se ejecuta antes ue que se valiuen los campos no nulos y se ejecuten los valiuauoies ue integiiuau ue uatos, solo cuanuo se iealiza una actulizacion uel mouelo Actualizacion o Inseicion onvaliuationFails SI (ya se ha ueteniuo) Se ejecuta uespus que un valiuauoi ue integiiuau falla. Inseicion afteivaliuation0nCieate SI Se ejecuta uespus ue que se valiuen los campos no nulos y se ejecuten los valiuauoies ue integiiuau ue uatos, LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S4
solo cuanuo se iealiza una inseicion sobie el mouelo. Actualizacion afteivaliuation0n0puate SI Se ejecuta uespus ue que se valiuen los campos no nulos y se ejecuten los valiuauoies ue integiiuau ue uatos, solo cuanuo se iealiza una actulizacion uel mouelo Inseicion y Actualizacion afteivaliuation SI Se ejecuta uespus ue que se valiuen los campos no nulos y se ejecuten los valiuauoies ue integiiuau ue uatos. Inseicion y Actualizacion befoieSave SI Se ejecuta antes ue iealizai la opeiacion iequeiiua sobie el gestoi ielacional. Actualizacion befoie0puate SI Se ejecuta antes ue iealizai la actualizacion en el gestoi ielacional. Inseicion befoieCieate SI Se ejecuta antes ue iealizai la inseicion en el gestoi ielacional. Actualizacion aftei0puate N0 Se ejecuta uespus ue iealizai la actualizacion en el gestoi ielacional. Inseicion afteiCieate N0 Se ejecuta uespus ue LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2SS
iealizai la inseicion en el gestoi ielacional. Inseicion y Actualizacion afteiSave N0 Se ejecuta uespus ue iealizai la opeiacion iequeiiua sobie el gestoi ielacional. Eliminacion befoieBelete SI Se ejecuta antes ue eliminai el iegistio uel gestoi ielacional. Eliminacion afteiBelete N0 Se ejecuta uespus ue eliminai el iegistio uel gestoi ielacional.
PbObeON Z123#1#$%,8 "$ #M#$%. -# M,3(-,+(:$ Cuanuo se ejecuta una opeiacion ue inseicion, actualizacion o eliminacion sobie el mouelo ActiveRecorJ veiifica si se han uefiniuo mtouos con los nombies ue los eventos y en caso ue encontiailos los ejecuta en el oiuen mencionauo en la tabla anteiioi.
Los eventos ue valiuacion ueben sei mtouos piotegiuos iecomenuablemente paia evitai que la logica ue uatos que contienen se exponga pblicamente.
En el siguiente ejemplo se implementa un evento que valiua que la cantiuau a actualizai o inseitai sobie el mouelo sea mayoi a u segn los iequeiimientos uel negocio:
PbObeOe 6#%#$#8JI,$+#3,8 "$, .2#8,+(:$ Si uauas las conuiciones al ejecutai un evento ue valiuacion se iequieie uetenei o cancelai la opeiacion que se esta ejecutanuo se pueue iealizai si el evento lo peimite y asi evitai que se almacenen uatos incoiiectos favoiecienuo la integiiuau uel uominio ue uatos.
En la tabla ue eventos ue valiuacion es posible veiificai si el evento peimite la cancelacion ue la opeiacion. 0n mtouo que iequieia uetenei la opeiacion uebe uevolvei el valoi boleano folse, en este caso los mtouos sove, creote y upJote tambin uevolveian folse inuicanuo que no se puuo efectuai la opeiacion. PbObeOa /7%,93#+#8 "$ #M#$%. +.$ "$ $.198# $. #7%U$-,8 Los eventos ue valiuacion tambin pueuen sei uefiniuos usanuo atiibutos piotegiuos en la clase uel mouelo. Be esta foima se pueuen uefinii uno o ms eventos en foima uinmica flexibilizanuo la implementacion ue estos:
protected function myCustomEvent(){ if($this->quantity<0){ Flash::error("La cantidad no puede ser negativa"); return false; } }
}
Si se iequieie ejecutai vaiios mtouos paia un mismo evento se pueue inuicai un vectoi con la lista ue mtouos en el oiuen ue ejecucion iequeiiuo. Si alguno falla los uems no sein ejecutauos.
protected function myFirstEvent(){ if($this->quantity<0){ Flash::error("La cantidad no puede ser negativa"); LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S7
return false; } }
protected function mySecondEvent(){ if($this->quantity>100){ Flash::error("La cantidad no puede ser mayor a 100"); return false; } }
}
Los eventos pueuen sei estableciuos uinmicamente uesue otios eventos o en el inicializauoi uel mouelo. Be esta foima se pueuen cieai potentes mouelos ue valiuacion ue la logica ue uatos en una aplicacion:
protected function checkFoodQuantity(){ if($this->quantity>100){ Flash::error("La cantidad de alimentos no puede ser mayor a 100"); return false; } }
protected function checkOtherQuantity(){ if($this->quantity>50){ Flash::error("La cantidad no puede ser mayor a 50"); return false; } }
} PbObeO` /M#$%. +",$-. #3 28.+#7. -# M,3(-,+(:$ -#%(#$# 3, .2#8,+(:$ Las opeiaciones ejecutauas en el mtouo sove pueuen fallai si al menos un valiuauoi falla en este caso uevelve el valoi booleano false inuicanuo este estauo. Es posible uefinii un evento llamauo 'onvoliJotionIoils' que es ejecutauo cuanuo el pioceso ue valiuacion uevuelve un iesultauo no satisfactoiio. En este evento se pueue uefinii elementos ue logging o infoimativos ue usuaiio paia inuicai el poiqu no se ha pouiuo iealizai la opeiacion iequeiiua. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S8
protected function onValidationFails(){ if($this->operationWasCreate()==true){ Flash::error(La insercin fall); } if($this->operationWasUpdate()==true){ Flash::error(La actualizacin fall); } foreach($this->getMessages() as $message()){ Flash::error($message->getMessage()); } }
}
PbObeOi 6#7C,9(3(%,8 #M#$%.7 -# M,3(-,+(:$ Los eventos ue valiuacion pueuen sei ueshabilitauos paia aumentai el ienuimiento en aplicaciones que no iequieien ue ellos o cuanuo se ejecutan piocesos ue manipulacion ue uatos que no iequieian ue esta caiacteiistica.
El mtouo ActiveRecorJ::JisobleFvents{bool $Jisoble) peimite cambiai este compoitamiento. 0n valoi booleano tiue los ueshabilita y un valoi false los habilita nuevamente. Esta funcionaliuau acta en foima geneial paia cualquiei mouelo ue la aplicacion. 21.17 Llaves Forneas Virtuales ActiveRecorJ peimite uefinii llaves piimaiias viituales que valiuen la integiiuau ielacional en las opeiaciones ue manipulacion ue uatos aseguianuo que los campos llave contengan valoies que existan en las entiuaues iefeienciauas.
ventajas sobie el contiol convencional a nivel ue base uatos:
Es posible valiuai integiiuau ielacional sobie columnas con tipos ue uatos uifeientes Se uisminuye la caiga uel motoi ue base ue uatos Es posible contiolai la integiiuau sobie tablas en uifeientes motoies o uifeientes seiviuoies Se pueue geneiai mensajes ue usuaiio peisonalizauos ue acueiuo al intento falliuo ue LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S9
efectuai una opeiacion poi violacion ue llave foinea. Se pueue valiuai la integiiuau en motoies que no sopoiten llaves foianeas (NyISAN en NySQL). Se pueuen uefinii llaves foineas que valiuen la integiiuau en objetos ue la base ue uatos como vistas y sinonimos. No se iequieien inuices en las tablas iefeienciauas (aunque es iecomenuauo que los tengan).
Besventajas ue las llaves foineas viituales:
El ienuimiento no es tan optimo como el ue las auministiauas uiiectamente poi el motoi ue base ue uatos. La integiiuau solo es valiuaua cuanuo las opeiaciones se iealizan meuiante eventos iealizauos a tiavs ue los mouelos. PbObaOb I8#,8 "$, 33,M# *.8U$#, M(8%",3 El mtouo piotegiuo ue ActiveRecorJ llamauo oJJIoreiqnKey peimite la uefinicion ue llaves foineas viituales en el inicializauoi ue la clase mouelo.
Neuiante convenciones se coloca solamente el nombie uel campo y ue esta foima la tabla y campo iefeienciauo se intuye noimalmente:
//Un campo a un campo $this->addForeignKey(code_cat, categories, code);
//Varios campos a varios campos $this->addForeignKey( array(country_born, city_born), cities, array(country_code, city_code) );
}
} PbObaOP [2+(.$#7 -# 3,7 33,M#7 *.8U$#,7 El cuaito paimetio ue oJJIoreiqnKey peimite establecei opciones auicionales como el mensaje a geneiai cuanuo se viole la integiiuau y las acciones a iealizai cuanuo se actualiza o boiia un iegistio y falla el pioceso ue valiuacion.
$this->addForeignKey(office_id, office, id, array( message => La oficina %s no existe, on_delete => ActiveRecord::ACTION_CASCADE, on_update => ActiveRecord::ACTION_RESTRICT ));
}
}
T,93,5 [2+(.$#7 -# ,--!.8#()$h#\
[2+(:$ 6#7+8(2+(:$ message Nensaje uel valiuauoi cuanuo se viola la llave foinea y la accion efectuaua uebe iestiingii la opeiacion. on_uelete Establece una accion a ejecutai cuanuo una llave foinea es violaua al hacei una eliminacion ue uatos en la entiuau. El valoi es alguna ue las constantes ActiveRecoiu::ACTI0N_CASCABE o ActiveRecoiu::ACTI0N_RESTRICT. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 241
on_upuate Establece una accion a ejecutai cuanuo una llave foinea es violaua al hacei una actualizacion ue uatos en la entiuau. El valoi es alguna ue las constantes ActiveRecoiu::ACTI0N_CASCABE o ActiveRecoiu::ACTI0N_RESTRICT.
T,93,5 B++(.$#7 -#2#$-(#$-. -# 3, .2#8,+(:$
[2+(:$ 6#7+8(2+(:$ ActiveRecoiu::ACTI0N_CASCABE Cuanuo se iealiza una eliminacion ue uatos inuica que touas los uatos en llaves uepenuientes ueben sei eliminauos antes ue efectuai la opeiacion. Esto peimite que no queuen iegistios huifanos. En una actualizacion se actualiza el nuevo valoi en las ielaciones uepenuientes. ActiveRecoiu::ACTI0N_RESTRICT Inuica que se uebe cancelai la opeiacion actual uebiuo a la violacion ue la llave foinea. El objeto ActiveRecorJHessoqe es caigauo con el mensaje estableciuo en la opcion 'message'.
21.18 Entidades Temporales Auministiai uatos en una entiuau piopoiciona iecuisos impoitantes paia las aplicaciones ue negocios. En cieitas ocasiones se iequieie utilizai entiuaues paia almacenai uatos tempoiales que peimitan la ejecucion ue piocesos ue negocio sin que estas afecten el uominio ue uatos en foima notable.
El componente ActiveRecorJ piopoiciona el subcomponente TempororyActiveRecorJ el cual peimite cieai mouelos que auministian sus uatos sobie entiuaues tempoiales en el gestoi ielacional.
Este tipo ue entiuaues pueuen sei consiueiauas ue alto ienuimiento ya que no iequieien ue esciituia ue uisco auems este tipo ue mouelos estn optimizauos paia un piocesamiento ms efectivo en memoiia.
En estos casos la peisistencia es tempoial ya que touos los uatos que auministia el mouelo existen en memoiia mientias la conexion al gestoi ielacional esta activa. Como estas conexiones se iealizan en mouo no-peisistente los uatos en las entiuaues cieauas solo existen uuiante el tiempo que emplee la peticion en ejecutaise poi completo cienuose y uestiuynuose caua vez que se utilicen. PbOb`Ob I8#,8 "$ T#12.8,8\B+%(M#<#+.8- Lo siguiente se uebe hacei paia cieai un mouelo tempoial:
Se ciea un mouelo que extienua al subcomponente TempororyActiveRecorJ en el uiiectoiio ue mouelos. Se uebe implementai un mtouo piotegiuo que se uebe llamai _tobleBefinition es iequeiiuo paia obtenei la uefinicion ue la entiuau, esta constituye un aiiay asociativo con las llaves ottributes e inJexes. La llave ottributes es obligatoiia y contiene un vectoi asociativo cuyas llaves coiiesponuen a los nombies ue los campos y cuyo valoi es una uesciipcion uel campo tal y como es aceptaua poi el mtouo ue los auaptauoies uel componente Bb llamauo creoteToble. Cuanuo se uefinan los atiibutos uel mouelo como piotegiuos se ueben uefinii con los mismos nombies utilizauos en la uefinicion uel mtouo _tobleBefinition. Si no se uefinen los atiibutos piotegiuos ActiveRecorJ los uefinii como pblicos aunque esto no es iecomenuable. Las entiuaues tempoiales tambin sopoitan ielaciones uniuiieccionales y biuiieccionales uefininuose como es usual en los mouelos peisistentes. PbOb`OP I.12.8%,1(#$%. -# "$ T#12.8,8\B+%(M#<#+.8- El siguiente compoitamiento uebe teneise en cuenta cuanuo se tiabaja con entiuaues tempoiales:
Al instanciaise poi piimeia vez la clase uel mouelo tempoial cuanuo el Facility es 0SER_LEvEL se ciea una tabla tempoial en la conexion poi uefecto al gestoi ielacional. La tabla tempoial cieaua tiene el nombie ue la clase utilizaua las limitaciones uel gestoi ielacional en cuanto a los nombies ue tablas y que otias entiuaues no existan con este nombie ueben sei teniuas en cuenta. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 24S
Las sentencias ue cieacion ue la tabla tempoial no coiiesponuen a manipulacion ue uatos poi lo tanto las tiansacciones globales y locales no tienen en cuenta esta opeiacion. Como la tabla es cieaua en caua peticion en uonue se haga uso uel mouelo los meta- uatos ue la tabla no son almacenauos asi que no es posible obtenei infoimacion ue esta usanuo ActiveRecorJHetoBoto. La tabla es uestiuiua en cuanto se cieiia la conexion con el gestoi ielacional, si es iequeiiuo uestiuiila uesue la aplicacion se pueue usai el mtouo uel auministiauoi ue entiuaues FntityHonoqer::JestroyTempororyFntity{strinq $nome) uonue $nome es el nombie uel mouelo, este mtouo uestiuye la tabla tempoial en caua conexion al gestoi ielacional uonue fue cieaua. Si una nueva instancia uel la clase mouelo es invocaua o utilizaua la tabla tempoial se cieai nuevamente. PbOb`Oc T8,$7,++(.$#7 +.$ /$%(-,-#7 T#12.8,3#7 Las opeiaciones ue manipulacion ue uatos sobie las entiuaues tempoiales sopoitan tiansacciones en foima tianspaiente, aunque se uebe tenei en cuenta que no touos los gestoies ielacionales sopoitan tiansacciones en tablas tempoiales.
Al cieai una tiansaccion ya sea uiiectamente con ActiveRecorJTronsoction o usanuo TronsoctionHonoqer se ciea una nueva conexion tempoial al gestoi ielacional y es posible que la tabla tempoial est cieaua sobie la conexion no-tiansaccional poi uefecto.
Cuanuo esto se uetecta, ActiveRecorJ ciea nuevamente la tabla en la conexion tiansaccional peio es seguio que los uatos que ya se hayan almacenauo usanuo los mouelos asociauos a la conexion no tiansaccional no esten uisponibles en la nueva. PbOb`Od ;7,8 "$ T#12.8,8\B+%(M#<#+.8- En el siguiente ejemplo se ilustia como implementai una entiuau tempoial y como utilizailo en un pioceso ue negocio.
El mouelo tempoial moJels,proJuct_stoJistics.pbp queua asi:
/0#123.5 I8#,8 "$, #$%(-,- %#12.8,3
<?php
class ProductStadistics extends TemporaryActiveRecord {
protected function initialize(){ $this->belongsTo("product"); }
}
El mouelo anteiioi peimite ingiesai una seiie ue uatos y apiovechai las capaciuaues ue oiuenamiento y agiupamiento paia obtenei las estauisticas ue la venta ue unos piouuctos.
Es necesaiio que las entiuaues ielacionauas al pioceso ue negocio esten asociauas a la tiansaccion uonue se manipulan los uatos ue la entiuau tempoial cuanuo se instancian uiiectamente ue la clase mouelo o se inyectan en el contiolauoi usanuo $tbis.
print "La cantidad total de productos es: "; print $productStadistic->sum("cantidad")."<br>";
print "La cantidad minima es: "; print $productStadistic->minimum("cantidad")."<br>";
print "La cantidad mxima es: "; print $productStadistic->maximum("cantidad")."<br>";
print "El promedio de cantidad es: "; print $productStadistic->average("cantidad")."<br>"; } catch(TransactionFailed $e){ Flash::error($e->getMessage()); } 21.19 ActiveRecordJoin El subcomponente ActiveRecorJ}oin peimite apiovechai las ielaciones estableciuas en el mouelo ue uatos paia geneiai consultas simples o con agiupamientos en ms ue 2 entiuaues ielacionauas o no ielacionauas, pioponienuo una foima auicional ue utilizai el 0bject- Relotionol-Hoppinq (0RN).
El constiuctoi ue la clase acepta un vectoi con las opciones ue la consulta. Be acueiuo al tipo (consulta simple, agiupacion ue conteo, sumatoiia, mximo, minimo) que se iequieia utilizai estos vaiian.
En el ejemplo existen 4 entiuaues ProJucts ProJuctCoteqories, Customers, lnvoices e lnvoiceslines:
// Modelo de Categorias de Productos class ProductsCategories extends ActiveRecord {
public function initialize(){ // Relacin 1-n con productos $this->hasMany("products"); }
}
// Modelo de Productos class Products extends ActiveRecord {
public function initialize(){ // Relacion 1-1 inversa con categorias de productos $this->belongsTo("products_categories"); // Relacion 1-n con lineas de facturas $this->hasMany("invoices_lines"); }
}
// Modelo de Clientes class Customers extends ActiveRecord {
public function initialize(){ // Relacion 1-n con facturas $this->hasMany("invoices"); }
// Modelo de Facturas class Invoices extends ActiveRecord {
public function initialize(){ // Relacion 1-1 inversa con clientes $this->belongsTo("customers"); }
}
// Modelo de Detalle de Facturas class InvoicesLines extends ActiveRecord {
public function initialize(){ // Relacion 1-1 inversa con clientes $this->belongsTo("invoices"); // Relacion 1-1 inversa con productos $this->belongsTo("products"); }
}
0na vez se uefinan las ielaciones entie las entiuaues uel uominio ue uatos es posible utilizailas tanto paia obtenei iegistios simples o colecciones meuiante ActiveRecor}oin:
/0#123.5 L,+#8 "$ ].($ -# %8#7 #$%(-,-#7
//Listar los productos vendidos, su cantidad y la fecha en que se vendieron
Los iesultauos ue la consulta pueuen sei obteniuos meuiante el mtouo qetResultSet{) uel objeto ActiveRecorJ}oin. El valoi ue caua columna ue la consulta pueue sei obteniuo usanuo un qetter viitual cieauo implicitamente en caua objeto iesultauo o meuiante el nombie ue la columna como una piopieuau pblica.
La consulta inteina SQL SELECT pueue sei examinaua meuiante el mtouo qetSluery{) ActiveRecorJ}oin. La consulta anteiioi geneia la siguiente sentencia: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 248
/0#123.5 'fE )#$#8,-. 2.8 B+%(M#<#+.8-].($
SELECT products.name, invoices.sell_date, invoices_lines.quantity FROM invoices, products, invoices_lines WHERE products.id = invoices_lines.products_id AND invoices.id = invoices_lines.invoices_id ORDER BY 1
Notse como las ielaciones auecuauas hacen paite ue la sentencia SELECT en foima uinmica. PbObiOb B)8"2,1(#$%.7 +.$ B+%(M#<#+.8-].($ ActiveRecorJ}oin peimite cieai consultas avanzauas utilizanuo agiupamientos. Los agiupamientos sopoitauos son: sumatoiias, conteos, minimos, mximos y piomeuios. 0n agiupamiento se establece ue la siguiente foima:
//Cuantos productos se han vendido por cada producto $query = new ActiveRecordJoin(array( "entities" => array("Invoices", "Products", "InvoicesLines"), "groupFields" => array("{#Products}.name"), "sumatory" => array("{#InvoicesLines}.quantity") ));
// Cuantos productos se han vendido por cada producto, cuya cantidad vendida sea // mayor a 150 $query = new ActiveRecordJoin(array( "entities" => array("Invoices", "Products", "InvoicesLines"), "groupFields" => array("{#Products}.name"), "sumatory" => array("{#InvoicesLines}.quantity"), "having" => "quantity>10" ));
//En promedio cul ha sido el precio del producto durante el mes de octubre $query = new ActiveRecordJoin(array( "entities" => array("Invoices", "Products", "InvoicesLines"), "groupFields" => array("{#Products}.name"), "sumatory" => array("{#InvoicesLines}.price"), "conditions" => "MONTH({#Invoices}.sell_date) = 10" )); PbObiOP K,8U1#%8.7 -# B+%(M#<#+.8-].($ Los paimetios sopoitauos poi ActiveRecoiu}oin son:
T,93,5 K,8U1#%8.7 7.2.8%,-.7 2.8 B+%(M#<#+.8-].($
[2+(:$ 6#7+8(2+(:$ entities 0n vectoi que inuica los mouelos utilizauos paia iealizai el join. No se uebe utilizai el mismo nombie las tablas sino el nombie ue las clases usauas como mouelos paia acceuei a LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 249
ellas. conuitions 0n stiing con conuiciones auicionales uel join. No se uebe utilizai los nombies ue las tablas en las conuiciones sino la convencion NombieClase. (opcional) sumatoiy 0n vectoi con los campos en los cuales se uebe aplicai un agiupamiento ue sumatoiia. (opcional) aveiage 0n vectoi con los campos en los cuales se uebe aplicai un agiupamiento ue piomeuio. (opcional) count 0n vectoi con los campos en los cuales se uebe aplicai un agiupamiento ue conteo. (opcional) maximum 0n vectoi con los campos en los cuales se uebe aplicai un agiupamiento ue valoi mximo. (opcional) minimum 0n vectoi con los campos en los cuales se uebe aplicai un agiupamiento ue valoi minimo. (opcional) having 0n stiing con conuiciones paia el agiupamiento. (opcional). noRelations Con el valoi tiue inuica que no se ueben constiuii uinmicamente las ielaciones entie las entiuaues uel join. Poi uefecto su valoi es false. (opcional).
21.20 ActiveRecordUnion El objetivo uel subcomponente ActiveRecorJ0nion es unii uos o ms objetos ActiveRecorJResultset o ActiveRecorJRow sin volcai a memoiia los iesultauos piouuciuos poi ellos consiguienuo una gestion ue los iecuisos ue la aplicacion ms eficiente. 21.21 SessionRecord El subcomponente SessionRecorJ peimite auministiai entiuaues ue peisistencia ue sesion ue foima natuial como si fuesen entiuaues peio uestinauas a mantenei iegistios ue maneia inuepenuiente poi iu ue sesion. El estauo ue los objetos instanciauos es trosient ya que al teiminaise la sesion los uatos se vuelven inusables.
Poi uefecto las entiuaues tipo SessionRecorJ localizan el campo siJ que ueben tenei un tamao suficiente paia almacenai un valoi ue iuentificauoi ue sesion. El valoi ue la vaiiable ue configuiacion ue PBP session.bosb_function establece el tipo ue algoiitmo utilizauo paia LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2Su
geneiai el iuentificauoi ue sesion, si su valoi es u inuica que se usa muS ue 128 bits (SS caiacteies) y cuanuo es 1 inuica que es sha1 ue 16u bits (4u caiacteies).
La siguiente tabla contiene la estiuctuia necesaiia paia utilizai una entiuau con SessionRecorJ.
La uefinicion ue la clase ue un mouelo ue este tipo es la noimal peio en vez ue heieuai ue ActiveRecorJ uebe heieuai ue la clase SessionRecorJ. Las opeiaciones sobie el mouelo se ejecutan noimalmente con la uifeiencia que los iegistios giabauos y uevueltos siempie hain iefeiencia a aquellos uonue el session_iu actual sea el uel campo siu ue la tabla. 21.22 PropertyAccessors y Mutators ActiveRecorJ acceue al valoi ue los atiibutos ue la tabla al iealizai una opeiacion meuiante los mtouos reoJAttribute y writeAttribute heieuauos en cualquiei mouelo. El uesaiiollauoi pueue sobieesciibii estos atiibutos en la uefinicion uel mouelo y contiolai la foima en que obtienenestablecen inteinamente los valoies ue los atiibutos ue la entiuau.
} 21.23 DynamicUpdate y DynamicInsert 0n mouelo tiene la piopieuau ue ahoiiai tiabajo al gestoi ielacional meuiante estas opciones. En el piimeio al iealizai una opeiacion ue actualizacion solo los campos que han cambiauo en la base ue uatos son actualizauos, en la segunua solo los campos que contienen valoies no nulos se inseitan en la opeiacion. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S1
Poi uefecto ambas piopieuaues estan uesactivauas paia cambiai su valoi se ueben usai los mtouos piotegiuos setBynomic0pJote y setBynomiclnsert iespectivamente. Al activailas en contia piestacion poi ejemplo al actualizai caua iegistio uebe leeise antes ue iealizai la opeiacion y compaiaiai caua valoi ue los atiibutos con el uel objeto actual.
/H+#2+(:$ I.12.$#$%# 6#7+8(2+(:$ BbException Bb Excepcion geneiica lanzaua poi auaptauoi ue conexion al gestoi ielacional utilizauo. BbLockAuquisitionException Bb Excepcion lanzaua cuanuo la tiansaccion actual en la conexion no pueue efectuai un bloqueo sobie algn iecuiso poi ejemplo una tabla o una seiie ue iegistios. BbSQLuiammaiException Bb Excepcion lanzaua cuanuo se envia una sentencia SQL mal foimaua o con eiioies ue sintaxis. BbInvaliuFoimatException Bb Excepcion lanzaua cuanuo se tiata ue asignai un valoi con un LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S2
foimato invaliuo al tipo ue uato ue la columna en una una entiuau. BbContiaintviolationException Bb Excepcion lanzaua cuanuo la opeiacion ue mouificacion o actualizacion viola un constiaint ue llave foinea. ActiveRecoiuException ActiveRecoiu Excepcion geneiica ue ActiveRecoiu. PbOPdOb I,2%"8,8 #H+#2+(.$#7 -#$%8. -# 1.-#3.7 Si se iequieie tiatai las excepciones geneiauas uentio ue un mouelo en especifico se pueue sobieesciibii el mtouo piotegiuo exceptions el cul iecibe las excepciones geneiauas y poi uefecto las ie-lanza al contiolauoi o la vista uonue se invoco el mouelo.
En el siguiente ejemplo se ilustia como efectuai un pioceuimiento que tiate las excepciones poi violacion ue llaves foineas paia un mouelo en paiticulai:
PbOPdOP Z$*.81,+(:$ -# /H+#2+(.$#7 Las excepciones geneiauas poi el auaptauoi al motoi ue base ue uatos usualmente peimiten obtenei mayoi infoimacion sobie el entoino ue la excepcion agieganuo uatos como el couigo y uesciipcion ue bajo nivel geneiauas poi el RTP.
En el capitulo uel componente Bb se explica como obtenei mayoi infoimacion sobie excepciones geneiauas en la base ue uatos. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2SS
21.25 Plugins de Modelos Los Pluqins ue mouelos o capa ue uatos peimiten extenuei la funcionaliuau uel componente ActiveRecorJ y sus subcomponentes. La aiquitectuia ue plugins ue ActiveRecorJ peimite obseivai, extenuei y manipulai el compoitamiento ue los mouelos ue la aplicacion segn las conuiciones lo exijan.
Los plugins peimiten inteiceptai eventos ue los mouelos ue tal foima que estos sean obseivables y auems ejecutise uno tias otio ue maneia centializaua sin iequeiii iefactoiizacion o ieintegiacion en la aplicacion. PbOPNOb I8#,8 "$ K3")($ -# B+%(M#<#+.8- Los plugins ue ActiveRecoiu son clases que implementan eventos que son invocauos a meuiua que avanza la ejecucion uel pioceso ue acceso a la capa ue uatos en cualquiei peticion. Estas clases ueben cumplii con los siguientes iequeiimientos:
! Beben estai ubicauos en el uiiectoiio ue plugins usualmente opps,opp-nome,pluqins ! El nombie uel aichivo que implementa la clase uebe sei el nombie uel plugin ! El nombie ue la clase uebe tenei la extension Pluqin ! Los plugins ue contiolauoi ueben heieuai ue la clase HoJelPluqin o sei subclase ue ella
Las clases pueuen implementai mtouos pblicos que iefeiencian los eventos ocuiiiuos en los contiolauoies, la lista ue ellos es la siguiente:
4.198# /M#$%. 6#7+8(2+(:$ afteiInitialize 0cuiie uespus ue inicializai un mouelo. Noimalmente los mouelos son inicializauos solo una vez en caua peticion. onException 0cuiie cuanuo se geneia una excepcion uentio ue un mouelo.
21.26 Organizacin de Modelos Los aichivos ue mouelos ueben estai ubicauos en el uiiectoiio moJels, o uonue la vaiiable ue configuiacion moJelsBir lo inuique. Cuanuo los mouelos se caigan en mouo auto-inicializauoi LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S4
es posible oiganizailos en subuiiectoiios ue tal foima que iepiesenten un giupo o categoiia logica al cual peitenezcan.
0n ejemplo ue una oiganizacion logica es el siguiente:
/0#123.5 [8),$(>,+(:$ 3:)(+, -# 1.-#3.7
models/ base/ modelBase.php security/ roles.php users.php access_list.php inventory/ references.php kardex.php orders.php movement.php 21.27 Auto-inicializacin de Modelos Los mouelos pueuen inicializaise ue 2 foimas, automticamente o uinmicamente. Poi uefecto los mouelos son auto-inicializauos esto significa que en caua peticion touas las clases uel uiiectoiio ue mouelos son leiuas y se constiuyen las ielaciones y iestiicciones uefiniuas en ellos.
El usai una foima o la otia uepenue uel tipo ue aplicacion que se tenga. Es iecomenuable usai auto-inicializacion cuanuo:
El seiviuoi uonue est instalaua la maquina tiene buenas piestaciones (uiscos uuios ipiuos, piocesauoies ue ltima geneiacion, etc). Con ielacion a las piestaciones uel seiviuoi el nmeio ue mouelos y su complejiuau en cuanto a ielaciones y iestiicciones es moueiauo o bajo. La aplicacion iequieie fiecuentemente uel acceso a la mayoi paite ue los mouelos en la mayoi paite ue los piocesos ue negocio.
Besventajas ue la auto-inicializacion:
Bepenuienuo ue las conuiciones, el acceso a uisco pueue elevaise consiueiablemente en caua peticion Si los mouelos tienen muchas ielaciones y iestiicciones se pouiia aumentai el LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2SS
consumo ue memoiia innecesaiiamente
Se iecomienua utilizai inicializacion uinmica cuanuo:
El seiviuoi tiene bajas piestaciones o una concuiiencia elevaua La aplicacion iequieie ue mouelos en foima selectiva sin que haya un pation uefiniuo ue acceso a ellos El nmeio ue mouelos ue la aplicacion es alto y hay muchas ielaciones y iestiicciones entie ellas.
Besventajas ue la inicializacion uinmica:
Piocesos que iequieian vaiios mouelos simultaneamente pueue elevai los iecuisos ue piocesamiento solicitauos poi la aplicacion Solo los mouelos inicializauos son llevauos a las vistas asociauas a la peticion
PbOPaOb B+%(M,8 ($(+(,3(>,+(:$ -($U1(+, Paia activai la inicializacion uinmica se uebe agiegai la seccion entities con la vaiiable ue configuiacion outolnitiolize = 0ff al aichivo ue configuiacion confiq,confiq.ini ue la aplicacion. 0n aichivo ue configuiacion confiq.ini queua asi:
22 Componente EntityManager 22.1 Introduccin El componente FntityHonoqer es usauo inteinamente poi el fiamewoik y piincipalmente poi ActiveRecorJ y Controller paia auministiai las entiuaues, sus ielaciones ue asociacion, ielaciones ue integiiuau y geneiauoies ue tal foima que el acceso a ellas sea consistente y unifoime.
La clase FntityHonoqer es una clase abstiacta en la que sus mtouos solo pueuen sei invocauos estticamente, ue esta foima se aseguia que los uatos ue entiuaues y sus ielaciones existan solo una vez poi pioceso ue negocio. 22.2 Obtener una nueva instancia de un Modelo Caua vez que se llama el constiuctoi ue una clase ue ActiveRecorJ se ejecutan pioceuimientos inteinos como la inicializacion uel mouelo, tals como la localizacion uel Joto source, la uefinicion ue las ielaciones con otios mouelos y en algunos casos se tiata ue volcai los meta- uatos ue la tabla si estos no se encuentian uisponibles paia la aplicacion.
El componente FntityHonoqer piopoiciona el mtouo qetFntitylnstonce{strinq $instonceNome) que peimite obtenei una instancia ue la entiuau ya inicializaua mejoianuo el ienuimiento ue un pioceso ue negocio.
En el siguiente ejemplo se muestia como se ieemplaza el instanciamiento meuiante new poi el mtouo ue obtenei instancias ya inicializauas en blanco:
4.%,5 Pouiia obtenei un eiioi como "Fatal eiioi: Cannot ieueclaie class Piouucts in pathtoapplicationinstanceappsuefaultmouelspiouucts.php on line 2Su" si no establece el paimetio ue qetFntitylnstonce usanuo el nombie ue la clase mouelo tal y como fu uefiniua en el aichivo uel mouelo. 22.3 API del Componente EntityManager El uesaiiollauoi no uebeiia inteiactuai uiiectamente con este componente ya que ActiveRecorJ y sus subcomponentes son los encaigauos ue utilizai este API paia auministiai las ielaciones y la infoimacion ue las entiuaues. La siguiente API es piesentaua buscanuo ayuuai a extenuei el coie uel fiamewoik o ieemplazai este componente.
PPOcOb @_%.-.7 2,8, ($(+(,3(>,8 1.-#3.7 \ .9%#$#8 ($7%,$+(,7 -# #33.7 stotic function orroy qetFntities{) 0btiene un vectoi con touas las entiuaues inicializauas en la peticion actual.
stotic function voiJ setAutolnitiolize{booleon $outolnitiolize) Establece si los mouelos son auto-inializauos o no.
stotic function booleon qetAutolnitiolize{) Inuica si los mouelos estn sienuo auto-inicializauos o no.
stotic function voiJ setHoJelsBirectory{strinq $moJelsBir) Establece el uiiectoiio uesue uonue ueben sei caigauos los mouelos.
stotic function mixeJ qetFntitylnstonce{strinq $entityNome, booleon $newlnstonce=true) 0btiene una instancia ue una clase ue un mouelo. Si se pasa false en el segunuo paimetio se obtiene una instancia existente.
Caiga la clase ActiveRecoiu ubicaua en el uiiectoiio ue mouelos ue la aplicacion.
stotic function voiJ initHoJels{strinq $moJelsBir) Inicializa el uiiectoiio ue mouelos caiganuolos e inicializanuolos.
stotic function booleon isFntity{strinq $entityNome) Peimite consultai si existe un ueteiminauo mouelo en la peticion actual.
stotic function booleon isHoJel{strinq $moJelNome) Es un alias uel mtouo isEntity.
stotic function strinq qetFntityNome{strinq $moJel) 0btiene el nombie ue una entiuau ue acueiuo a su oiigen ue uatos (tabla).
stotic function voiJ oJJFntityByCloss{strinq $entityCloss) Inicializa un uinmicamente mouelo poi el nombie ue su clase.
PPOcOP @_%.-.7 2,8, ,-1($(7%8,8 8#3,+(.$#7 -# 1"3%(23(+(-,- stotic function booleon existsBelonqsTo{strinq $entityNome, strinq $relotionRequesteJ) Peimite consultai si una entiuau est ielacionaua con otia meuiante una ielacion tipo belongsTo (muchos a 1) al menos uniuiieccionalmente.
stotic function booleon existsEosHony{strinq $entityNome, strinq $relotionRequesteJ) Peimite consultai si una entiuau est ielacionaua con otia meuiante una ielacion tipo hasNany (1 a muchos) al menos uniuiieccionalmente.
stotic function booleon existsEos0ne{strinq $entityNome, strinq $relotionRequesteJ) Peimite consultai si una entiuau est ielacionaua con otia meuiante una ielacion tipo has0ne (1 a 1) al menos uniuiieccionalmente.
stotic function booleon qetBelonqsToRecorJs{strinq $entityNome, strinq $relotionRequesteJ, ActiveRecorJ $recorJ) 0btiene un iesultauo ue los iegistios ielacionauos meuiante una ielacion ue multipliciuau belongsTo. El paimetio $iecoiu es la instancia ue un mouelo utilizaua paia efectuai la LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S9
opeiacion.
stotic function booleon qetEos0neRecorJs{strinq $entityNome, strinq $relotionRequesteJ, ActiveRecorJ $recorJ) 0btiene un iesultauo ue los iegistios ielacionauos meuiante una ielacion ue multipliciuau has0ne. El paimetio $iecoiu es la instancia ue un mouelo utilizaua paia efectuai la opeiacion.
stotic function booleon qetEosHonyRecorJs{strinq $entityNome, strinq $relotionRequesteJ, ActiveRecorJ $recorJ) 0btiene un iesultauo ue los iegistios ielacionauos meuiante una ielacion ue multipliciuau hasNany. El paimetio $iecoiu es la instancia ue un mouelo utilizaua paia efectuai la opeiacion.
stotic function voiJ oJJBelonqsTo{strinq $entityNome, strinq $fielJs='', strinq $referenceToble='', strinq $referenceJIielJs='', strinq $relotionNome='') Agiega una ielacion belongsTo al auministiauoi ue entiuaues en foima piogiamacional.
stotic function voiJ oJJEosHony{strinq $entityNome, mixeJ $fielJs='', strinq $referenceToble='', mixeJ $referenceJIielJs='') Agiega una ielacion belongsTo al auministiauoi ue entiuaues en foima piogiamacional.
stotic function voiJ oJJEos0ne{strinq $entityNome, mixeJ $fielJs='', strinq $referenceToble='', mixeJ $referenceJIielJs='') Agiega una ielacion bos0ne al auministiauoi ue entiuaues en foima piogiamacional.
stotic function voiJ oJJTrosientAttribute{strinq $entityNome, strinq $ottribute) Agiega un atiibuto ue una entiuau que no uebe sei peisistiuo.
static function aiiay getRelations0f(stiing $entityName) 0btiene un aiiay con las ielaciones que han siuo uefiniuas paia una ueteiminaua entiuau. PPOcOc @_%.-.7 ,-1($(%8,8 2,8, /$%(-,-#7 T#12.8,3#7 stotic function booleon existsTempororyFntity{strinq $entityNome) Peimite consultai si una entiuau tempoial ya ha siuo uefiniua. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 26u
stotic function voiJ oJJTempororyFntity{strinq $entityNome) Agiega una entiuau tempoial al auministiauoi ue entiuaues.
stotic function voiJ JestroyTempororyFntity{strinq $entityNome) Bestiuye una entiuau tempoial uel auministiauoi ue entiuaues.
stotic function booleon isCreoteJTempororyFntity{BbBose $connection, strinq $entityNome) Consulta si una entiuau tempoial ya ha siuo cieaua en una ueteiminaua conexion.
PPOcOd [8()#$#7 -# -,%.7 stotic function strinq qetSourceNome{strinq $entityNome) 0btiene el oiigen ue uatos (tabla) ue una ueteiminaua entiuau
PPOcON B-1($(7%8,8 )#$#8,-.8#7 -# #$%(-,-#7 static function voiu setEntityueneiatoi(stiing $entityName, stiing $auaptei, stiing $column, aiiay $options) Establece el geneiauoi ue una ueteiminaua entiuau.
stotic function booleon bos6enerotor{strinq $entityNome) Inuica si una entiuau tiene uefiniuo algun geneiauoi.
stotic function ActiveRecorJ6enerotor qetFntity6enerotor{strinq $entityNome) 0btiene el geneiauoi ue una ueteiminaua entiuau.
stotic function orroy qetAllCreoteJ6enerotors{) 0btiene touos los geneiauoies uefiniuos en la peticion actual.
PPOcOe EE,M#7 *.8U$#,7 M(8%",3#7 static function voiu auuFoieignKey(stiing $entityName, aiiay $fielus='', stiing $iefeienceTable='', aiiay $iefeienceuFielus='', aiiay $options=aiiay()) Establece una llave foinea viitual en una entiuau.
23 Componente TransactionManager 23.1 Introduccin El objetivo ue este componente es auministiai las tiansacciones globales iequeiiuas poi los piocesos ue negocio ue una aplicacion. Su API es utilizaua paia acceuei a un gestoi ielacional en una uniuau ue tiabajo en paiticulai. Toua la aiquitectuia ue este componente piopoiciona a las aplicaciones uesaiiollauas en Kumbio Fnterprise un conteneuoi paia auministiacion ue tiansacciones en PBP como los usauos en }ava EE.
Es iesponsable ue abiii y ceiiai tiansaciones mantenienuo uniuaues ue tiabajo en foima contiolaua. Las tiansacciones pueuen sei cieauas piogiamacionalmente o ueclaiativamente. 23.2 Contexto de Scope Persistente El TronsoctionHonoqer es el puente paia que objetos uel 0RN pueuan inteiactuai con su contexto peisistente auecuauo. Caua objeto que es ligauo a una tiansaccion auministiaua poi el conteneuoi es notificauo ue otias tiansacciones activas en el mismo contexto. Los objetos mantienen su estauo y este es ieplicauo cuanuo se abie o cieiia la tiansaccion infoimanuo el estauo ue la misma. 23.3 Event Listeners El componente TronsoctionHonoqer hace uso uel CommonFventlnfroestructure ue Kumbio Fnterprise paia notificai eventos a los objetos uepenuientes ue una tiansaccion y tambin entie ellos mismos.
Los eventos sopoitauos son:
T,93,5 /M#$% E(7%#$#87 -# T8,$7,+%(.$@,$,)#8 /M#$%. 6#7+8(2+(:$ uelete 0cuiie cuanuo un objeto es uestiuiuo cuanuo se ieplica el estauo uel mismo en la peisistencia. cieate 0cuiie cuanuo un objeto es cieauo. upuate 0cuiie cuanuo un objeto es actualizauo. pieInseit 0cuiie antes ue iealizai una inseicion ue un iegistio. pieBelete 0cuiie antes ue iealizai una eliminacion ue un iegistio. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 26S
pieLoau 0cuiie al cieai un objeto instanciauo como iesultauo ue una consulta. postInseit 0cuiie uespus ue iealizai una inseicion. postBelete 0cuiie uespus ue iealizai una eliminacion. post0puate 0cuiie uespus ue iealizai una actualizacion. 23.4 Estados de las entidades Las entiuaues pueuen tenei los siguientes estauos cuanuo inteivienen en piocesos tiansaccionales:
! /7%,-. 4#R5 Cuanuo una entiuau es cieaua meuiante el opeiauoi new poi uefecto se encuentia ligaua a una conexion no tiansaccional y no iepiesenta ningun iegistio ue la base ue uatos. ! /7%,-. @,$,)#-5 Cuanuo una entiuau est asociaua a una tiansaccion cieaua poi el TronsoctionHonoqer se uice que se encuentia en estauo auministiauo. ! /7%,-. 6#%,+C#-5 Cuanuo la entiuau peitenecio a una tiansaccion auministiaua peio la tiansaccion ya fue ceiiaua o su contexto fue cambiauo a la conexion no tiansaccional. ! /7%,-. <#1.M#-5 Cuanuo la entiuau fue eliminaua ue la peisistencia y poi lo tanto no pueue estai asociaua a un contexto tiansaccional. 23.5 Asignar el objeto al estado administrado Los mtouos ue ActiveRecorJ llamauos setTronsoction{) y JetocbTronsoction{) peimiten cambiai piogiamacionalmente el estauo tiansaccional ue un objeto.
Cuanuo la tiansaccion es ceiiaua ya sea poi un iollback o commit los objetos no son automticamente cambiauos al estauo JetocbeJ. Las tiansacciones ceiiauas ya no son usables peio la uniuau ue tiabajo mantiene su uepenuencia a la tiansaccion. El uesligamiento ue los LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 264
objetos ue la tiansaccion pueue iealizaise manualmente o llamai el mtouo JetocbBepenJencies{) ue ActiveRecorJTronsoction. 23.6 API de TransactionManager stotic function ActiveRecorJTronsoction qet0serTronsoction{TronsoctionBefinition $Jefinition='') Ciea o obtiene una tiansaccion ActiveRecorJTronsoction. Si se uefine una uefinicion ue tiansaccion se ciea una nueva.
stotic function voiJ initiolizeHonoqer{) Inicializa el auministiauoi ue tiansacciones. El uesaiiollauoi no uebe invocai este mtouo ya que es automticamente llamauo poi el conteneuoi ue aplicaciones al iniciai la peticion.
stotic function voiJ rollbockPenJent{) Realiza un iollback sobie touas las tiansacciones auministiauas poi el TiansactionNanagei. Cuanuo ocuiie una excepcion no captuiaua el fiamewoik llama este mtouo paia cancelai cualquiei opeiacion penuiente y asi cuiuai la integiiuau ue los uatos.
stotic function voiJ commit{) Realiza un commit sobie touas las tiansacciones auministiauas poi el TiansactionNanagei.
stotic function voiJ rollbock{) Realiza un iollback sobie touas las tiansacciones auministiauas poi el TiansactionNanagei.
stotic function voiJ notifyRollbock{ActiveRecorJTronsoction $tronsoction) Peimite notificai a otias tiansacciones auministiauas poi el TiansactionNanagei que una tiansaccion iealizo un iollback buscanuo que las uems tambin lo hagan.
stotic function voiJ notifyCommit{ActiveRecorJTronsoction $tronsoction) Peimite notificai a otias tiansacciones auministiauas poi el TiansactionNanagei que una tiansaccion iealizo un commit buscanuo que las uems tambin lo hagan.
24 Presentacin 24.1 Introduccin La capa ue piesentacion es la teiceia ue la aiquitectuia ue una aplicacion Web y peimite uefinii inteifaces y mtouos paia inteiactuai con el usuaiio final asi como piesentaile infoimacion al mismo.
25 Componente View 25.1 Introduccin El componente view se encaiga ue auministiai la foima estnuai en la que se geneia la piesentacion al usuaiio final en su exploiauoi.
La piesentacion estnuai en una aplicacion en Kumbio Fnterprise se basa en vaiios pationes ue uiseo que peimiten ieuucii la couificacion y hacei ms mantenible esta paite uel uesaiiollo.
El piimei pation utilizauo es Templote view el cul habla ue utilizai tags peisonalizauos o maicas embebiuas en el conteniuo uinmico piopoicionanuo flexibiliuau y pouei paia cieai inteifaces web.
El segunuo pation es el Two Stote view el cual peimite uefinii mltiples inteifaces ue acueiuo al uispositivo o cliente uesue el cul se este se acceuienuo a la aplicacion. Este tipo ue implementacion favoiece piincipalmente aplicaciones que acceuan uesue un biowsei o un uispositivo movil como un telefono celulai, en uonue es necesaiio peisonalizai uetalles paia caua tipo ue inteifaz.
La aiquitectuia NvC piesenta el concepto ue vista la cul acta como puente entie el usuaiio final y la logica ue uominio en los contiolauoies. 25.2 Jerarqua de vistas en la presentacin 0na jeiaiquia ue aichivos con vistas imbebibles sopoitauas poi el componente view peimite ieuucii la couificacion cieanuo puntos ue piesentacion comunes paia la aplicacion, contiolauoies o meuiante la implementacion ue plantillas.
Caua paite ue la piesentacion se ciea en un aichivo ubicauo en una estiuctuia conveniua ue uiiectoiios en el uiiectoiio ue la aplicacion llamauo views,.
El componente view peimite uefinii la piesentacion en vaiios niveles, caua uno contiene al siguiente:
T,93,5 4(M#3#7 -# 28#7#$%,+(:$ #$ #3 +.12.$#$%# Y(#R B8+C(M. : ;9(+,+(:$ 6#7+8(2+(:$ inuex.phtml Contiene la vista piincipal y encabezauo XBTNL ue touas las vistas. uiiectoiio-con-nombie-uel-contiolauoi Peimite establecei aichivos con vistas paia caua accion uel contiolauoi. uiiectoiio-con-nombie-uel- contiolauoiaichivo-con-nombie-ue-la- accion.phtml Peimite cieai una piesentacion paia la accion activa en el contiolauoi. layoutsaichivo-con-nombie-uel- contiolauoi.phtml Peimite establecei una vista comn paia touas las acciones uel contiolauoi. layoutsnombie-template.phtml Peimite establecei una plantilla comn paia vaiios contiolauoies. uiiectoiio-con-nombie-uel- contiolauoi_nombie-vista-paicial.phtml Peimite establecei vistas paiciales que se pueuen incluii en vaiias vistas ue acciones uel contiolauoi activo. paitials_nombie-vista-paicial.phtml Peimite establecei vistas paiciales que se pueuen incluii en cualquiei vista o template ue la aplicacion.
El componente view no iequieie que exista caua componente ue piesentacion que se menciono anteiioimente, el nico iequeiiuo es la vista piincipal. PNOPOb Y(7%, K8($+(2,3 En el uiiectoiio views, se pueue encontiai el aichivo inJex.pbtml que implementa el encabezauo XBTNL estnuai paia cualquiei vista ue la aplicacion:
Poi uefecto se utiliza un encabezauo XETHl 1.0 Strict el cul piopenue poi aplicaciones basauas en estnuaies y que funcionan mejoi en los navegauoies ms avanzauos uel meicauo.
Los helpeis Core::stylesbeetlinkToqs{) y Core::jovoscriptBose{) incluyen aichivos }avaSciipt como fiamewoiks y utiliuaues auems ue los CSS inciustauos en otias vistas activas.
Notese el llamauo a view::qetContent{), este impiime touo el conteniuo geneiauo en el layout o vistas activas en la aplicacion en el lugai que se inuique. PNOPOP <#^"#8(1(#$%.7 -# 3, Y(7%, K8($+(2,3 Es iecomenuable no eliminai los llamauos a los helpeis estnuai en la vista piincipal ya que esto pueue impactai el compoitamiento uel fiamewoik. En geneial los iequeiimientos uel conteniuo ue la vista piincipal son los siguientes:
Su nombie uebe sei inuex.phtml y manteneise en la iaiz ue views, Incluii los aichivos }avaSciipt que se utilicen en caua peticion a la aplicacion Incluii los aichivos CSS que se utilicen en caua peticion a la aplicacion Incluii couigo XBTNL que sea comn a caua contiolauoi y accion ue la aplicacion PNOPOc <#^"#8(1(#$%.7 Y(7%,7 , $(M#3 -# I.$%8.3,-.8 ueneialmente caua accion solicitaua piesenta o solicita infoimacion uifeiente al usuaiio ue tal LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 269
foima que el flujo ue la aplicacion sea consistente tanto paia el uesaiiollauoi como paia los usuaiios. Los iequeiimientos ue las vistas a nivel ue contiolauoi son:
Es necesaiio que exista un uiiectoiio con el nombie uel contiolauoi uonue se encuentie la accion El nombie uel uiiectoiio uebe ii en minsculas y sin el sufijo "Controller". El aichivo ue la vista uebe tenei la extension .phtml y el nombie uebe sei el nombie ue la accion sin el sufijo "Action".
PNOPOd <#^"#8(1(#$%.7 -# E,\."%7 -# I.$%8.3,-.8#7 Los loyouts ue contiolauoies son vistas que contienen fiagmentos comunes ue piesentacion que son valiuos paia cualquiei accion uel contiolauoi. Los iequeiimientos ue los loyouts ue contiolauoies son: 0n aichivo con el nombie uel contiolauoi en el uiiectoiio viewsloyouts uebe existii. El nombie uel aichivo uebe ii en minsculas y sin el sufijo "Controller". El aichivo uebe tenei extension .phtml.
PNOPON <#^"#8(1(#$%.7 -# Y(7%,7 K,8+(,3#7 #$ I.$%8.3,-.8#7 En ocasiones fiagmentos ue piesentacion como mens, encabezauos, pie ue paginas, etc son comunes a vaiias acciones ue un contiolauoi peio no a touas, en estos casos se pueue implementai vistas paiciales. Los iequeiimientos ue las vistas paiciales en contiolauoies son:
Es necesaiio que exista un uiiectoiio con el nombie uel contiolauoi uonue se encuentie la vista paicial. El nombie uel uiiectoiio uebe ii en minsculas y sin el sufijo "Controller". El aichivo ue la vista paicial uebe tenei la extension .phtml y el piefijo "_" (unueiscoie).
PNOPOe <#^"#8(1(#$%.7 -# Y(7%,7 K,8+(,3#7 j#$#8,3#7 Al igual que las vistas paiciales ue contiolauoies las geneiales iealizan la misma taiea con la uifeiencia que estan uisponibles paia cualquiei layout, template o vista ue la aplicacion.
Los iequeiimientos ue las vistas paiciales geneiales son: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 27u
La vista paicial uebe estai ubicaua en el uiiectoiio views,portiols. El aichivo ue la vista paicial uebe tenei la extension .phtml y el piefijo "_" (unueiscoie).
PNOPOa <#^"#8(1(#$%.7 -# K3,$%(33,7 : T#123,%#7 Las plantillas peimiten establecei mltiples fiagmentos ue piesentacion y aplicaisen antes o uespus uel layout uel contiolauoi. Los iequeiimientos ue las plantallas son: Beben entas ubicauos en el uiiectoiio views,loyouts,. La extension uel aichivo uebe sei ".phtml" 25.3 Insercin automtica y manual de vistas El componente view utiliza convenciones paia inseitai automticamente la piesentacion coiiesponuiente a un contiolauoi o una accion, otios componentes ue piesentacion iequieie que se establezca piogiamacionalmente su ielacion con la piesentacion uiseaua.
Si se iealiza una peticion a la aplicacion meuiante la 0RL:
http://172.16.5.2/company/categories/create
En uonue compony es el nombie ue la instancia uel fiamewoik, coteqories es el nombie uel contiolauoi y creote la accion iequeiiua.
uiacias a la piesentacion poi convencion el componente view tiatai ue cieai la piesentacion a paitii ue los aichivos:
Si alguno ue los aichivos mencionauos no existe se tiata ue ubicai el siguiente y asi sucesivamente.
En este segunuo caso la 0RL solicitaua es: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 271
http://172.16.5.2/company/press/categories/
En uonue compony es el nombie ue la instancia uel fiamewoik, press es el nombie ue la aplicacion y coteqories es el nombie uel contiolauoi. El nombie ue la accion no se ha estableciuo poi lo que se asume que es inJex.
Los aichivos ue piesentacion son los siguientes:
press,views,coteqories,inJex.pbtml press,views,loyouts,coteqories.pbtml Jefoult,views,inJex.pbtml 25.4 Implementar los tipos de vistas En el siguiente ejemplo se ilustia los tipos ue vistas y su integiacion en la piesentacion ue una aplicacion. El contiolauoi customers se inicializa con S templates:
class CustomersController extends ApplicationController {
public function initialize(){ $this->setTemplateBefore("template1"); $this->setTemplateAfter(array("template2", "template3")); }
public function createAction(){
}
public function updateAction(){
}
}
Los mtouos uel contiolauoi setTemplote y setTemploteAfter peimiten inseitai plantillas antes y uespus uel layout uel contiolauoi. Los templates como se menciono ueben estai ubicauos en views,loyouts.
El aichivo ue plantilla views,loyouts,templote1.pbtml tiene:
El aichivo ue layout uel contiolauoi views,loyout,customers.pbtml tiene:
<?php View::renderPartial('header') ?>
<div style='background:orange;padding:10px'> <h2>Layout de Customers</h2> <?php View::getContent(); ?> </div>
<?php View::renderPartial('footer') ?>
El mtouo view::renJerPortiol inseita una vista paicial que esta ubicaua en el mismo uiiectoiio ue contiolauoi views,customers,. Notse que el piefijo "_" ue las vistas paiciales es omitiuo a pioposito al establecei el nombie ue esta.
La vista paicial views,customers,_beoJer.pbtml tiene:
<h4>Este es el encabezado</h4>
La vista paicial views,customers,_footer.pbtml tiene:
<h4>Este es el pie de pgina</h4>
La vista ue la accion creote en el aichivo views,customers,_creote.pbtml tiene:
Como se mostio touos los tipos ue fiagmentos ue piesentacion piopoicionan una poueiosa foima ue compaitii el couigo y constiuii inteifaces flexibles siguienuo un piincipio bsico ue mantenibiliuau ue una aplicacion. 25.5 Transferir valores del controlador a la vista Existen 2 foimas ue tiansfeiii uatos uel contiolauoi a la piesentacion: PNONOb T8,$7*#8(8 1#-(,$%# ,%8(9"%.7 2G93(+.7 Si al piocesai una accion en un contiolauoi se iequieie piesentai infoimacion al cliente final esta uebe sei tiansfeiiua a las vistas asociauas paia su posteiioi tiatamiento. Poi uefecto los atiibutos pblicos ue los contiolauoies son tiansfeiiuos automticamente a la piesentacion en foima ue vaiiables locales.
El siguiente contiolauoi tiene 2 atiibutos pblicos que se visualizan al invocai la accion info:
public function infoAction(){ $this->code = 100; $this->name = Este es un nombre; }
}
Touas las vistas asociauas a la peticion tienen acceso a las vaiiables locales $coJe y $nome que pueuen sei usauas a conveniencia:
El aichivo views,loyouts,press.pbtml tiene:
<h1>El cdigo es <?php echo $code ?></h1>
El aichivo views,press,info.pbtml tiene:
<p>El contenido de name es <?php echo $name ?></p>
Lo que en conjunto piouuce en el exploiauoi:
PNONOP T8,$7*#8(8 1#-(,$%# 7#%K,8,1T.Y(#R La segunua foima ue tiansfeiii valoies uesue las acciones uel contiolauoi es meuiante el uso uel mtouo setPoromToview. Este mtouo es especialmente til cuanuo se iequieia tiansfeiii gianues cantiuaues ue uatos a las vistas o uatos poco ielevantes que no ameiiten la uefinicion ue un atiibuto pblico en el contiolauoi.
Tambin si se usan contiolauoies con el estauo peisistente activo es posible que tambin se quieia iestiingii la uefinicion ue atiibutos pblicos a los estiictamente necesaiios.
class PressController extends ApplicationController {
public function indexAction(){
}
public function showAllAction(){ $this->setParamToView(editions, $this->Editions- >find(status=A)); }
}
En la vista se ciea una vaiiable local llamaua $eJitions con el valoi asignauo en la accion. 25.6 Controlar Niveles de Renderizacin En ueteiminauas situaciones es posible que se iequieia contiolai el nivel ue piofunuiuau ue la visualizacion. El componente view peimite establecei el nivel ue ienueiizacion meuiante el mtouo setRenJerlevel{int $level).
Est mtouo pueue sei invocauo uesue el contiolauoi o uesue una capa ue visualizacion supeiioi paia evitai que otias sean piesentauas.
T,93,5 4(M#3#7 -# 8#$-#8(>,+(:$ #$ Y(#R Y,3.8 I.$7%,$%# 6#7+8(2+(:$ u LEvEL_N0_RENBER Inuica que se uebe evitai geneiai cualquiei tipo ue piesentacion. 1 LEvEL_ACTI0N_vIEW ueneia la piesentacion hasta la vista asociaua a la accion. 2 LEvEL_BEF0RE_TENPLATE ueneia la piesentacion hasta las plantillas antes ue el layout uel contiolauoi. S LEvEL_LAY00T ueneia la piesentacion hasta el layout uel contiolauoi. 4 LEvEL_AFTER_TENPLATE ueneia la piesentacion hasta las plantillas uespus ue el layout uel contiolauoi. S LEvEL_NAIN_vIEW ueneia la piesentacion hasta la vista LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 277
piincipal. Aichivo views,inJex.pbtml
25.7 Utilizar modelos en la presentacin Los mouelos ue la aplicacion siempie estn uisponibles en la piesentacion. Si la opcion ue autoinicializacion ue mouelos est activa se cieai una iefeiencia ue touos los mouelos ue la aplicacion como vaiiables globales con el nombie uel mouelo, si no est activa solo los mouelos utilizauos en la peticion actual sein llevauos a la piesentacion.
Bepenuienuo uel caso se pueue usai en foima natuial uentio ue cualquiei tipo ue vista los mouelos ue esta foima:
/0#123.5 ;%(3(>,8 1.-#3.7 #$ 3, 28#7#$%,+(:$ +",$-. 7.$ ,"%.A($(+(,3(>,-.7 //Listar las ordenes de compra foreach($Orders->find() as $order){ print $order->getRecordedDate(); }
Si los mouelos no son auto-inicializauos se pueue obtenei una instancia ue ellos usanuo el mtouo ue FntityHonoqer llamauo qetFntitylnstonce:
/0#123.5 ;7,8 1.-#3.7 #$ 3, 28#7#$%,+(:$ +",$-. $. 7.$ ,"%.A($(+(,3(>,-.7 $orders = EntityManager::getEntityInstance(Orders); foreach($Orders->find() as $order){ print $order->getRecordedDate(); } 25.8 Plugins de View Los Pluqins ue piesentacion peimiten extenuei la funcionaliuau uel componente view. La aiquitectuia ue plugins ue view peimite obseivai, extenuei y manipulai el compoitamiento ue las vistas ue la aplicacion segn las conuiciones lo exijan.
Los plugins peimiten inteiceptai eventos en las vistas ue tal foima que estos sean obseivables y auems ejecutise uno tias otio ue maneia centializaua sin iequeiii iefactoiizacion o ieintegiacion en la aplicacion. PNO`Ob I8#,8 "$ K3")($ -# Y(#R Los plugins ue view son clases que implementan eventos que son invocauos a meuiua que avanza la ejecucion uel pioceso ue piesentacion en cualquiei peticion. Estas clases ueben LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 278
cumplii con los siguientes iequeiimientos:
! Beben estai ubicauos en el uiiectoiio ue plugins usualmente opps,opp-nome,pluqins ! El nombie uel aichivo que implementa la clase uebe sei el nombie uel plugin ! El nombie ue la clase uebe tenei la extension Pluqin ! Los plugins ue contiolauoi ueben heieuai ue la clase viewPluqin o sei subclase ue ella
Las clases pueuen implementai mtouos pblicos que iefeiencian los eventos ocuiiiuos en los contiolauoies, la lista ue ellos es la siguiente:
4.198# /M#$%. 6#7+8(2+(:$ befoieRenuei 0cuiie antes ue empezai el pioceso ue visualizacion ue las vistas asociauas a la peticion. El evento iecibe la instancia ue ControllerResponse actual afteiRenuei 0cuiie uespus ue teiminai el pioceso ue visualizacion ue las vistas asociauas a la piesentacion.
25.9 API del Componente View PNOiOb ]#8,8^"(, -# 8#$-#8(>,+(:$ stotic function strinq qetContent{booleon $returnContent=folse) El llamauo a este mtouo le inuica al componente view uonue uebe inseitai el siguiente nivel ue la jeiaiquia ue ienueiizacion. Si se pasa tiue en $returnContent uevuelve el conteniuo uel buffei ue saliua hasta el momento.
stotic function voiJ setRenJerlevel{int $level) Establece hasta que nivel ue ienueiizacion se uebe geneiai la piesentacion. Consulte la tabla ue niveles ue piesentacion paia obtenei ms infoimacion sobie el uso ue este mtouo. PNOiOP B-1($(7%8,8 28#7#$%,+(:$ stotic function voiJ bonJleviewRenJer{Controller $controller) Este mtouo actua como el auministiauoi ue piesentacion pieueteiminauo iecibienuo como paimetio el ltimo contiolauoi eniutauo. No uebeiia sei invocauo uiiectamente poi el LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 279
uesaiiollauoi ya que es llamauo poi el conteneuoi ue aplicaciones.
stotic function voiJ bonJleviewFxceptions{Fxception $e, Controller $controller) Este mtouo actua como el auministiauoi ue piesentacion pieueteiminauo cuanuo no se captuia una excepcion iecibienuo como paimetio el ltimo contiolauoi eniutauo. No uebeiia sei invocauo uiiectamente poi el uesaiiollauoi ya que es llamauo poi el conteneuoi ue aplicaciones cuanuo esta situacion ocuiie.
PNOiOc Y(7",3(>,8 M(7%,7 28.)8,1,+(.$,31#$%# stotic function voiJ renJerPortiol{strinq $_portiolview, strinq $_portiolvolue='') Peimite visualizai una vista paicial uentio ue otia vista. El segunuo paimetio peimite tiansfeiii un valoi uesue la vista uonue se invoca este mtouo al inteiioi ue la vista paicial. La vista paicial es ubicaua en el uiiectoiio ue vistas uel contiolauoi actual.
El mtouo se utiliza ue la siguiente foima:
<?php View::renderPartial(nombreVista, Un Valor) ?>
En el aichivo _nombievista.phtml el valoi tiansfeiiuo pueue sei usauo asi:
<?php echo $nombreVista; ?>
Si se iequieie visualizai una vista paicial en otio contiolauoi uifeiente al actual uebe usaise:
stotic function voiJ renJerview{strinq $_view) Peimite visualizai una vista ue accion uentio ue otia vista. La vista ue accion es ubicaua en el uiiectoiio ue vistas uel contiolauoi actual.
El mtouo se utiliza ue la siguiente foima:
<?php View::renderView(nombreVista) ?>
Si se iequieie visualizai una vista paicial en otio contiolauoi uifeiente al actual uebe usaise: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 28u
stotic function orroy qetvoliJotionHessoqes{) 0btiene uesue una vista los mensajes ue valiuacion piouuciuos poi el componente voliJotion o otio componente ue usuaiio.
stotic function voiJ setContent{strinq $content) Establece piogiamacionalmente el conteniuo uel buffei ue saliua actual ue la piesentacion.
stotic function voiJ setviewPorom{strinq $inJex, strinq $volue) Establece una vaiiable ue la vista que sei cieaua en un ambito local como $inuex con el valoi $value.
stotic function orroy qetviewPoroms{) 0btiene un aiiay con las vaiiables pasauas a la vista usanuo view::setviewPorom.
stotic function voiJ setProxyProviJer{strinq $proxy, orroy $options) Establece un pioxy-pioviuei que auministie las peticiones ue piesentacion usanuo componentes ue teiceios.
stotic function voiJ proxyEonJler{) Ntouo pieueteiminauo paia la auministiacion ue piesentacion cuanuo se usan componentes ue teiceios
stotic function booleon existsActionview{strinq $nome, strinq $controllerNome='') Peimite consultai si una vista ue accion existe en el contiolauoi actual o en el uefiniuo en $contiolleiName. 25.10 Crear un componente de Presentacin personalizado El uesaiiollauoi pueue cieai componentes ue aplicacion que ieemplacen al componente ue piesentacion view poi uefecto en Kumbio Fnterprise. Como los uems componentes ue usuaiio estos ueben estai ubicauos en el uiiectoiio librory ue la aplicacion o uonue la vaiiable ue configuiacion libroryBir inuique.
class CustomersController extends ApplicationController {
public function getViewHandler(){ return array("MyView", "handleViewRender"); }
}
Be esta foima cuanuo se iequieia mostiai la piesentacion paia el contiolauoi se pasai el contiol a el componente Hyview invocanuo el mtouo esttico bonJleviewRenJer. Este mtouo iecibe el objeto uel contiolauoi instanciauo (o el ltimo que se utilizo uespus ue iealizai eniutamientos) en la peticion:
static public function handleViewRender($controller){ //Realizar la presentacin }
}
Se uebe tenei en cuenta toua la funcionaliuau mencionaua en el componente view no estai uisponible si se ieesciibe el componente ue piesentacion. Los seivicios ue los componentes Core (CoreConfiq, Corelocole, etc), Router y Bispotcber pueuen iesultai tiles en este punto. 25.11 Crear un componente de presentacin de Excepciones no capturadas Al igual que la piesentacion noimal, la ue excepciones tambin pueue sei ieesciita siguienuo un pioceuimiento paieciuo al uel anteiioi. En este caso el mtouo qetviewFxceptionEonJler uebe sei ieesciito en el contiolauoi.
static public function handleViewRender($controller){ //Realizar la presentacin normal }
static public function handleViewExceptions($e, $controller){ //Excepciones }
}
Consulte la iefeiencia ue CoreFxception y Fxception paia obtenei ms infoimacion sobie las excepciones geneiauas que no han siuo captuiauas. 25.12 Integrar otros Engines de presentacin Si el uesaiiollauoi iequieie, es posible integiai componentes ue geneiacion ue piesentacion ue teiceios (otios fiamewoiks o pioyectos). Con esto se apiovecha la funcionaliuau ue estos componentes sin peiuei el compoitamiento y potencia uel componente ue Kumbio Fnterprise view. PNObPOb I.12.8%,1(#$%. -# 3, ($%#)8,+(:$ La integiacion con los componentes ue teiceios tiene el siguiente compoitamiento:
! Las vaiiables pblicas uel contiolauoi, uatos pasauos meuiante setviewPorom y mouelos utilizauos en la peticion (o touos si la autoinicializacion ue entiuaues est activa) son cieauos en el foimato auecuauo uel componente utilizauo. Poi ejemplo en ZenJ_view se uebe usai $this paia acceuei a estos valoies. ! Los nombies ue la extensiones ue aichivos ue vistas pueuen configuiaise como se iequieia y no se uebe usai ".phtml" como es noimal. ! La jeiaiquia ue inclusion "vista piincipaltemplateslayoutsvistapaitials" se mantiene sin cambio alguno con la nica uifeiencia que el iesultauo ue caua vista es piouuciuo poi el componente seleccionauo. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 28S
! Touo el fiamewoik aplicable pueue utilizaise en las vistas cieauas con otios engines sin iestiicciones. ! Los plugins ue view funcionan noimalmente PNObPOP I.12.$#$%#7 '.2.8%,-.7 Actualmente hay sopoite paia los componentes ue piesentacion Zenu_view ue Zenu Fiamewoik y Smaity. PNObPOPOb K8.H\ , o#$-pY(#R El componente ue ZenJ Iromework llamauo ZenJ_view ofiece la posibiliuau ue integiai helpeis, filtios y sciipts a las vistas geneiauas con este. Paia inuicai que se usai este componente se uebe cambiai el auministiauoi ue piesentacion en el contiolauoi asi:
El mtouo view::setProxyProviJer establece que se usai el Pioxy a componentes teiceios 'Zenu'. El segunuo paimetio peimite inuicai otias opciones opcionales ue la integiacion.
T,93,5 K,8U1#%8.7 -#3 K8.H\K8.M(-#8 , o#$-pY(#R [2+(:$ 6#7+8(2+(:$ zenuPath La iuta a uonue est ubicauo el ZenJ Iromework. Si hace paite uel incluue_path ue PBP entonces no es necesaiio estableceila. class La clase utilizaua paia auministiai las vistas. Poi uefecto es ZenJ_view peio pueue estableceise cualquiei otia que implemente la inteifaz ZenJ_view_lnterfoce. extension La extension que tenuin las vistas. Poi uefecto es .phtml. encouing Esta opcion aplica al constiuctoi ue Zenu_view. stiictvais Esta opcion aplica al contiuctoi ue Zenu_view. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 284
Consulte la uocumentacion ue este fiamewoik en http://framework.zend.com/ . PNObPOPOP K8.H\ , '1,8%\ Este PioxyPioviuei peimite tiatai vistas usanuo el Smaity Engine. La foima en que se uebe inuicai que se usai este auaptauoi es la siguiente:
class MyController extends ApplicationController {
public function getViewHandler(){ View::setProxyProvider('Smarty', array( 'smartyPath' => 'Library', extension => tpl )); return array('View', 'proxyHandler'); } }
0pciones que iecibe el PioxyPioviuei:
T,93,5 K,8U1#%8.7 -#3 K8.H\K8.M(-#8 , '1,8%\ [2+(:$ 6#7+8(2+(:$ smaityPath La iuta a uonue est ubicauo Smaity. Si hace paite uel incluue_path ue PBP entonces no es necesaiio estableceila. extension La extension que tenuin las vistas. Poi uefecto es .tpl
26 Componente Tag 26.1 Introduccin Este componente actua como una biblioteca ue etiquetas que peimite geneiai tags XBTNL en la piesentacion ue una aplicacion meuiante mtouos estticos PBP pieuefiniuos flexibles que integian tecnologia uel lauo uel cliente como CSS y }avasciipt.
La ventaja ue utilizai estos helpeis en lugai ue XBTNL puio, es que aceleia el uesaiiollo y hace consistente el couigo XBTNL y otios aspectos como las 0RLs y el convencionalismo uel fiamewoik.
Caua mtouo esttico iecibe sus opciones meuiante paimetios poi nombie que se pueuen enviai en cualquiei oiuen al mismo. En los tag que geneian etiquetas es posible enviai paimetios XBTNL o CSS con su iespectivo valoi asignanuose a la etiqueta geneiaua. 26.2 Establecer el valor de helpers creados con Tag 0na ue las ventajas ms impoitantes ue cieai componentes ue inteifaz ue usuaiio con Toq es lo sencillo que se pueue asignai el valoi ue estos ue foima unifoime y contiolaua.
Caua componente localiza el valoi que uebe piesentai meuiante las siguientes ieglas. Si alguna iegla se cumple las uems no son valiuauas:
! veiifica si existe algn valoi paia l asignauo con Toq::JisployTo y lo tomo como volor ! veiifica si hay algn inuice en $_P0ST que coinciua con el atiibuto "iu" ue l y toma como valoi ! veifica si existe un atiibuto pblico en el ltimo contiolauoi ejecutauo que coinciua con el atiibuto "iu" ue l y lo toma como valoi.
Si a algn helpei se le asigna uiiectamente con el paimetio "value" ninguna ue las ieglas anteiioies se tiene en cuenta.
El siguiente ejemplo ilustia la asignacion ue un valoi a componente ue inteifaz ue usuaiio cieauo meuiante Toq:
echo Tag::selectStatic("genero", $generos); ?> El uesaiiollauoi uebe valiuai que no se asignen valoies con JisployTo cuanuo se ueba visualizai los valoies captuiauos poi el usuaiio en la peticion P0ST. 26.3 Comportamiento de helpers Touos los helpeis en el componente Tag uevuelven couigo BTNL geneiauo poi caua uno lo que peimite utilizai este paia utilizailo como paimetio ue otios helpeis o usailo como se iequieia.
<?php echo Tag::form(array(controlador/accion, method => post)) ?> 26.4 API del Componente Tag A continuacion se piesenta el API uel componente: PeOdOb I8#,8 #$3,+#7 public stotic function linkTo{mixeJ $poroms) Peimite cieai un enlace a una punto ue la aplicacion utilizanuo las convenciones ue Kumbia Enteipiise este mtouo geneia un tag A ue XBTNL con la posibiliuau ue implementai tanto LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 287
una confiimacion antes ue ejecutaise como ue aplicai cualquiei atiibuto que se uesee a este tag. El label ue la etiqueta pueue sei un texto o cualquiei otio tag como poi ejemplo una imagen.
Las opciones extenuiuas uel componente son:
T,93,5 K,8U1#%8.7 ^"# 8#+(9# 3($ST. 4.198# 6#7+8(2+(:$ confiim Peimite establecei que se piesente un cuauio ue uialogo ue piesentacion al usuaiio que confiime la peticion ue la 0RL en el tag A. text Es el texto que apaiecei en el enlace.
<?php echo Tag::linkTo(controlador/saludo,SALUDAR, class: css_saludo, border: 0, confirm: Desea ir a Saludo?) ?>
ueneia el siguiente couigo XBTNL:
<a onclick='if(!confirm("Desea ir a saludo?)) return false;' border="0" class="css_saludo" href="/instancia/controlador/saludo">SALUDAR</a>
public stotic function linkToAction{mixeJ $poroms) ueneia un enlace a una accion asociaua al contiolauoi actual. Al igual que linkTo es posible aplicai atiibutos BTNL pasanuolos como otios paimetios.
confiim Peimite establecei que se piesente un cuauio ue uialogo ue piesentacion al usuaiio que confiime la peticion ue la 0RL en el tag A. text Es el texto que apaiecei en el enlace.
public stotic function linkToRemote{mixeJ $poroms) Caiga el conteniuo ue una accion en un conteneuoi BTNL uentio ue la piesentacion actual. La vista se obtiene meuiante A}AX poi lo que la pgina no es iecaigaua.
En el siguiente ejemplo se caigai el conteniuo ue una accion en el uiv con iu 'the_menu':
<?php echo Tag::linkToRemote('main/getMenu', 'Texto del Enlace', 'the_menu') ?>
Como la piesentacion es paicial se uebe mouificai la saliua uel contiolauoi paia solo mostiai la vista asociaua y saltai los templates o layouts.
<?php
class MainController extends ApplicationController {
public function indexAction(){
}
public function getMenuAction(){ $this->setResponse('ajax'); }
}
Tambin es posible implementai eventos A}AX a meuiua que se piocesa la peticion mejoianuo la expeiiencia ue usuaiio:
<div id='the_menu'></div>
<?php echo Tag::linkToRemote("main/getMenu", "Texto del Enlace", "the_menu", "onLoading: $('info').update('Cargando...')") ?>
0pciones ue linkToRemote:
T,93,5 K,8U1#%8.7 ^"# 8#+(9# 3($ST.<#1.%# 4.198# 6#7+8(2+(:$ confiim Peimite establecei que se piesente un cuauio ue uialogo que confiime la LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 289
peticion ue la 0RL. text Es el texto que apaiecei en el enlace. Si no se establece el segunuo paimetio uel enlace es tomauo. upuate Es el conteneuoi BTNL uonue se piesentai el conteniuo ue la vista. onLoauing Couigo }avaSciipt a ejecutai antes ue iealizai la peticion BTTP inteina. onSuccess Couigo }avaSciipt a ejecutai cuanuo la peticion se completa con xito. El objeto con la el iesultauo peticion pueue obteneise usanuo la vaiiable 'tianspoit'. onComplete Couigo }avaSciipt a ejecutai cuanuo la peticion se completa. El objeto con la el iesultauo peticion pueue obteneise usanuo la vaiiable 'tianspoit'. onFailuie Couigo }avaSciipt a ejecutai cuanuo la peticion falla o se geneia una excepcion. El objeto con la el iesultauo peticion pueue obteneise usanuo la vaiiable 'tianspoit'. En este mismo evento se caiga el conteniuo ue la piesentacion en el conteneuoi. asynchionous Peimite establecei si la peticion es asincionica o sincionica. Se uebe establecei un valoi booleano tiue o false. Poi uefecto es false.
Auicional a lo anteiioi linkToRemote acepta como paimetio cualquiei nombie ue atiibuto aplicable a la etiqueta A. PeOdOP I.12.$#$%#7 -# ($%#8*,> -# "7",8(. public stotic function textIielJ{mixeJ $poroms) Ciea una caja ue texto con los paimetios estableciuos.
El helpei textAreo acepta como paimetio cualquiei nombie ue atiibuto aplicable a la etiqueta textaiea.
public stotic function numericIielJ{mixeJ $poroms) Ciea una caja ue texto con los paimetios estableciuos valiuanuo que su entiaua sea solo valoies numiicos.
El helpei numericIielJ acepta como paimetio cualquiei nombie ue atiibuto aplicable a la etiqueta input type="text".
public stotic function numericPossworJIielJ{mixeJ $poroms) Ciea una caja ue texto paia contiaseas con los paimetios estableciuos valiuanuo que su entiaua sea solo valoies numiicos. Este componente uebe sei usauo en casos especiales ue confianza ya que su natuialeza ayuuaiia a un teiceio malintencionauo a conocei que el possworJ solicitauo es un algn valoi numiico.
El helpei numericPossworJIielJ acepta como paimetio cualquiei nombie ue atiibuto aplicable a la etiqueta input type="passwoiu". PeOdOc I.12.$#$%#7 -# 3(7%,7J+.19.7 public stotic function selectStotic{mixeJ $poroms) Ciea un combo con valoies estticos estableciuos en un vectoi.
T,93,5 K,8U1#%8.7 8#+(9(-.7 2.8 7#3#+%'%,%(+ 4.198# 6#7+8(2+(:$ useBummy Inuica que se uebe colocai una opcion auicional 'Seleccione' al piinicipio ue la lista. El valoi ue este es una ''. uummyvalue Peimite cambiai el valoi ue la opcion Bummy ue '' al valoi inuicauo. uummyText Peimite cambiai el texto ue la opcion Bummy ue 'Seleccione' al texto inuicauo.
Auicional a lo anteiioi selectStotic acepta como paimetio cualquiei nombie ue atiibuto aplicable a la etiqueta SFlFCT.
public stotic function select{mixeJ $poroms) Peimite geneiai una lista uesplegable meuiante un aiiay, un ActiveRecorJResultset {resultoJo Je ActiveRecorJ) un ActiveRecorJRow {resultoJo Je ActiveRecorJ}oin):
El piimei paimetio ue este helpei es el iuname que tomai la lista. El segunuo son los uatos ue la lista. Cuanuo se usa un ActiveRecorJResultset o ActiveRecorJRow se uebe establecei el paimetio using, el cul es una paieja ue atiibutos que sei utilizaua como valoitexto ue caua opcion ue la etiqueta SELECT geneiaua.
T,93,5 K,8U1#%8.7 8#+(9(-.7 2.8 T,)557#3#+% 4.198# 6#7+8(2+(:$ useBummy Inuica que se uebe colocai una opcion auicional 'Seleccione' al piinicipio ue la lista. El valoi ue este es una ''. uummyvalue Peimite cambiai el valoi ue la opcion Bummy ue '' al valoi inuicauo. uummyText Peimite cambiai el texto ue la opcion Bummy ue 'Seleccione' al texto inuicauo.
Auicional a lo anteiioi select acepta como paimetio cualquiei nombie ue atiibuto aplicable a la etiqueta SFlFCT.
public stotic function locoleSelect{) Es iuentico al helpei select peio en este se aplica una funcion ue localizacion a caua texto ue las opcion meuiante un objeto ue tiauuccion.
El siguiente ejemplo muestia los iuiomas uisponibles basauo en un objeto ue tiauuccion:
public stotic function submitlmoqe{$coption, $src) Peimite cieai un boton ue envio ue foimulaiio con una imagen en vez ue un texto. Recibe como paimetios "caption" que contenui el texto que apaiece en caso ue que la imgen no pueua sei caigaua. "sic" especifica la iuta ue la imagen.
Recibe auems los cualquiei evento que pueua uefiniise paia el boton con su coiiesponuiente accion en javasciipt.
public stotic function imoqe{$imq) Incluye una imagen en una vista tenienuo en cuenta el uiieccionamiento ue los uiiectoiios uel fiamewoik. El paimetio "img" uefine el nombie ue la imagen que uebe estai incluiua uentio ue la caipeta 'img'.
T,93,5 K,8U1#%8.7 8#+(9(-.7 2.8 T,)55(1,)# 4.198# 6#7+8(2+(:$ alt Especifica un texto alteinativo paia la imagen.
public stotic function formRemote{$poroms) LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 294
Peimite geneiai un foimulaiio iemoto, que sei enviauo con una peticion ue Ajax. El paimetio "paiams" peimite ingiesai una seiie ue opciones paia el helpei.El piimei paimetio ingiesauo es el que uefine el valoi ue la piopieuau action paia la etiqueta 'foim'.
T,93,5 K,8U1#%8.7 ^"# 8#+(9# *.81<#1.%# 4.198# 6#7+8(2+(:$ action valoi que tenui la piopieuau 'action' uel foimulaiio. complete Callback que contenui el couigo javasciipt que se ejecutai una vez se active el evento complete uel foimulaiio. befote Callback que contenui el couigo javasciipt que se ejecutai antes ue que el foimulaiio sea enviauo. success Callback que contenui el couigo javasciipt que se ejecutai una vez se active el evento success uel foimulaiio. iequiieu Coleccion ue campos que son iequeiiuos paia el foimulaiio, ocuiie una valiuacion ue uichos campos antes ue hacei el envio. upuate Iu ue la etiqueta que sei actualizaua una vez se complete el envio.
public stotic function submitRemote{$coption) Ciea un boton ue envio paia el foimulaiio iemoto actual. El paimetio "caption" uefine el texto que se muestia en el boton.
4.198# 6#7+8(2+(:$ caption valoi que tenui la piopieuau 'value' uel boton. complete Callback que contenui el couigo javasciipt que se ejecutai una vez se active el evento complete uel foimulaiio. befoie Callback que contenui el couigo javasciipt que se ejecutai antes ue que el foimulaiio sea enviauo. success Callback que contenui el couigo javasciipt que se ejecutai una vez se active el evento success uel foimulaiio. upuate Iu ue la etiqueta que sei actualizaua una vez se complete el envio.
public stotic function form{$oction) Ciea una etiqueta ue apeituia ue un foimulaiio. El paimetio "action" es el valoi ue la piopieuau 'action' uel foimulaiio.
0pciones ue submitRemote: T,93,5 K,8U1#%8.7 ^"# 8#+(9# #3 C#32#8 T,)55*.81 4.198# 6#7+8(2+(:$ action valoi que tenui la piopieuau 'action' uel foimulaiio. methou Ntouo que sei usauo paia el envio uel foimulaiio. confiim Si es ueclaiauo uefine el mensaje ue confiimacion paia el envio uel foimulaiio. onsubmit Callback que contenui el couigo javasciipt que se ejecutai una vez se active el evento submit uel foimulaiio.
public stotic function enJIorm{) Etiqueta que finaliza el foimulaiio, coiiesponue al couigo ue cieiie ue uicha etiqueta.
public stotic function submitButton{$coption) Peimite cieai un boton ue envio paia el foimulaiio actual. Ingiesa como paimetio el valoi uel texto que sei mostiauo en el boton. Auems iecibe cualquiei atiibuto que pueua sei aplicable a una etiqueta input type='submit'.
PeOdOd T8,%,1(#$%. -# #%(^"#%,7 @/TB public stotic function setHeto{strinq $nome, strinq $content) Caiga en memoiia una etiqueta Neta paia las cabeceias uel uocumento BTNL. Recibe el nombie ue la etiqueta y un conteniuo paia la misma.
public stotic function qetHetos{) Impiime las etiquetas Neta que han siuo caigauas pieviamente. No iecibe paimetios e impiime automticamente el iesultauo en el uocumento BTNL.
PeOdON T8,%,1(#$%. # Z$+3"7(:$ -# ,8+C(M.7 I'' public stotic function stylesbeetlink{strinq $src='', $usevoriobles=folse) Auiciona una etiqueta ue link que incluye un aichivo CSS tenienuo en cuenta las iutas que se uefinen en Kumbia Enteipiise. El piimei paimetio constituye la iuta ue ubicacion uel aichivo CSS, el segunuo ueteimina si se usai un tiauuctoi ue las vaiiables globales que se pueuen especificai en los aichivos CSS.
Las vaiiables CSS pueuen usaise paia ieemplazai iutas absolutas que ayuuen aseguiai que imagenes u otios iecuisos seian estableciuos coiiectamente.
Las posibles vaiiables que se pueuen utilizai son:
T,93,5 Y,8(,93#7 I'' ^"# 7.2.8%, #3 T,)557%\3#'C##%E($S Y,8(,93# 6#7+8(2+(:$ path Ruta absoluta uel seiviuoi web hacia la instancia uel fiamewoik. img_path Ruta absoluta uel seiviuoi web hacia el uiiectoiio img ue la instancia uel fiamewoik. css_path Ruta absoluta uel seiviuoi web hacia el uiiectoiio css ue la instancia uel fiamewoik.
Paia aumentai el ienuimiento uel ieemplazo ue vaiiables en aichivos CSS estos se cachean en el uiiectoiio temp y se iefiescan cuanuo se uetecta cambios en ellos.
public stotic function removeStylesbeets{) Remueve los tags ue css agiegauos.
PeOdOe I.12.$#$%#7 2,8, *#+C,7 public stotic function JoteIielJ{mixeJ $poroms) Peimite valiuai que los uato captuiauo sea una fecha. Este helpei ciea S listas una paia los meses, uias y otia paia los aos. Los nombies ue los meses se muestian en el iuioma ue la localizacion activa. El valoi captuiauo se almacena en un input oculto con el nombie uel JoteIielJ.
Poi uefecto JoteIielJ muestia la fecha 1 ue eneio uel ao en cuiso, sin embaigo esta fecha no es vliua.
0pciones ue JoteIielJ:
T,93,5 K,8U1#%8.7 ^"# ,+#2%, T,)55-,%#!(#3- 4.198# 6#7+8(2+(:$ staitYeai Inuica el ao menoi que tenui la lista ao. finalYeai Inuica el ao mayoi que tenui la lista ao. useBummy Inuica si se uebe foizai al usuaiio a seleccionai un valoi valiuo.
Auicional a lo anteiioi JoteIielJ acepta como paimetio cualquiei nombie ue atiibuto aplicable a la etiqueta toble.
public stotic function locoleBoteIielJ{mixeJ $poroms, Troslote $troslote) Es iuentico a JoteIielJ peio los nombies ue los meses son tomauos ue la lista ue localizacion actual peimitienuo mostiailos vaiios iuiomas.
El helpei locoleBoteIielJ acepta como paimetio cualquiei nombie ue atiibuto aplicable a la etiqueta toble. PeOdOa Z$+3"(8 8#+"87.7 ],M,7+8(2% public stotic function jovoscriptlncluJe{strinq $src='', booleon $cocbe=true) Peimite inseitai una etiqueta <sciipt con la iefeiencia a un aichivo javasciipt ue la instancia actual. La extension .js uebe sei omitiua ya que el helpei la agiega automticamente.
Cuanuo se pasa false en el segunuo paimetio se agiega a la 0RL uel BTNL geneiauo el LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 299
paimetio uET nocache=valoi uonue valoi es un enteio aleatoiio entie u y 999999. Be esta foima se obliga al navegauoi a iecaigai el iecuiso javasciipt en caua peticion.
Si se omite el nombie uel }avaSciipt se tiata ue inseitai un aichivo con el mismo nombie uel contiolauoi actual.
public stotic function jovoscriptHinifieJlncluJe{strinq $src='') Peimite inseitai un javasciipt minimizauo con }sNin. El paimetio $sic es la ubicacion uel aichivo en el seiviuoi una veision pblica es geneiaua la cul es iegeneiaua caua vez que se mouifica el aichivo oiiginal. Los aichivos javasciipt minimizauos consumen menoi ancho ue banua y pueuen aumentai la velociuau ue caiga ue la aplicacion en clientes con velociuaues ue conexion ieuuciuas.
El uiiectoiio publicjavasciipt uebe tenei peimisos ue esciituia paia usai este helpei. PeOdO` Z$%#8,++(:$ +.$ 3, 28#7#$%,+(:$ stotic function voiJ JisployTo{strinq $iJ, strinq $volue) Establece el valoi paia un componente visual uel foimulaiio que se va a piesentai en la peticion actual. El valoi uefiniuo meuiante este helpei tiene mayoi piioiiuau cuanuo se tiata ue obtenei el valoi ue los componentes visuales.
stotic function mixeJ qetvolueIromAction{strinq $nome) Peimite obtenei el valoi que sei piesentauo en un componente visual como lo es una caja ue texto o una lista (combo). Touos los helpeis iealizan un llamauo inteino usanuo este mtouo paia obtenei el valoi a piesentai uepenuienuo la natuialeza ue caua uno.
Los valoies son obteniuos en este oiuen:
! Se veiifica si existe algn valoi paia l asignauo con Toq::JisployTo y lo tomo como volor ! Se veiifica si hay algn inuice en $_P0ST que coinciua con el atiibuto "iu" ue l y toma como valoi ! veifica si existe un atiibuto pblico en el ltimo contiolauoi ejecutauo que coinciua con
27 Helpers JavaScript 27.1 Introduccin En este capitulo se uesciiben clases y funciones en }avaSciipt que piopoiciona el fiamewoik al uesaiiollauoi paia agilizai el pioceso ue cieacion ue captuias y piesentacion ue uatos e infoimacion al usuaiio final. 27.2 Clase Format Esta clase peimite uaile foimato a los uifeientes tipos ue uatos que pueuen sei incluiuos uentio ue una captuia ue uatos o una vista tal. Est enteiamente couificaua en javasciipt usanuo el fiamewoik Piototype. Tiene licencia ue uso y mouifcacion totalmente abieita y hace paite uel pioyecto ue Beiiamientas }avaSciipt ue uso comn en Aplicaciones Web. PaOPOb Z$7%,$+(,$-. 3, +3,7# Paia iniciai el uso ue esta heiiamienta es necesaiio cieai un objeto que uefinii las piopieuaues que se usain paia uaile foimato a los uatos. Esto se logia ue la siguiente maneia:
Pueue notai que no touas estas piopieuaues ueben sei uefiniuas, touas poseen valoies poi uefecto que sein usauos en piincipio paia el foimato. Estas piopieuaues son ueteiminauas poi el tipo, con lo cual se usa la notacion type: 'nombie_tipo', piopeities: piopieuaues.
Los tipos ue uatos sopoitauos poi el Foimat son: numeiic, que uefine las piopieuaues paia los valoies que sein numiicos, tanto enteios como punto flotante peicent, paia los valoies que tienen un foimato ue poicentaje money en el cual se establecen los atiibutos paia los uatos tipo moneua.
T,93,5 K,8U1#%8.7 ^"# 8#+(9# #3 C#32#8 0,M,7+8(2% !.81,% 4.198# Y,3.8 2.8 6#*#+%. B23(+,93# , 6#7+8(2+(:$ uecimals u touas Establece el nmeio ue uecimales. puntoBec ',' touas Caictei paia el punto uecimal. sepNiles '.' touas Caictei paia el sepaiauoi ue Niles. simbPei '%' peicent Simbolo ue poicentaje. simbNon '$' money Simbolo ue moneua. letNegative tiue touas Establece si peimite negativos o no. blankToZeio tiue touas Befine si un valoi vacio es puesto como ceio. leftZeios u touas Nmeio ue ceios que sein aauiuos a la izquieiua uel uato. complete u touas Tamao obligatoiio que ueben tenei los uatos en su paite enteia. completeCaiactei 'u' touas Caictei que se usai paia completai los uatos. onCompleteTiuncate tiue touas Befine si se tiuncai un uato si este supeia el tamao uefiniuo en complete. No aplica si complete es ceio.
<script type="text/javascript"> function formatoNumerico(){ $('temp').value = format.numeric($F('temp')); } function deFormatoNumerico(){ $('temp').value = format.deFormat($F('temp'),'numeric'); } </script>
Notese que una vez que ha siuo cieauo el objeto foimat lo nico que uebe haceise es usailo paia uai foimato a los uatos que se tengan, asimismo es posible ueshacei uicho foimato hacienuo uso ue la funcion ueFoimat. Tambin es impoitante obseivai que touos los llamauos son uinmicos y uebe usaise un objeto uefiniuo paia ello es uecii, antes ue usai cualquiei funcion es necesaiio cieai un objeto como se inuica en el apaitauo Instancianuo la clase, y una vez hecho esto touas las funciones se ueben invocai con vaiiable.funcion(paimetios). PaOPOP !"$+(.$#7 -# !.81,% numeric{number) Foimatea un nmeio que es ingiesauo como paimetio usanuo las piopieuaues uefiniuas paia los tipo numeiic al instanciai la clase o que hayan siuo estableciuas con el mtouo changePiopeities. Retoina una cauena ue caiacteies que posee el foimato auecuauo.
money{number) Foimatea un nmeio que es ingiesauo como paimetio usanuo las piopieuaues uefiniuas paia los tipo money al instanciai la clase o que hayan siuo estableciuas con el mtouo changePiopeities. Retoina una cauena ue caiacteies que posee el foimato auecuauo, agieganuo el simbolo ue pesos iequeiiuo.
percent{number) Foimatea un nmeio que es ingiesauo como paimetio usanuo las piopieuaues uefiniuas paia los tipo percent al instanciai la clase o que hayan siuo estableciuas con el mtouo changePiopeities. Retoina una cauena ue caiacteies que posee el foimato auecuauo, agieganuo el simbolo poicentual uefiniuo.
cbonqeProperties{) Cambia las piopieuaues uel tipo especificauo. Las piopieuaues que no sean incluiuas conseivan su valoi anteiioi.
JeIormot{str,type) Befoimatea una cauena ue caiacteies. Recibe como paimetios "sti" que iepiesenta la cauena ue texto a piocesai "type" que uebe sei el tipo ue foimato al que fue sometiua uicha cauena. 27.3 Clase Validator Esta clase peimite iealizai valiuaciones a los uifeientes uatos que pueuen sei incluiuos uentio ue una captuia ue uatos o una vista tal. Est enteiamente couificaua en javasciipt usanuo el fiamewoik Piototype. Tiene licencia ue uso y mouifcacion totalmente abieita y hace paite uel pioyecto ue Beiiamientas }avaSciipt ue uso comn en aplicaciones Web. PaOcOb Z$7%,$+(,$-. 3, +3,7# Antes ue hacei uso ue esta clase uebe instanciaise un objeto que contenui las piopieuaues paia las valiuaciones que se iequieian. El constiuctoi uel objeto acepta tipos pieuefiniuos y otios peisonalizauos que se uefinen uinmicamente.
Tipos ue uato pieuefiniuos en valiuatoi:
T,93,5 T(2.7 -# -,%.7 ^"# 8#+(9# #3 C#32#8 ],M,7+8(2% Y,3(-,%.8 4.198# 6#7+8(2+(:$ text Tipo que iepiesenta valoies textuales. numbei Se asocia a los nmeios enteios. uecimal Se asocia a los nmeios uecimales. uate Tipo uefiniuo paia las fechas. select Este tipo ue uato es usauo en los combos ue seleccion. email Tipo que se usa paia los campos que ueben contenei un email. foimat_numbei Se usa paia uefinii los foimatos numiicos establecienuo una asociacion con algn objeto uel tipo foimat que sei aplicauo sobie ese campo. foimat_uecimal Relaciona una vaiiable ue la clase Foimat con un campo que contenui valoies uecimales. foimat_money Relaciona una vaiiable ue la clase Foimat con un campo que LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SuS
contenui valoies ue moneua. foimat_peicent Relaciona una vaiiable ue la clase Foimat con un campo que contenui valoies poicentaje.
<script type="text/javascript"> var val = new Validator(); </script>
28 Componente PDFDocument 28.1 Introduccin El objetivo uel componente PBIBocument es la geneiacion ue uocumentos PBF. Est basauo en la estable libieiia FPBF peio auaptauo y mejoiauo paia sei integiauo como paite uel fiamewoik y haceilo paite ue su "gaiantia".
Las mejoias con iespecto a FPBF son:
! Sopoite paia mltiples chaisets IS088S9-1, 0TF-8, etc. ! Faciliuaues paia uefinii coloies y estilos ! Sintaxis y API ms iegulai acoiue al estnuai uel fiamewoik 28.2 Crear un documento PDF 0n uocumento PBF se ciea instancianuo la clase PufBocument. En el siguiente ejemplo se ciea agiega una pgina con un texto y se envia al navegauoi.
/0#123.5 I8#,8 "$ -.+"1#$%. K6! +.$ K6!6.+"1#$%
<?php
class ReportsController extends ApplicationController {
public function showAction(){ $pdf = new PdfDocument(); $pdf->addPage(); $black = PdfColor::fromName(PdfColor::COLOR_BLACK); $pdf->setTextColor($black); $pdf->setFont('helvetica', '', 18); $pdf->writeCell(40, 10, "Hello PDF"); $pdf->outputToBrowser(); }
}
28.3 Agregar una tabla al documento PufBocument piopoiciona sopoite paia celuas y multi-celuas las cuales son tiles cuanuo se ciean uocumentos que van a visualizai tablas ue uatos. En el siguiente ejemplo se geneia un uocumento PBF con los uatos obteniuos ue un mouelo:
//Se envia el listado al navegador $pdf->outputToBrowser();
} }
28.4 Tipos de Papel Soportados PufBocument sopoita los siguientes tipos ue papel:
T,93,5 T(2.7 -# 2,2#3 7.2.8%,-.7 2.8 K-*6.+"1#$%
I.$7%,$%# T(2. K,2#3 6#7+8(2+(:$ PAPER_AS Tipo ue papel AS PAPER_A4 Tipo ue papel A4 PAPER_AS Tipo ue papel AS PAPER_LEuAL Tipo ue papel oficio PAPER_LETTER Tipo ue papel caita
28.5 API de PdfDocument function voiJ __construct{$orientotion=self::0Rl_P0RTRAlT, $unit=self::0NlT_HH, $formot=self::PAPFR_A4) Es el constiuctoi ue PufBocument. Poi uefecto se establece oiientacion veitical, meuiuas en milimetios y papel tipo A4.
public function setFncoJinq{$encoJinq) Establece la couificacion uel texto ue entiaua a mtouos como wiiteCell, wiiteText y wiiteNultiCell.
function voiJ setBebuq{booleon $Jebuq) Establece si el uocumento se geneia en mouo uebug o no. Poi uefecto es false. Si se envia el uocumento al navegauoi en mouo uebug se visualiza el foimato inteino uel uocumento PBF.
function voiJ setHorqins{inteqer $left, inteqer $top, inteqer $riqbt=-1) Peimite establecei las maigenes uel uocumento PBF. El piimei paimetio es la maigen izquieiua, el segunuo la supeiioi y el teiceio la ueiecha. Si no se inuica el teicei paimetio la maigen ueiecha queua igual a la izquieiua.
function voiJ setleftHorqin{inteqer $morqin) Establece la maigen izquieiua uel uocumento PBF.
function voiJ setTopHorqin{inteqer $morqin) Establece la maigen supeiioi uel uocumento PBF.
function voiJ setRiqbtHorqin{inteqer $morqin) Establece la maigen ueiecha uel uocumento PBF.
function voiJ setAutoPoqeBreok{booleon $outo, inteqer $morqin=0) Establece si se uebe agiegai una pgina automticamente cuanuo se exceua el limite infeiioi al ii agieganuo iegistios. El paimetio $maigin peimite establecei la maigen infeiioi uonue se exceue el limite ue caua pgina. El compoitamiento poi uefecto es que se haga el salto ue pgina automticamente.
function voiJ setBisployHoJe{int $zoom, strinq $loyout=1) Peimite establecei el tipo ue visualizacion uel uocumento que el softwaie ue visualizacion uebe tomai poi uefecto. Los posibles valoies son constantes ue la clase PufBocument:
T,93,5 T(2.7 -# >..1 #$ -.+"1#$%.7 K6! I.$7%,$%# o..1 6#7+8(2+(:$ LAY00T_BEFA0LT Es el tipo ue zoom poi uefecto que tenga el softwaie ue visualizacion utilizauo pai vei el uocumento PBF. LAY00T_C0NTIN000S Inuica que no se uebe vei el pginauo sino que una pgina se visualiza una tias otia como si estuvieian uniuas. LAY00T_SINuLE Inuica que se uebe visualizai una pgina completa a la vez LAY00T_TW0 Inuica que se uebe visualizai uos pginas completas a la vez.
function voiJ setCompression{booleon $compress) Inuica si el uocumento PBF uebe sei compiimiuo paia ieuucii su tamao final. Paia usai la opcion ue compiesion es necesaiio que la extension ue php llamaua zlib est habilitaua.
function voiJ setTitle{strinq $title) Establece el titulo uel uocumento PBF.
function voiJ setSubject{strinq $subject) Establece el asunto uel uocumento PBF.
function voiu setAuthoi(stiing $authoi) Establece el autoi uel uocumento PBF.
function voiJ setKeyworJs{strinq $keyworJs) Establece las palabias clave uel uocumento PBF.
function voiJ setCreotor{strinq $creotor) Establece el cieauoi uel uocumento PBF.
function voiu aliasNbPages(stiing $alias='nb') Establece la cauena utilizaua paia ieemplazai el nmeio ue pgina total ue un uocumento PBF en encabezauos y pie ue pgina.
function voiJ open{) Abie el uocumento PBF. Es necesaiio hacei el llamauo a este mtouo paia inicializai el LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S11
uocumento.
function voiJ close{) Cieiia el uocumento PBF.
function voiJ oJJPoqe{int $orientotion=PJfBocument::0R_P0RTRAlT) Agiega una pgina al uocumento PBF. La oiientacion poi uefecto es veitical. Las posibles oiientaciones son:
Es posible utilizai uifeientes oiientaciones en un mismo uocumento PBF.
function inteqer qetPoqeNumber{) 0btiene el nmeio ue pgina actual.
function voiJ setBrowColor{inteqer $reJ, inteqer $qreen=-1, inteqer $blue=-1) function voiJ setBrowColor{PJfColor $color) Establece el coloi con el que se uibujain las lineas y boiues uel uocumento. Este mtouo iecibe S paimetios que coiiesponuen a los niveles RuB uel coloi ueseauo. Caua nivel es un enteio entie u y 2SS. Auicionalmente pueue iecibii un objeto PufColoi con el coloi a establecei. Si no se inuican valoies paia $gieen y $blue se utiliza el valoi uefiniuo en $ieu paia estos.
function voiJ cbeckTTI{strinq $file) Consulta si un aichivo ue fuente TiueType peimite sei embebiuo en uocumentos PBF.
function voiJ setIillColor{inteqer $reJ, inteqer $qreen=-1, inteqer $blue=-1) function voiJ setIillColor{PJfColor $color) Establece el coloi con el que se hai el ielleno ue cuauios y celuas uel uocumento. Este mtouo iecibe S paimetios que coiiesponuen a los niveles RuB uel coloi ueseauo. Caua nivel LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S12
es un enteio entie u y 2SS. Auicionalmente pueue iecibii un objeto PufColoi con el coloi a establecei. Si no se inuican valoies paia $gieen y $blue se utiliza el valoi uefiniuo en $ieu paia estos.
function voiJ setTextColor{inteqer $reJ, inteqer $qreen=-1, inteqer $blue=-1) function voiJ setIillColor{PJfColor $color) Establece el coloi ue los textos uel uocumento. Este mtouo iecibe S paimetios que coiiesponuen a los niveles RuB uel coloi ueseauo. Caua nivel es un enteio entie u y 2SS. Auicionalmente pueue iecibii un objeto PufColoi con el coloi a establecei. Si no se inuican valoies paia $gieen y $blue se utiliza el valoi uefiniuo en $ieu paia estos.
function Jouble qetStrinqWiJtb{strinq $s) Peimite obtenei el tamao ue una cauena ue caicteies ue acueiuo a la fuente activa en el uocumento.
function voiJ setlineWiJtb{inteqer $wiJtb) Establece el ancho ue linea ue la pgina activa uel uocumento.
function voiJ Jrowline{inteqer $x1, inteqer $y1, inteqer $x2, inteqer $y2) Peimite uibujai una linea iecta en la pgina activa uel uocumento.
function voiJ JrowRect{inteqer $x, inteqer $y, inteqer $w, inteqer $b, strinq $style='') Peimite uibujai un cuauiauo o iectngulo en la pgina activa uel uocumento.
function voiJ oJJIont{strinq $fomily, strinq $style='', strinq $file='') Agiega una fuente que no haga paite ue las fuentes coie. Las fuentes coie son: Belvetica, aiial, times, symbol y zapfuingbats.
function voiJ setIont{strinq $fomily, strinq $style='', inteqer $size=0) Establece la fuente activa en el uocumento. Si es una fuente coie pueue sei: Belvetica, aiial, times, symbol y zapfuingbats. Si es una fuente agiegaua con auuFont se uebe utilizai el mismo nombie paia $family utilizauo en ella.
Establece el tamao ue la fuente activa en puntos (pt).
function voiJ link{inteqer $x, inteqer $y, inteqer $wiJtb, inteqer $beiqbt, strinq $link) Agiega un enlace al uocumento PBF en las posiciones inuicauas.
function voiJ writeText{inteqer $x, inteqer $y, strinq $txt) Agiega un texto al uocumento PBF en las posiciones inuicauas.
function booleon occeptPoqeBreok{) Inuica si el uocumento tiene el salto automtico ue pgina al supeiai la maigen infeiioi ue una pgina.
function voiJ writeCell{inteqer $w, inteqer $b=0, strinq $txt='', inteqer $borJer=0, inteqer $ln=0, strinq $oliqn='', inteqer $fill=0, strinq $link='') Bibuja una celua en el uocumento PBF con los paimetios uefiniuos. El paimetio $w inuica el ancho ue la celua, $h es el alto, $txt es el texto, $boiuei pueue sei 1 o u e inuica si la celua uebe tenei un boiue visible, $ln pueue sei 1 o u e inuica si el conteniuo ue la celua es un enlace, $fill pueue sei 1 o u e inuica si la celua uebe sei coloieaua, $link es el enlace y aplica solo cuanuo $ln es 1.
function voiJ lineIeeJ{strinq $b='') Realiza un salto ue linea en el uocumento aumentanuo la cooiuenaua "y" y ieinicianuo "x" al valoi uel maigen izquieiuo. El tamao opcional uel salto ue linea pueue inuicaise con $h.
Bevuelve el valoi ue la cooiuenaua en "x" (hoiizontal) uonue se piouucii la siguiente ienueiizacion ue texto o figuias uel uocumento.
function voiu setX(integei $x) Establece la cooiuenaua en "x" (hoiizontal) uonue se piouucii la siguiente ienueiizacion ue texto o figuias uel uocumento.
function floot qetY{) Bevuelve el valoi ue la cooiuenaua en "y" (veitical) uonue se piouucii la siguiente ienueiizacion ue texto o figuias uel uocumento.
function voiJ setY{inteqer $y) Establece la cooiuenaua en "y" (veitical) uonue se piouucii la siguiente ienueiizacion ue texto o figuias uel uocumento.
function voiJ setXY{inteqer $x, inteqer $y) Establece simultaneamente las cooiuenauas en "y" (veitical) y "x" (hoiizontal) uonue se piouucii la siguiente ienueiizacion ue texto o figuias uel uocumento.
function strinq outputBocument{strinq $nome='', strinq $Jest='')
function strinq outputToBrowser{) Envia el iepoite uiiectamente al navegauoi. El uesaiiollauoi uebe ceicioiaise que otios conteniuos no sean enviauos junto con la saliua ya que esto geneiai una excepcion.
29 Componente Report 29.1 Introduccin El objetivo uel componente Report es cieai una capa ue abstiaccion consitente que peimita meuiante una misma API cieai listauos o iepoites a vaiios foimatos apiovechanuo las caiacteiisticas ue caua uno sin iequeiii esfueizo auicional.
El alcance ue la funcionaliuau ue este componente es limitauo ya que caua muchas ue las caiacteiisticas ue un tipo ue foimato no son fcilmente iepiouucibles en otios y viceveisa. Repoites y listauos ue complejiuau meuia con iespecto a su piesentacion son la "auuiencia" espeiaua ue este componente. 29.2 Alcance del componente Las siguientes caiacteiisticas ue piesentacion estn sopoitauas en los iepoites geneiauos:
Paginacion automtica a tipo ue papel "caita" (lettei), A4 y oficio ("legal"). Tablas con encabezauos Foimato ue coloies, fuentes, sombieauo, subiayauo e italica a los textos Boiues con o sin coloies en las tablas Alineacion ue Texto Izquieiua, Centio y Beiecha
Las siguientes caiacteiisticas funcionales estan sopoitauas en los iepoites geneiauos:
Encabezauos y pie ue pgina Numeiacion ue pginas Encabezauo ue tablas con columnas poi pgina Sumatoiia ue campos poi pgina y al final uel iepoite Conteo ue iegistios 29.3 Adaptadores de Report Los auaptauoies ue Repoit implementan una misma inteifaz a un tipo ue foimato especifico ue tal foima que la piesentacion ue un listauo a otio en otio foimato no vaiie consiueiablemente.
Los auaptauoies se apoyan el libieiias exteinas estables paia geneiai uocumentos con las caiacteiisticas iequeiiuas poi el uesaiiollauoi.
Los siguientes auaptauoies ue tipos ue foimato se encuentian uisponibles en el componente Repoit:
T,93,5 B-,2%,-.8#7 -#3 +.12.$#$%# <#2.8% 4.198# Y#$%,0,7 6#7M#$%,0,7 E(98#8=, /H%#8$, Btml - Es poitable a cualquiei navegauoi - No iequieie ue plugins auicionales paia su visualizacion inmeuiata - Es ipiuo en la mayoiia ue casos - La paginacion ue los iesultauos no es muy confiable - Los uatos geneiauos no son euitables - Bepenuienuo uel navegauoi utilizauo la expoitacion a otias aplicaciones pueue sei compleja Ninguna Puf - Los iepoites geneiauos no son mouicables - La piesentacion es la misma en cualquiei platafoima - La paginacion ue los iesultauos es optima - Bepenuienuo ue la infoimacion geneiaua los uocumentos PBF pueuen sei gianues o muy gianues - Requieie ue aplicaciones o plug-ins extia - La infoimacion suele sei complicaua ue expoitai a otias aplicaciones paia su analisis PBFBocument ue Kumbia Enteipiise basauo en FPBF Excel - La infoimacion es euitable y ua libeitau al usuaiio ue ajustai los infoimes uespus ue geneiauos - Es posible analisai uatos y geneiai gificas estauisticas - El foimato es piivativo y iequieie ue Niciosoft Excel paia su visualizacion o otia hoja ue calculo que pueua abiii este tipo ue aichivos Excel ue Kumbia Enteipiise basauo en PEAR LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S17
como 0pen0ffice - No es seguio que la infoimacion no sea alteiaua poi teiceios Spieausheet Excel_Wiitei CSv La infoimacion se pueue expoitai a otias aplicaciones ue teiceios o a una suite ofimatica No peimiten foimato a textos y no son fciles ue leei poi un humano Ninguna
29.4 Paginacin en reportes FALTA 29.5 Ejemplo de un listado usando Report
/0#123.5 I8#,8 "$ 3(7%,-. "7,$-. <#2.8% <?php
class ListingController extends ApplicationController {
))); $report->setColumnStyle(0, new ReportStyle(array("textAlign" => "center"))); $report->setColumnStyle(1, new ReportStyle(array("textAlign" => "center")));
foreach($this->ReservationType->find() as $tipoReserva){ $report->addRow(array($tipoReserva->getId(), $tipoReserva- >getDetail())); }
$report->outputToBrowser(); } }
29.6 Modo Vista Previa Cuanuo un iepoite es geneiauo a foimato BTNL es posible geneiai una saliua ue vista pievia peimitienuole al usuaiio navegai poi el iepoite en foima ms efectiva. Esta piesentacion no es apta paia impiesion ya que contiene coloies y no iepiesenta lo que iealmente ii a la impiesoia.
Paia activai este mouo ue visualizacion se invoca el mtouo setBisployHoJe con el paimetio Repoit::BISPLAY_PRINT_PREvIEW en el objeto Report ue esta foima:
// Para HTML $report = new Report('Html'); $report->setDisplayMode(Report::DISPLAY_PRINT_PREVIEW);
Esta opcion no tiene efecto en los iepoites en los uems foimatos. 0n ejemplo ue la visualizacion ue este mouo es el siguiente: LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S19
30 Componente Feed 30.1 Introduccin El objetivo uel componente Feeu es la lectuia y geneiacion ue sinuicacion usanuo el foimato RSS. Los uocumentos RSS geneiauos siguen la especificacion RSS 2.u segn el uocumento http://cyber.law.harvard.edu/rss/rss.html ue la univeisiuau ue Baivaiu y http://www.rssboard.org/rss-specification . 30.2 Leer/Importar documentos RSS El siguiente ejemplo muestia como leei un iss uesue un iecuiso iemoto, la iuta tambin pueue sei una aichivo local:
/0#123.5 E##8JZ12.8%,8 -.+"1#$%.7 <'' <?php
$feed = new Feed(); $feed->readRss('http://www.nytimes.com/services/xml/rss/nyt/World.xml'); foreach($feed->getItems() as $item){ print $feed->getTitle(); print $feed->getLink(); }
0na vez caigauos los uocumentos pueuen sei manipulauos o mouificauos ue acueiuo a lo que se iequieia. 30.3 Crear documentos RSS Este componente tambin peimite la cieacion uesue ceio y piesentailos como una saliua estnuai ue la peticion.
31 Componente Core 31.1 Introduccin El componente Coie acta como integiauoi y oiquestauoi ue touas las opeiaciones ejecutauas en el Fiamewoik, auems piopoiciona infoimacion sobie el entoino ue ejecucion a mltiples componentes. 31.2 Jerarqua de Clases cbOPOb I3,7# [90#+% La mayoi paite ue las clases en Kumbio Fnterprise Iromework poseen una clase supeiioi llamaua 0bject. Esta clase implementa el pation Layei Supeitype el cual peimite implementai mtouos que no pueuan sei uuplicauos a lo laigo ue toua la implementacion ue componentes en el Fiamewoik. La clase 0bject se encuentia en librory,Kumbio,0bject.pbp. cbOPOP I.8#I.$*() Se encaiga ue leei los aichivos ue configuiacion ue las aplicaciones e integiai las opciones uefiniuas en ellos a los componentes uel fiamewoik. cbOPOc I.8#E.+,3# Su objetivo es seivii ue puente entie los componentes ue la aplicacion y los componentes ue localizacion e inteinacionalizacion. Cuanuo se geneia una excepcion este componente obtiene los mensajes localizauos apiopiauos al uesaiiollauoi. cbOPOd I.8#I3,77K,%C Nantiene un uiiectoiio ue iutas a las clases uel fiamewoik ue tal foima que se pueua iealizai la inyeccion ue uepenuencia en la aplicacion cuanuo sean iequeiiuos. 31.3 Servicios del Componente Core cbOcOb [9%#$#8 #3 Z$7%,$+# 4,1# El nombie ue la instancia se iefieie al nombie logico uel giupo ue aplicaciones instalauas en una misma uistiibucion uel fiamewoik. Auicional a lo anteiioi tambin se iefieie al uiiectoiio uonue se encuentia instalauo el fiamewoik, este es impoitante es muchos aspectos. cbOcOP o.$, L.8,8(, -# 3,7 B23(+,+(.$#7 Kumbio Fnterprise Iromework peimite establecei un paimetio ue zona hoiaiia geneial paia LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S2S
touas las aplicaciones uentio ue una misma instancia. Este paimetio se encuentia en la seccion core uel aichivo confiq,confiq.ini.
En el manual ue PBP pueue encontiai iuentificauoies valiuos paia la mayoi paite ue zonas hoiaiias ue la tieiia.
En tiempo ue ejecucion pueue cambiai la zona hoiaiia usanuo el mtouo esttico Core::setTimeZone{strinq $timezone), si establece una zona invaliua se geneiai una excepcion CoreFxception. cbOcOc I,19(,8 #3 IC,87#% -# 3, ,23(+,+(:$ Poi uefecto una aplicacion en Kumbio Fnterprise piouuce saliuas usanuo couificacion 0nicoue 0TF-8. Paia que toua la aplicacion utilice un mismo chaiset se iequieie que multiples aspectos estn sincionizauos en este sentiuo.
'#8M(-.8 ?#95 La saliua uel seiviuoi web en el caso ue Apache Web Seivei es estableciua uinmicamente en el aichivo public.htaccess con la opcion:
AddDefaultCharset UTF-8
E, M(7%, 28($+(2,35 La vista piincipal ue la aplicacion piopoiciona el meta Content-Type que uebe sei estableciua ue la siguiente foima paia uefinii el chaiset:
B8+C(M.7 l@E5 La piimeia linea uel encabezauo ue un aichivo XNL tambin uebe sei cambiaua paia ieflejai el cambio uel chaiset.
<?xml version="1.0" encoding="UTF-8" ?>
k,7#7 -# -,%.75 Los motoies ue base ue uatos como NySQL o 0iacle peimiten establecei la couificacion en que se almacenan y uevuelven los uatos en las tablas. Consulte la LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S24
uocumentacion uel motoi utilizauo paia apienuei como mouificai la couificacion poi uefecto.
],M,'+8(2%5 Los aichivos javasciipt ueben estai guaiuauos con la couificacion coiiecta sin embaigo la etiqueta SCRIPT pueue sei estableciua ue la siguiente foima paia ayuuai al navegauoi a ueteiminai el chaiset coiiecto:
I''5 En los iecuisos CSS es posible usai establecei la couificacion uel aichivo tambin paia ayuuai al navegauoi a un majoi ieconocimiento ue la misma asi:
@charset "utf-8";
cbOcOd I,19(,8 3, 3.+,3(>,+(:$ 2.8 -#*#+%. Es posible cambiai la localizacion poi uefecto usanuo el mtouo locole::setBefoult esto afectai touas las opeiaciones iealizauas con los componentes ue inteinacionalizacion como lo son Bate, Tiaslate y Cuiiency.
cbOcON [9%#$#8 3, M#87(:$ -#3 !8,1#R.8S La constante Core::IRAHFW0RK_vFRSl0N peimite obtenei la veision uel fiamewoik utilizauo. Pueue utilizai este valoi paia sepaiai la compatibiliuau ue sus aplicaciones cuanuo actualice el fiamewoik y se piesenten inconvenientes.
if(version_compare(Core::FRAMEWORK_VERSION, "1.0", ">=")){ //La versin del framework es mayor igual a la 1.0 }
31.4 Subcomponente CoreConfig El subcomponente CoreConfiq peimite leei la configuiacion ue las aplicaciones y conveitiilas en valoies nativos ue PBP paia su uso en piocesos ue la aplicacion. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S2S
CoreConfiq pueue leei en foima sencilla aichivos ue configuiacion ue la instancia, ue la aplicacion actualmente en ejecucion y ue otias aplicaciones. cbOdOb BKZ -#3 7"9+.12.$#$%# I.8#I.$*() stotic public Confiq function reoJ{strinq $potb) Lee un aichivo ue configuiacion meuiante su path. El path absoluto poi uefecto es el uiiectoiio iaiz ue la instancia uel fiamewoik.
stotic public Confiq function reoJFnviroment{) Lee el aichivo environment.ini ue la aplicacion activa. Los valoies uel entoino actual pueuen sei acceuiuos uiiectamente en el objeto Confiq uevuelto, los uems entoinos se acceuen meuiante una piopieuau uel objeto.
public stotic Confiq function qetConfiqurotionIrom{strinq $opplicotionNome, strinq $file) Bevuelve la configuiacion en un aichivo ubicauo en una aplicacion especifica. Este aichivo uebe estai ubicauo en el uiiectoiio confiq, ue la aplicacion.
public stotic function reoJIromActiveApplicotion{strinq $file) Lee un aichivo ubicauo el uiiectoiio confiq, ue la aplicacion que est actualmente en ejecucion. 31.5 Subcomponente CoreClassPath uian paite ue los componentes y subcomponentes en Kumbio Fnterprise son caigauos meuiante inyeccion ue uepenuencia usanuo outolooJ. uiacias a esto se ieuuce consiueiablemente la lectuia ue uisco obtenienuo lo que se iequieie en foima uinmica a meuiua que es solicitauo poi la aplicacion.
El ClossPotb es un uiiectoiio inteino que almacena las ubicaciones ue las clases y componentes paia su posteiioi inyeccion cuanuo son iequeiiuos. Poi motivos ue ienuimiento no touos los componentes son inyectauos sobie touo los que funcionan como integiauoies y los que atienuen la peticion.
En subcomponente CoreClossPotb ofiece una inteifaz ue aplicacion paia la auministiacion uel uiiectoiio ue clases peimitienuo agiegai, cambiai o eliminai entiauas facilitanuo la LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S26
mouificacion uel compoitamiento uel fiamewoik. cbONOb <##123,>,8 "$ +.12.$#$%# -#3 !8,1#R.8S Es posible ieemplazai un componente uel fiamewoik cambianuo la iuta uel uiiectoiio ue clases a la uel nuevo componente. La nica iestiiccion es utilizai el mismo nombie ue la nueva clase en el componente utilizauo.
En el siguiente ejemplo se muestia como ieemplazai el componente ue localizacion ue Kumbio Fnterprise poi uno ue la aplicacion. Notese que la extension .php uel aichivo es omitiua a pioposito:
El path asignauo no es compiobauo poi el fiamewoik poi lo que uebe ceicioiaise que este exista y que el aichivo contenga la clase solicitaua. cbONOP BKZ -# I.8#I3,77K,%C stotic public function lookupCloss{strinq $clossNome) Peimite consultai si una clase existe en el uiiectoiio ue clases.
stotic public function qetClossPotb{strinq $clossNome) Peimite consultai la iuta existente en el fiamewoik paia una ueteiminaua clase.
stotic public function oJJToPotb{strinq $clossNome, strinq $potb) Agiega una nueva iuta al uiiectoiio ue clases. Si esta ya existe no se ieemplaza.
stotic public function replocePotb{strinq $clossNome, strinq $potb) Reemplaza una entiaua en el uiiectoiio ue clases.
31.6 Subcomponente CoreType El subcomponente CoieType peimite iealizai aseiciones sobie los paimetios iecibiuos en uifeientes componentes uel fiamewoik aseguianuo que se iecibe el tipo ue uato auecuauo. El tiabajo ue este subcomponente es funuamental paia aseguiai en gian meuiua piocesos ms confiables y seguios. Cuanuo las aseiciones fallan se lanza una excepcion tipo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S27
CoreTypeFxception. cbOeOb BKZ -# I.8#T\2# stotic function voiJ ossertNumeric{int $vor) Realiza una aseicion sobie un valoi numiico
stotic function voiJ ossertBool{bool $vor) Realiza una aseicion sobie un valoi booleano
stotic function voiJ ossertStrinq{strinq $str) Realiza una aseicion sobie un valoi ue cauena ue caiacteies.
stotic function voiJ ossertArroy{orroy $vor) Realiza una aseicion sobie un valoi aiiay.
stotic function voiJ ossertResource{resource $vor) Realiza una aseicion sobie una vaiiable ue iecuiso.
stotic function voiJ ossert0bject{object $vor) Realiza una aseicion sobie un objeto. 31.7 Crear Plugins de Aplicacin La aiquitectuia ue plugins ue Aplicaciones peimite obseivai, extenuei y manipulai el compoitamiento ue la aplicacion segn como las conuiciones lo exijan.
Los plugins peimiten inteiceptai eventos ue la aplicacion ue tal foima que estos sean obseivables y auems ejecutise uno tias otio ue maneia centializaua sin iequeiii iefactoiizacion o ieintegiacion en la aplicacion. cbOaOb I8#,8 "$ K3")($ -# B23(+,+(:$ Los plugins son clases que implementan eventos geneiales que son invocauos a meuiua que el flujo ue viua ue una aplicacion avanza en una sesion ue usuaiio. Estas clases ueben cumplii con los siguientes iequeiimientos:
! Beben estai ubicauos en el uiiectoiio ue plugins usualmente opps,opp-nome,pluqins o LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S28
uonue la vaiiable pluqinsBir inuique. ! El nombie uel aichivo que implementa la clase uebe sei el nombie uel plugin ! El nombie ue la clase uebe tenei la extension Pluqin ! Los plugins ue contiolauoi ueben heieuai ue la clase ApplicotionPluqin o sei subclase ue ella
Las clases pueuen implementai mtouos pblicos que iefeiencian los eventos ocuiiiuos en los contiolauoies, la lista ue ellos es la siguiente:
T,93,5 /M#$%.7 ^"# 7# 2"#-#$ (123#1#$%,8 #$ 23")($7 -# B23(+,+(:$ 4.198# /M#$%. 6#7+8(2+(:$ befoieStaitApplication 0cuiie en la piimeia peticion a la aplicacion antes ue invocaise el mtouo ue ControllerBose onStaitApplication afteiStaitApplication 0cuiie en la piimeia peticion a la aplicacion uespus ue invocaise el mtouo ue ControllerBose onStaitApplication befoieChangeInstance 0cuiie cuanuo en una misma sesion ue usuaiio se cambia a otia instancia uel fiamewoik en el mismo seiviuoi ue aplicaciones. afteiChangeInstance 0cuiie uespus ue ejecutaise el mtouo ue ControllerBose llamauo onCbonqelnstonce. befoieStaitRequest 0cuiie antes ue iniciai empezai a atenuei una peticion iealizaua a la aplicacion. befoieFinishRequest 0cuiie cuanuo se teimina ue atenuei la peticion iealizaua a la aplicacion. befoie0ncaughtException 0cuiie antes ue lanzaise una excepcion que no fue captuiaua poi la aplicacion. onContiolleiException 0cuiie cuanuo se geneia una excepcion uentio uel contiolauoi. Se ejecuta antes ue befoie0ncaughException
32 Componente PluginManager 32.1 Introduccin Este componente peimite auministiai los plugins caigauos en una aplicacion facilitanuo el agiegai o quitai uinmicamente plug-ins. 32.2 Arquitectura de Plug-Ins Kumbia Enteipiise Fiamewoik piopoiciona una aiquitectuia ue Plug-Ins flexible que peimite notificai y iegistiai eventos uesue los uifeientes componentes uel fiamewoik. 32.3 Autoinicializacin de Plug-Ins Poi uefecto los plug-ins encontiauos en el uiiectoiio ue plugins son caigauos automticamente poi el auministiauoi ue plug-ins. Cuanuo hay muchos plug-ins o estos no son usauos fiecuentemente entie peticiones pueuen causai un ueteiioio en el ienuimiento ue la aplicacion.
En el aichivo configconfig.ini es possible configuiai que los plug-ins no sean caigauos automticamente sino que tengan que sei caigauos piogiamacionalmente asi:
[plugins] autoInitialize = Off
En este caso es necesaiio iegistiai los plugins que se vayan a utilizai en tiempo ue ejecucion. 32.4 API de PluginManager stotic function booleon initiolizePluqins{) Inicializa los plugins caigauos sepaianuolos ue acueiuo a su natuialeza: Be contiolauoi, mouelos, vistas y aplicacion. No uebeiia sei invocauo poi el uesaiiollauoi ya que es llamauo automticamente poi el conteneuoi ue aplicaciones.
stotic function orroy looJApplicotionPluqins{) Caiga los plugins almacenauos en el uiiectoiio plugins o el inuicauo en la vaiiable ue configuiacion pluqinsBir.
0btiene un aiiay con touas las instancias ue los plugins iegistiauos en la peticion actual.
stotic function orroy qetControllerPluqins{) 0btiene un aiiay con touas las instancias ue los plugins ue contiolauoi iegistiauos en la peticion actual.
stotic function orroy qetHoJelPluqins{) 0btiene un aiiay con touas las instancias ue los plugins ue mouelos iegistiauos en la peticion actual.
stotic function orroy qetviewPluqins{) 0btiene un aiiay con touas las instancias ue los plugins ue piesentacion iegistiauos en la peticion actual.
stotic function voiJ notifyIromApplicotion{strinq $event) Peimite notificai a los plug-ins ue aplicacion sobie un evento ueteiminauo $event.
stotic function voiJ notifyIromController{strinq $event, Controller $controller) Peimite notificai a los plug-ins ue contiolauoi sobie un evento ueteiminauo $event.
stotic function voiJ notifyIromview{strinq $event, ControllerResponse $controllerResponse) Peimite notificai a los plug-ins ue piesentacion sobie un evento ueteiminauo $event.
stotic function voiJ notifyIrom{strinq $component, strinq $event, strinq $reference) Peimite notificai a los plug-ins ue componentes sobie un evento ueteiminauo $event.
stotic function voiJ reqisterControllerPluqin{ControllerPluqin $pluqin) Peimite iegistiai un objeto como plugin ue contiolauoi. Solo los eventos piouuciuos uespues ue iealizai el iegistio uel plugin ue contiolauoi.
stotic function voiJ reqisterApplicotionPluqin{ApplicotionPluqin $pluqin) Peimite iegistiai un objeto como plugin ue contiolauoi. Solo los eventos piouuciuos uespues ue iealizai el iegistio uel plugin ue aplicacion.
stotic function voiJ reqisterviewPluqin{viewPluqin $pluqin) Peimite iegistiai un objeto como plugin ue piesentacion. Solo los eventos piouuciuos uespues ue iealizai el iegistio uel plugin ue piesentacion.
33 Internacionalizacin y Localizacin 33.1 Introduccin Las actuales infiaestiuctuias ue computacion ofiecen localizacion ue tal foima que un ueteiminauo usuaiio pueua efectuai opeiaciones ue negocio auecuauamente. Los objetivos ue la localizacion van mucho ms all ue que la piesentacion este tiauuciua a mltiples iuiomas, auems ue esto se iequieie auaptai fechas, foimatos ue moneua, hoia, iespuestas, saluuos, etc.
Los componentes Locale, Tiaslate, Bate y Cuiiency ofiecen la funcionaliuau necesaiia paia implementai aplicaciones ue negocio localizauas.
34 Componente Locale 34.1 Introduccin El componente Locale peimite obtenei y establecei infoimacion ue localizacion en aplicaciones sobie uatos especificos geogificos, politicos, cultuiales o iegionales. Actualmente es posible obtenei infoimacion ue S81 localizaciones. 34.2 Definir la localizacin en una sesin de Usuario Kumbio Fnterprise peimite establecei la localizacion poi sesion, esta es uefiniua usanuo un iuentificauoi ue localizacion que sigue el foimato iuioma_REuI0N. Poi ejemplo es_C0 iepiesenta la localizacion paia iuioma espaol y pais Colombia. 0n listauo ue las cauenas ue localizacion pueue sei encontiauo en: http:unicoue.oigcluiuatauiffsupplementallanguages_anu_teiiitoiies.html.
El componente Locale utiliza localizacion inuepenuiente ue la platafoima y que es seguia cuanuo se usa en entoino multi-tbreoJ como lo son los seiviuoies web moueinos. El uso ue la funcion setlocole pouiia piouucii iesultauos inespeiauos si se usan aplicaciones con uifeientes localizaciones en un mismo pioceso uel seiviuoi ue aplicaciones.
La localizacion geneial se establece usanuo el mtouo esttico locole::setlocole{strinq $locole) pasanuo como paimetio un iuentificauoi:
En caso ue pasaise un iuenticauoi no valiuo, este es iecoitauo hasta que sea valiuo. Poi ejemplo:
/0#123.5 [9%#$#8 "$, 3.+,3(>,+(:$ MU3(-, ,3 2,7,8 "$, +,-#$, ($+.88#+%, $locale = new Locale(es_XX); //Es recortado a localizacin es
0na instancia ue la clase Locale es uevuelta al uefinii la localizacion. cdOPOb [9%#$#8 3, 3.+,3(>,+(:$ ,-#+",-, La localizacion pueue sei obteniua ue S foimas, uel navegauoi uel cliente, uel aichivo ue configuiacion ue la aplicacion activa o uel entoino ue ejecucion ue la aplicacion. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS4
cdOPObOb E##8 3, 3.+,3(>,+(:$ -#3 $,M#),-.8 La localizacion es leiua ue la vaiiable ue la peticion BTTP_ACCEPT_LANu0AuE. La que tenga mayoi caliuau es la que se uevuelve:
Touas las localizaciones sopoitauas poi el cliente BTTP pueuen sei obteniuas usanuo locole::qetBrowserAll{). Caua localizacion incluye un vectoi con iuioma, iegion y caliuau. cdOPObOP E##8 3, 3.+,3(>,+(:$ -#3 #$%.8$. -# #0#+"+(:$ La localizacion es leiua uel valoi estableciuo poi la funcion setlocale en el mismo pioceso ue ejecucion actual.
Touas las localizaciones uel entoino ue ejecucion pueuen sei obteniuas usanuo locole::qetFnviromentAll{). Caua localizacion incluye un vectoi con iuioma, iegion y caliuau. cdOPObOc E##8 3, 3.+,3(>,+(:$ -# 3, +.$*()"8,+(:$ -# 3, ,23(+,+(:$ La vaiiable ue configuiacion 'locale' pueue sei estableciua tanto en el aichivo config.ini ue la aplicacion como el ue la instancia:
/0#123.5 [9%#$#8 3, 3.+,3(>,+(:$ 7#)G$ 3, +.$*()"8,+(:$ -# 3, ,23(+,+(:$ $applicationLocale = Locale::getApplication(); 34.3 Establecer la localizacin por defecto Cuanuo la localizacion no es estableciua bajo ninguno ue los paimetios anteiioies se usa el valoi poi uefecto. El mtouo ue locale setBefoult peimite establecei esto.
/0#123.5 I,19(,8 3, 3.+,3(>,+(:$ 2.8 -#*#+%. #$ *.81, 28.)8,1,+(.$,3 // Localizacin por defecto para Espaol/Venezuela Locale::setDefault(es_VE); 34.4 Obtener traducciones localizadas El objeto locole implementa tiauucciones localizauas paia uiveisos ciiteiios ue acueiuo al iuioma y pais. En el siguiente ejemplo se muestia como obtenei la tiauuccion paia 'SI' y 'N0' LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SSS
//Mostrar las traducciones de SI y NO en Francs $locale = new Locale('fr_FR');
print $locale->getYesString()."\n"; // Imprime oui print $locale->getNoString(); // Imprime non
//Mostrar las traducciones de SI y NO en Japons $locale = new Locale('ja_JP');
print $locale->getYesString()."\n"; // Imprime print $locale->getNoString(); // Imprime 34.5 API del Componente Locale FALTA
4.%,5 Es posible que el componente Locale haga conflicto con la extension Intl uel iepositoiio PECL asi que es ieconmenuable uesactivaila. El componente Locale ieemplaza y extenuienue funcionaliuau ue esta extension poi lo que no iequeiii ue ella. 34.6 Subcomponente LocaleMath FALTA
35 Componente Traslate 35.1 Introduccin El componente Troslote peimite la cieacion ue aplicaciones multi-iuioma usanuo uifeientes auaptauoies paia obtenei las listas ue tiauuccion. La clase implementa el pation Pioxy paia acceuei a la funcionaliuau ue los auaptauoies ue maneia unifoime. 35.2 Adaptadores soportados por Traslate Los siguientes auaptauoies son sopoitauos poi este componente:
T,93,5 T(2.7 -# ,-,2%,-.8#7 7.2.8%,-.7 2.8 T8,73,%# T(2. !.81,%. 6#7+8(2+(:$ Aiiay 0tiliza aiiays nativos ue PBP paia almacenai las listas ue tiauuccion. Las llaves son utilizauas paia acceuei al valoi tiauuciuo. CSv 0tiliza aichivos sepaiauos poi comas. El piimei campo iepiesenta la llave ue tiauuccion y el segunuo la tiauuccion en si. INI 0tiliza aichivos .ini. La tiauuccion se establece noimalmente como vaiiables y su valoi es la tiauuccion. Batabase 0tiliza una tabla paia almacenai el uiccionaiio ue tiauuccion. 35.3 Como funciona la traduccin Inuepenuientemente uel auaptauoi utilizauo, el pioceso ue tiauuccion sigue estos piincipios:
! Los iecuisos ue tiauuccion ueben estai uisponibles y mantenei una estiuctuia consistente ue tal foima que sea posible caigai uno el otio uepenuienuo ue la localizacion activa. ! Los uiccionaiios ue tiauuccion ueben tenei una clave y un valoi, en uonue la clave es un couigo inteino o convencion que usa el uesaiiollauoi paia acceuei a los valoies ue tiauuccion. Las claves ueben sei las mismas paia caua uiccionaiio ue tiauuccion ue esta foima es posible obtenei los valoies consistentemente. ! El tipo ue iuioma a utilizai uebe sei caigauo poi el uesaiiollauoi. El componente locole peimite obtenei meuiante vaiios mtouos el lenguaje ms auecuauo uepenuienuo ue los iequeiimientos ue negocio ue la aplicacion. ! 0na vez completauos los pasos anteiioies se instancia la clase Troslote inuicanuo en el piimei paimetio uel constiuctoi el tipo ue auaptauoi a usai, seguiuo ue este las opciones LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS7
uel mismo. ! El iecuiso caigauo en el objeto Troslote contiene las tiauucciones paia la sesion activa. El uso uel mtouo $tiaslate-_(stiing $key) peimite acceuei a los valoies ue tiauuccion sienuo $key la llave ue inuexacion uel uiccionaiio. ! El uesaiiollauoi uebe contiolai que el objeto tiaslate este cieauo y uisponible paia caua vista multi-iuioma en la aplicacion. 35.4 Utilizar traducciones El componente Troslote caiga los uatos ue tiauuccion uel auaptauoi inuicauo y luego peimite obtenei las tiauucciones. En el siguiente ejemplo se muestia como cieai el objeto ue tiauuccion en caua peticion a un contiolauoi:
Entonces se piouuce la saliua iespectiva paia los iuiomas espaol e ingls: "Inicio Salii" y "Bome exit". cNOdOb I.$7(-#8,+(.$#7 2,8, #3 ,-,2%,-.8 B88,\ Como se explico este auaptauoi utiliza aiiays nativos ue PBP paia almacenai los uiccionaiios ue tiauuccion. Se iecomienua el uso ue este auaptauoi ya que ofiece el mejoi ienuimiento en la mayoiia ue los casos. cNOdOP I.$7(-#8,+(.$#7 2,8, #3 ,-,2%,-.8 I7M El auaptauoi CSv peimite caigai las listas ue tiauuccion uesue aichivos CSv (sepeiauos poi comas) FALTA. cNOdOc I.$7(-#8,+(.$#7 2,8, #3 ,-,2%,-.8 Z$( El auaptauoi INI peimite caigai las listas ue tiauuccion uesue aichivos INI FALTA. cNOdOd I.$7(-#8,+(.$#7 2,8, #3 ,-,2%,-.8 6,%,9,7# El auaptauoi Batabase peimite caigai las listas ue tiauuccion uesue una tabla en la base ue uatos. FALTA
36 Componente Date 36.1 Introduccin El componente Bate esta uiseauo paia extenuei el lenguaje PBP agieganuo un tipo ue uato paia el manejo ue fechas ue foima oiientaua a objetos que peimita las opeiaciones entie estas, obtenei fiagmentos e infoimacion ue las piopieuaues uel tiempo tenienuo en cuenta la configuiacion ue localizacion iequeiiua poi la aplicacion. 36.2 Porque debe usar este componente Con Bate se pueuen efectuai opeiaciones usanuo fechas y fiagmentos ue fechas en cualquiei iango ue tiempo inuepenuientemente ue la platafoima utilizaua. El uso ue las funciones ue PBP gmmktime(), mktime(), uate(), stiftime() y otias tienen iestiicciones ue platafoima y conflictos cuanuo las fechas estn fueia ue iango Fii, 1S Bec 19u1 2u:4S:S4 uNT a Tue, 19 }an 2uS8 uS:14:u7 uNT.
Las iestiicciones se ueben a que gian paite ue las opeiaciones entie fechas y hoias se iealizan usanuo maicas ue tiempo que consisten en el nmeio ue segunuos tianscuiiiuos antes o uespus uel 1 ue Eneio ue 197u, cuanuo este nmeio es muy gianue el tipo ue uato floot ue PBP iesulta insuficiente paia almacenailo.
La iefeiencia uel manual ue PBP uice "The size of a float is platfoim-uepenuent, although a maximum of 1.8eSu8 with a piecision of ioughly 14 uecimal uigits is a common value (that's 64 bit IEEE foimat).".
Cuanuo los nmeios ue maicas ue tiempo a almacenai son muy gianues es posible utilizai extensiones ue PBP que sopoitan piecision aibitiaiia como lo son bcmotb o qmp.
El componente tambin sopoita los ajustes hoiaiios ue acueiuo al timezone ue la aplicacion y establece las coiiecciones necesaiias paia el calenuaiio giegoiiano. Igualmente si se tiabaja en un entoino localizauo Bote obtiene los nombies ue uias y meses ue acueiuo al estableciuo. 36.3 Timestamps ilimitados El componente Bote iealiza gian paite ue sus opeiaciones basauo en las maicas inteinas ue tiempo 0nix que se geneian apaitii ue la fecha uel objeto y conuiciones ue zona hoiaiia entie LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S4u
otios. Cuanuo las aplicaciones iequieien sopoitai opeiaciones con fechas fueia uel iango ue Fii, 1S Bec 19u1 2u:4S:S4 uNT a Tue, 19 }an 2uS8 uS:14:u7 uNT es necesaiio que el componente Bote iealice sus opeiaciones utilizanuo matemtica ue alta piecision meuiante el empleo ue la extension ue PBP bcmath.
La extension bcmath piopoiciona una calculauoia binaiia que sopoia nmeios ue piecision aibitiaiia iepiesentanuolos como cauenas ue caiacteies. Cuanuo la extension esta uisponible se pueue activai la integiacion con el componente Bote ejecutanuo el mtouo uel subcomponente ue opeiaciones matemticas localizauas locoleHotb llamauo enobleBcHotb.
Be esta foima se pueue usai fechas en cualquiei iango y efectuai opeiaciones sobie ellas con tianquiliuau. 36.4 Establecer el Timezone Paia un coiiecto funcionamiento ue este componente es necesaiio establecei la zona hoiaiia uonue est ubicaua la aplicacion y ue uonue tomai la infoimacion paia iealizai los ajustes auecuauos a las fechas y hoias.
Kumbio Fnterprise Iromework peimite configuiai el timezone en el aichivo confiq,confiq.ini en la seccion kumbia usanuo un ClBR Timezone lJentifier que es aceptauo poi la funcion Jote_Jefoult_timezone_set{) ue PBP. Paia mayoi consistencia ue las aplicaciones uesaiiollauas en el fiamewoik se uebe usai el mtouo esttico Kumbio::setTimeZone{strinq $clJrlJentifier). Cuanuo se establece un timezone invaliuo se geneia una excepcion.
/0#123.5 I,19(,8 #3 %(1#>.$# ,+%(M. -# *.81, 28.)8,1,+(.$,3 // Para establecer el timezone para Bogot Colombia: Core::setTimezone(America/Bogota);
// Para establecer el timezone para Londres Inglaterra: Core::setTimezone(Europe/London);
Paia una lista completa ue las zonas hoiaiias sopoitauas visite: http:unicoue.oigcluiuatauiffsupplementalteiiitoiy_containment_un_m_49.html. 36.5 Obtener partes fragmentos de fechas Es posible cieai un objeto ue fecha instancianuo uiiectamente la clase Bote, el paimetio que iecibe el constiuctoi es una fecha en foimato YYYY-NN-BB. Si no se establece este se utiliza la LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S41
fecha actual. Si el constiuctoi iecibe una fecha invaliua se geneia una excepcion BoteFxception.
/0#123.5 [9%#$#8 *8,)1#$%.7 -# *#+C,7 //Crear Fecha $fecha = new Date("1986-02-17");
//Obtener el Nmero del Mes $fecha->getMonth(); // Devuelve 2
//Obtener el Ao $fecha->getYear(); // Devuelve 1986
//Obtener el Ao en formato corto $fecha->getShortYear(); // Devuelve 86
//Obtener el Nmero del Da $fecha->getDay(); // Devuelve 17
//Obtener el timestamp (marca de tiempo UNIX) $fecha->getTimestamp(); // Devuelve 509000400
//Obtener el nombre del mes abreviado segn la localizacin actual $fecha->getAbrevMonthName(); // Devuelve Feb
/Obtener el nombre del mes segn la localizacin actual $fecha->getMonthName(); // Devuelve Febrero
//Obtener el nombre del da segn la localizacin actual $fecha->getDayOfWeek(); //Devuelve Lunes
//Obtener el nombre del da segn la localizacin actual en forma abreviada $fecha->getAbrevDayOfWeek(); //Devuelve Lun
//Obtener el nmero del dia de la semana (Domingo=0 hasta Sbado=7) $fecha->getDayNumberOfWeek(); // Devuelve 1
//Obtener la fecha interna en el formato YYYY-MM-DD $fecha->getDate(); // Devuelve 1986-02-17 (string) $fecha; // Devuelve 1986-02-17
//Obtener la fecha de acuerdo a un formato establecido $fecha->getUsingFormat(yy.dd.mm); // Devuelve 86.17.02
//Obtener la fecha de acuerdo al formato de fecha en config.ini $fecha->getUsingDefaultFormat();
//Obtener el periodo de la fecha (YYYYMM) $fecha->getPeriod(); // Devuelve 198602
//Obtener la fecha en formato ISO-8601 $fecha->getISO8601Date(); // Devuelve 1986-02-17T00:00:00-05:00
//Obtener la fecha en formato RFC-2822 $fecha->getRFC2822Date(); // Devuelve Mon, 17 Feb 1986 00:00:00 -0500 36.6 Posicin en el Tiempo 0n objeto Bote tambin pueue piopoicionai infoimacion sobie su posicion en el tiempo, las funciones que ieciben otias fechas aceptan stiings en el foimato YYYY-NN-BB o otios objetos ue fechas:
/0#123.75 ;7. -# 1_%.-.7 -# 2.7(+(:$ -#3 %(#12. +.$ 6,%# //Indica si la fecha corresponde a la actual $fecha->isToday();
//Indica si la fecha corresponde a la fecha de maana $fecha->isTomorrow();
//Indica si la fecha corresponde a la fecha de ayer $fecha->isYesterday();
//Indica si la fecha se encuentra en el mes actual $fecha->isThisMonth();
//Indica si la fecha se encuentra en el ao actual $fecha->isThisYear();
//Indica si el ao de la fecha es bisiesto $fecha->isLeapYear();
//Si la fecha est entre un rango $fecha = new Date(1990-06-04); $fecha->isBetween(1980-01-01, 2000-12-31) // Devuelve true
//Si la fecha NO est entre un rango $fecha = new Date(1990-06-04); $fecha->isNotBetween(1980-01-01, 2000-12-31) // Devuelve false
//Indica si est en el pasado $fecha->isPast();
//Indica si est en el futuro $fecha->isFuture();
//Indica si una fecha es menor que la otra Date::isEarlier(2001-02-30, 2003-04-21) // Devuelve true
//Indica si una fecha es mayor que la otra Date::isLater(2001-02-30, 2003-04-21) // Devuelve false
//Indica si una fecha es igual a la otra Date::isEquals(2001-02-30, 2003-04-21) // Devuelve false
// Compara dos fechas, si la primera es menor a la segunda devuelve -1, si son // iguales devuelve 0 y si la primera es mayor a la segunda devuelve 1 Date::compareDates(2009-01-20, 2009-02-14); // Devuelve -1 Date::compareDates(2009-01-20, 2009-01-20); // Devuelve 0 Date::compareDates(2009-03-05, 2009-02-14); // Devuelve 1 36.7 Informacin de Fechas El componente Bote ofiece mtouos paia obtenei la fecha y hoia actual, asi como fechas iniciales y finales ue aos y meses:
/0#123.5 @_%.-.7 2,8, .9%#$#8 ($*.81,+(:$ -# *#+C,7 // Obtiene el rango de fechas de la semana de Lunes a Domingo donde est // ubicada la fecha $fecha = new Date("2009-02-11"); print_r($fecha->getWeekRange()); //Array ([0] => 2009-02-09 [1] => 2009-02-15)
//Obtener la fecha actual en formato YYYY-MM-DD Date::getCurrentDate();
//Obtener la hora actual en formato HH:MM:SS Date::getCurrentTime(); LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S4S
//Obtener la fecha y hora actual en formato YYYY-MM-DD HH:MM:SS Date::now();
//Obtener el primer dia del ao actual Date::getFirstDayOfYear();
//Obtener el primer dia del ao 1999 Date::getFirstDayOfYear(1999); //Devuelve 1999-12-31
//Obtener el ltimo dia habil del ao 2006 print Date::getLastNonWeekendDayOfYear(2006); //2006-12-29
//Obtener el primer dia del ao 1980 Date::getFirstDayOfYear(1980); //Devuelve 1980-01-01
//Obtener el primer dia del mes de febrero del ao 1980 Date::getFirstDayOfMonth(2, 1980); //Devuelve 1980-02-01
//Obtener el ltimo dia del mes de febrero del ao actual Date::getLastDayOfMonth(2);
//Obtener el ltimo dia del mes de febrero del ao 2000 Date::getLastDayOfMonth(2, 2000); //Devuelve 2000-02-29
//Obtener el ltimo dia habil del mes de julio del ao 1983 print Date::getLastNonWeekendDayOfMonth(7, 1997); //1983-07-29 36.8 Cambiar fragmentos de la fecha Caua objeto ue fecha almacena caua paite ue la fecha y peimite cambiai caua paite mantenienuo la consistencia ue la misma:
$fecha = new Date("2008-02-29"); $fecha->setMonth(-14); print $fecha; //2007-11-30 36.9 Operaciones con fechas Las opeiaciones con fechas se uiviuen en las que mouifican la fecha inteina uel objeto y las que uevuelven nuevos valoies:
/0#123.5 <#,3(>,8 .2#8,+(.$#7 +.$ *#+C,7 //Agregar meses a la fecha $fecha = new Date("2008-08-10"); $fecha->addMonths(2); print $fecha; //2008-10-10
//Quitar meses a la fecha $fecha = new Date("2008-01-10"); $fecha->diffMonths(3); print $fecha; //2008-10-10
//Agregar dias $fecha = new Date("2008-02-29"); $fecha->addDays(5); print $fecha; //2008-03-05
//Quitar dias $fecha = new Date("2008-01-02"); $fecha->diffDays(5); print $fecha; //2007-12-28
//Agregar aos $fecha = new Date("2008-01-02"); $fecha->addYears(3); print $fecha; //2011-01-02
//Quitar aos $fecha = new Date("2008-01-02"); $fecha->diffYears(3); print $fecha; //2005-01-02
// Restar una fecha y devolver dias de diferencia, la fecha interna no se // modifica $fecha = new Date("2008-01-02"); print $fecha->diffDate(2008-01-10); //Devuelve -8
$fecha = new Date("2008-01-30"); print $fecha->diffDate(2008-01-25); //Devuelve 5
El mtouo auuInteival y uiffInteival iealiza sumas y iestas ue inteivalos iespectivamente a otias fechas, la funcion siempie suma o iesta poi lo cual pasai nmeios negativos como segunuo paimetio geneia el mismo iesultauo.
Las opeiaciones tienen en cuenta aos bisiestos, coiiecciones giegoiianas, zonas hoiaiias y iangos ue fecha ue cualquiei longituu.
I.$7%,$%# 6#7+8(2+(:$ INTERvAL_BAY Establece un inteivalo ue uias uel calenuaiio giegoiiano INTERvAL_WEEK Establece un inteivalo ue semanas INTERvAL_N0NTB Establece un inteivalo ue meses uel calenuaiio giegoiiano INTERvAL_YEAR Establece un inteivalo ue aos uel calenuaiio giegoiiano
/0#123.5 ;7. -# ,--Z$%#8M,3 2,8, 7"1,8 ($%#8M,3.7 , *#+C,7 //Devuelve un objeto de fecha apartir de sumarle un intervalo a otra fecha Date::addInterval(1980-05-11, 10, Date::INTERVAL_DAY); //1980-05-21 Date::addInterval(1981-02-27, 7, Date::INTERVAL_DAY); //1980-03-06 Date::addInterval(1980-05-11, 2, Date::INTERVAL_MONTH); //1980-07-11 Date::addInterval(1980-05-11, 5, Date::INTERVAL_YEAR); //1985-05-21
//Devuelve un objeto de fecha apartir de sumarle un intervalo a otra fecha Date::diffInterval(1980-05-11, 10, Date::INTERVAL_DAY); //1980-05-01 36.10 Localizacin de Fechas Poi uefecto los nombies ue meses, uias, eias y foimatos ue fechas son uevueltos usanuo la localizacion ue la aplicacion en confiq.ini. Es posible mouificai la localizacion ue un objeto fecha usanuo el mtouo setLocale() que acepta un objeto locole:
//Fecha en Ingls $date->setLocale(new Locale('en_US')); print $date->getLocaleDate();
//Fecha en Francs $date->setLocale(new Locale('fr_FR')); print $date->getLocaleDate();
//Fecha en Espaol $date->setLocale(new Locale('es_AR')); print $date->getLocaleDate();
//Fecha en Chino $date->setLocale(new Locale('zh_CN')); print $date->getLocaleDate();
Lo anteiioi geneia la siguiente saliua:
Sunday, February 2, 1986 Dimanche 2 Fvrier 1986 Domingo 2 de Febrero de 1986 198622
El mtouo qetlocoleBote obtiene una fecha apta poi la cultuia estableciua usanuo uifeientes LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S46
tipos ue foimatos. El mtouo acepta un paimetio inuicanuo el tipo ue foimato ue fecha a obtenei:
T,93,5 T(2.7 -# *.81,%.7 3.+,3(>,-.7 ^"# 7.2.8%, 6,%# T(2. !.81,%. 6#7+8(2+(:$ full 0btiene una fecha apta paia la localizacion en foimato completo o extenuiuo. Es el foimato pieueteiminauo uel mtouo qetlocoleBote{). long Foimato laigo peio mas coito que 'full'. meuium Foimato ue fecha meuio, til en iepoites o listauos. shoit Foimato ue fecha coito.
El siguiente ejemplo ilustia las fechas obteniuas ue acueiuo a caua tipo ue foimato localizauo. Las vaiiaciones incluso ue paises ue la misma lengua son teniuas en cuenta:
//Tipos de formatos en espaol de Mexico $date->setLocale(new Locale('es_MX')); print $date->getLocaleDate('full'); print $date->getLocaleDate('long'); print $date->getLocaleDate('medium'); print $date->getLocaleDate('short');
//Tipos de formatos en espaol de Colombia $date->setLocale(new Locale('es_CO')); print $date->getLocaleDate('full'); print $date->getLocaleDate('long'); print $date->getLocaleDate('medium'); print $date->getLocaleDate('short');
ueneianuo la siguiente saliua:
Viernes 1 de Noviembre de 1985 1 de Noviembre de 1985 01/11/1985 01/11/85
Viernes 1 de Noviembre de 1985 1 de Noviembre de 1985 1/11/1985 1/11/85 36.11 Establecer el formato de la fecha Los foimatos ue fecha uevueltos poi qetlocoleBote iepiesentan el estnuai inteinacional ue acueiuo a la 0nicoue paia caua localizacion (iuioma y teiiitoiio). Auems ue estos es posible LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S47
obtenei una fecha en un foimato peisonalizauo usanuo el mtouo qet0sinqIormot{). Los foimatos son aplicauos poi el componente y se evita el uso ue funciones PBP como uate o stiftime ue esta foima pueue que algunos foimatos uisponibles en ellas no se encuentien piesentes.
Los mouificauoies ue tipos ue foimato aceptauos poi este son los siguientes:
T,93,5 T(2.7 -# 1.-(*(+,-.8#7 -# *.81,%.7 -# *#+C, ,+#2%,-.7 2.8 6,%#55)#%;7($)!.81,% T(2. @.-(*(+,-.8 6#7+8(2+(:$ uuuu Nombie ue la eia ue la fecha. Antes ue ciisto o uespus ue ciisto segn la localizacion. uuu uu u Nombie abieviauo ue la eia. a.c. y u.c. yy Ao abieviauo. El ao 1997 seiia 97. yyyy y Ao completo. uu Bia uel mes usanuo un ceio al inicio cuanuo el uia es menoi a 1u. u Bia uel mes. EEEE Nombie uel uia ue la semana. EEE Nombie uel uia ue la semana abieviauo. NNNN Nombie uel mes. NNN Nombie uel mes abieviauo. NN Numeio uel mes usanuo un ceio al inicio cuanuo es menoi a 1u. N Nmeio uel mes. i Fecha en foimato RFC-2822 c Fecha IS0 86u1 z Bia uel ao. o Nmeio uel ao IS0-86u1. L Nuestia un 1 cuanuo es ao biciesto y ceio ue lo contiaiio. W Nmeio ue la semana en el ao. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S48
N Repiesentacion nmeiica ue la fecha t Timestamp 0nix e Iuenticauoi ue Zona Boiaiia
0n ejemplo ue uso ue los mouificauoies ue foimato es:
/0#123.5 [9%#$#8 3, *#+C, +.$ "$ *.81,%. 2#87.$,3(>,-. \ "$, 3.+,3(>,+(:$ #7%,93#+(-,- $d = new Date('1999-10-18'); $d->setLocale(new Locale('en_US')); print $d->getUsingFormat('yyyy.MM.dd, DD EEEE r MMMM L c t');
36.12 Obtener la fecha y hora mundial Cuanuo se uesaiiollan aplicaciones que sein implementauas en uifeientes paises yo continentes y el seiviuoi ue aplicaciones iesiue en un punto cential el componente Bote piopoiciona uatos ue fecha y hoia que peimiten logiai esto apaitii ue la zona hoiaiia.
La infoimacion ue zona hoiaiia uepenue ue la platafoima en la que est instalaua la aplicacion y ue la veision ue PBP, pueue instalai una veision actualizaua ue la extension pbp_timezone uisponible en PECL paia obtenei los ltimos uatos ue zona hoiaiia.
37 Componente Currency 37.1 Introduccin El objetivo ue este componente es piopoicionai faciliuaues al uesaiiollauoi paia tiabajai con cantiuaues numiicas ielacionauas con uineio y moneuas, su iepiesentacion ue acueiuo a la localizacion activa y la geneiacion ue montos en letias en uifeientes iuiomas. El componente sopoita uatos monetaiios paia ms ue 9u localizaciones. 37.2 Cantidades usando el formato adecuado El componente Currency peimite aplicai el foimato coiiecto a cantiuaues ue acueiuo a la localizacion activa o la que se establezca. Be esta foima es posible utilizai los sepaiauoies ue uecimales y miles auecuauos paia caua teiiitoiio, el nombie ue la moneua y el simbolo ue uineio auecuauos.
Currency pueue sei usauo meuiante mtouos estticos o cieanuo instancias ue esta cuanuo se iequieie utilizai mltiples localizaciones en un mismo pioceso.
El sepaiauoi ue comas y agiupamiento pueue cambiai ue una localizacion a otia:
$currency = new Currency(new Locale('en_US')); print $currency->getMoney(10000); //10,000.00
$currency->setLocale(new Locale('es_CO')); print $currency->getMoney(10000); //10.000,00 37.3 Simbolo y nombre de la moneda utilizada El componente Currency pueue combinai la conveision al foimato numiico coiiecto y el nombie ue la moneua incluso cuanuo es uifeiente a la localizacion actual. El mtouo getNoney tambin acepta un foimato con tipos ue iuentificauoies paia inuicai uatos auicionales ue la saliua monetaiia:
USD 100.00 (dlar estadounidense) 37.4 Versiones escritas de cantidades 0na ue las capaciuaues impoitantes ue Currency es la posibiliuau ue geneiai veisiones en texto ue cantiuaues monetaiias. El componente se apoya en locoleHotb paia geneiai veisiones esciitas ue cantiuaues supeiioies a billones:
//OMITIR LA MONEDA $currency = new Currency(new Locale('es_UY')); print $currency->getMoneyAsText(250, false);
El mtouo qetHoneyAsText iecibe una cantiuau y segunuo paimetio opcional que inuica si se uebe agiegai la moneua. Este mtouo iealiza una coiiecta pluializacion uel texto ue acueiuo a la cantiuau y agiega las cantiuaues en centavos si aplica. 37.5 API del Componente Currency FALTA
38 Componente ApplicationMonitor 38.1 Introduccin Kumbio Fnterprise Iromework ofiece caiacteiisticas paia el monitoieo ue aplicaciones y sus componentes ue tal foima que pueua mejoiai las taieas ue auministiacion como sintonizacion o ueteiminacion ue pioblemas. El componente ApplicotionHonitor est integiauo con el louJer KFI lnstonce AJministrotion Console peimitienuo que peisonal no-especialista en ieas ue uesaiiollo pueua monitoiizai las aplicaciones ue una ueteiminaua instancia uel fiamewoik.
Al obseivai el flujo ue ejecucion ue una aplicacion es posible contiolai que un pioceso ue negocio geneie los iesultauos espeiauos.
uiacias a los capaciuaues uel fiamewoik ue ejecucion hoiizontal, ApplicotionHonitor pueue iecoiiei caua componente en ejecucion y tomai los uatos necesaiios paia hacei seguimiento a una peticion. 38.2 Infraestructura de Eventos comunes La infiaestiuctuia ue eventos comunes es una tecnologia embebible que piopoiciona seivicios bsicos ue auministiacion ue seivicios a aplicaciones que iequieien monitoiizacion. Esta infiaestiuctuia ofiece un punto ue consoliuacion y peisistencia paia eventos uesue mltiples fuentes asi como su uistiibucion a los consumiuoies ue eventos. Caua evento es uefiniuo usanuo una estiuctuia XNL que uefine la uesciipcion uel mismo.
Esta aiquitectuia ue eventos peimite que uiveisos piouuctos que no estn fueitemente acoplauos los unos con los otios pueuan integiai eventos ue auministiacion piopoicionanuo una vista final a los iecuisos empiesaiiales existentes.
Esta infiaestiuctuia ue eventos piopoiciona faciliuaues paia la geneiacion, piopagacion, peisistencia y consumo ue eventos sin uefinii los eventos en si mismos. El uesaiiollauoi pueue uefinii tipos ue eventos, giupos, filtios y ielaciones entie ellos. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SSS
38.3 Componentes de la Infraestructura de Eventos La infiaestiuctuia ue comn ue eventos consta ue los siguientes componentes: c`OcOb I.11.$k,7#/M#$% Peimite la cieacion ue eventos y acceso a sus uatos. Los iecuisos ue eventos utilizan la API ue CommonBoseFvent paia cieai nuevos eventos en base al mouelo ue aplicacion. Los consumiuoies ue eventos utilizan su API paia leei la infoimacion en ellos. Aplicaciones ue teiceios pueuen conveitii los objetos en iepiesentaciones en XNL paia inteicambiai los uatos. c`OcOP /11(%#8 El emisoi peimite el envio ue eventos poi un canal ue comunicacion BTTP. Bespus ue que un evento se alimenta ue uatos es tiansfeiiuo al emisoi. Este pueue opcionalmente completai uatos uel evento y haceilos paite ue la peticion. Los eventos son enviauos meuiante S0AP o SCA. c`OcOc /M#$% '#8M(+# El seivicio ue eventos iecibe los mensajes enviauos poi el Emmitei, los almacena en un almacen ue uatos peisistente y luego los uistiibuye asincionicamente a otios consumiuoies ue eventos. 38.4 Porque usar monitorizacin? Los seivicios ue monitoieo ue Kumbia Enteipiise Fiamewoik peimiten evaluai ienuimiento, encontiai pioblemas y evaluai el piocesamiento noimal ue un conjunto ue aplicaciones en una instancia. Bay ties iazones piincipales poi las que se uebe monitoiizai: c`OdOb 6#%#81($,+(:$ -# 28.93#1,7 Es posible uiagnosticai eiioies paiticulaies usanuo las capaciuaues ue logging y tiaza que ofiece el fiamewoik. Poi ejemplo si un ueteiminaua aplicacion no est piouucienuo los iesultauos espeiauos es posible activai un log que iealice segumiento a los piocesos ue la misma y asi uetectai las iazones uel fallo. c`OdOP '($%.$(>,+(:$ -#3 <#$-(1(#$%. El componente ApplicotionHonitor tambin pueue obtenei estauisticas ue ienuimiento ue ueteiminauos piocesos y asi pouei encontiai cuellos ue botella geneianuo las sintonizaciones coiiesponuientes que mejoien el ienuimiento. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS4
c`OdOc I.$*(,9(3-,- -# 3, [2#8,+(:$ La monitoiizacion continua ue las aplicaciones ayuua a estabilizai en foima ms eficiente una aplicacion geneianuo iespuestas continuas a pioblemas tanto funcionales como ue ienuimiento. 38.5 Qu se puede monitorear? El monitoieo se iealiza con base a eventos piocesauos poi el fiamewoik. Estos eventos se lanzan en ueteiminauos puntos ue la ejecucion en una peticion.
Paite 8: Auministiacion e Infoimacion ue Aplicaciones 40 Componentes de Propsito General 40.1 Introduccin A continuacion se piesenta la iefeiencia ue los componentes uel fiamewoik que aplican a cualquiei pioyecto ue softwaie.
42 Componente Extensions 42.1 Introduccin El componente Fxtensions se encaiga ue auministiai las extensiones caigauas en una aplicacion ya sea ue foima uinmica o esttica.
0na extension es un componente uel fiamewoik que no se caiga poi uefecto y tampoco es inyectauo al iequeiiise en un pioceso ue negocio. 42.2 Cargar una extensin dinmicamente La caiga uinmica ue extensiones peimite caigai componentes uel fiamewoik o ue usuaiio en el momento en el que se necesiten y poi consiguiente ieuucii ligeiamente la caiga ue lectuia ue uisco.
class PressController extends ApplicationController {
public function indexAction(){
//Cargar extensin de Localizacin Extensions::loadExtension("Kumbia.Locale");
} } 42.3 Cargar una extensin estticamente Los extensiones que se usen ampliamente en la aplicacion pueuen caigaise meuiante el aichivo ue configuiacion ue las aplicaciones llamauo confiq,boot.ini. La estiuctuia uel aichivo es la siguiente:
La seccion mouules tiene la opcion ue configuiacion extensions en la cual se pueue uefinii las extensiones a caigai sepaianuolas poi comas. Las extensiones que estn en el namespace Kumbio hacen paite ue la biblioteca ue componentes ue fiamewoik, las que empiezan poi 0ser son componentes que el uesaiiollauoi a cieauo y estn ubicauas en el uiiectoiio librory LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS9
ue la aplicacion, poi ltimo, la extension se localiza en el uiiectoiio piincipal librory ue la instancia como es el caso ue PbpHoiler. dPOcOb I,8),8 +.12.$#$%#7 -# o#$- !8,1#R.8S Componentes especificos ue ZenJ Iromework pueuen sei caigauos estticamente o uinmicamente usanuo la convencion "Zenu.Componente".
[modules] extensions = Zend.Amf 42.4 Obtener informacin de extensiones cargadas Los siguientes mtouos ue clase Fxtensions piopoicionan infoimacion sobie las extensiones caigauas:
public booleon stotic islooJeJ{strinq $extensionNome) Bevuelve tiue si la extension ya ha siuo caigaua en la peticion actual, false ue lo contiaiio.
public orroy stotic qetlooJeJFxtensions{) Bevuelve un aiieglo con los nombies ue las extensiones caigauas en la peticion actual. 42.5 Inyeccin de componentes Kumbio Fnterprise Iromework utiliza inyeccion ue uepenuencia paia caigai los componentes justo cuanuo son iequeiiuos. Si un componente es usauo fiecuentemente poi la aplicacion es piobable que caigailo estticamente mejoie el ienuimiento en los uems casos es iecomenuable peimitii que sean inyectauos uuiante la ejecucion.
43 Componente Logger 43.1 Introduccin El componente loqqer es un componente cuyo pioposito es el cieai logs usanuo uifeientes backenus meuiante auaptauoies, opciones ue geneiacion como foimatos y filtios e implementacion ue tiansacciones.
Este componente acceue a sus auaptauoies usanuo el pation virtuol Proxy, es uecii, el objeto loqqer solo acta como un Proxy al objeto ieal instanciauo que coiiesponue al tipo ue auaptauoi utilizauo poi el mismo. La clase loqqer uelega touas las taieas al auaptauoi que poi uefecto es el subcomponente Iileloqqer, el cual iealiza el almacenamiento en aichivos planos uel seiviuoi. 43.2 Adaptadores de Logger Touos los auaptauoies implementan la inteiface loqqerlnterfoce que uefine los mtouos que caua auaptauoi uebe implementai. La inteiface tiene la siguiente estiuctuia:
interface LoggerInterface {
public function begin(); public function rollback(); public function commit(); public function close(); public function log($message, $type);
}
Los auaptauoies uisponibles son los siguientes:
T,93,5 B-,2%,-.8#7 -(72.$(93#7 #$ #3 +.12.$#$%# E.))#8 B-,2%,-.8 6#7+8(2+(:$ FileLoggei Peimite esciibii logs a aichivos ue texto plano en el seiviuoi local. NailLoggei Peimite enviai un log a un coiieo electionico automticamente en cuanto es cieauo. SANLoggei Peimite enviai logs como mensajes ue un seiviuoi ue mensajeiia Simple Asynchionous Nessaging (SAN). BatabaseLoggei Peimite giabai los logs en una tabla en la base ue uatos. CompiesseuLoggei Peimite esciibii logs a aichivos ue texto plano compiimiuos usanuo LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S61
ZLib en el seiviuoi local. StieamLoggei Peimite esciibii logs a envoltuias y piotocolos ue PBP que sopoiten esciituia. SocketLoggei Peimite esciibii logs a pueitos TCP0BP que tengan seiviuoies que acepten cauenas ue texto.
El uesaiiollauoi pueue implementai sus piopios logs implementanuo la inteiface loqqerlnterfoce.
0n ejemplo uel uso uel componente Loggei es el siguiente:
class TestController extends ApplicationController {
public function testAction(){ $logger = new Logger(); $logger->log("Esto es una prueba"); }
}
Se ha cieauo una instancia ue la clase loqqer y se ha logueauo el texto "Esto es una piueba". El piimei paimetio que iecibe el constiuctoi ue loqqer es el nombie uel auaptauoi y el segunuo el nombie uel aichivo, en este caso se ha asumiuo que el auaptauoi es 'Iile' y el nombie uel log la convencion logYYYYNNBB.txt.
Los logs se almacenan poi uefecto en el uiiectoiio 'logs' ue la aplicacion, sin embaigo esto pueue mouificaise usanuo el mtouo setPotb(). Los mensajes ue los logs se ciean en mouo "oppenJ" es uecii, que agiegai nuevos logs sobie un aichivo ya existe inseita al final uel aichivo.
El conteniuo iesultante uel aichivo es el siguiente:
[Sun, 31 Aug 08 20:12:31 -0400][DEBUG] Esto es una prueba
Poi uefecto el foimato uel log es %uate%%type% %message%. En el siguiente ejemplo se cambia el foimato ue fecha y hoia y ue la linea uel log en geneial, auems se cambia el nombie uel log:
class TestController extends ApplicationController {
public function testAction(){ $logger = new Logger("File", "my_app.log"); $logger->setFormat("> %type% > %controller%/%action% on %application% at %date% with message: %message%"); $logger->log("Esto es una prueba"); $logger->log("Esto es otra prueba"); }
}
El foimato uel log ha siuo mouificauo usanuo el mtouo setFoimat, el cual iecibe una cauena con mouificauoies que son ieemplazauos poi su valoi coiiesponuiente en el momento en que se geneia el log:
> DEBUG > test/test on default at Sun, 31 Aug 08 20:00:00 -0400 with message: Esto es una prueba > DEBUG > test/test on default at Sun, 31 Aug 08 20:00:00 -0400 with message: Esto es otra prueba
Los mouificauoies que acepta l mtouo setFoimat son:
T,93,5 @.-(*(+,-.8#7 ^"# 8#+(9# #3 1_%.-. 7#%!.81,% @.-(*(+,-.8 6#7+8(2+(:$ %type% Inuica el tipo ue evento logueauo. Consulte la tabla ue tipos ue eventos paia ms infoimacion. %message% Es el mensaje logueauo como tal. %uate% Es la fecha en que ocuiie el evento. Poi uefecto utiliza el foimato que esta asignauo al mouificauoi ue la funcion Jote{r) que coiiesponue al foimato RFC 2822. %contiollei% El contiolauoi actual en el que se llama el log. %action% La accion actual en la que se llama el log. %piioiity% La piioiiuau con iespecto al contexto y el tipo ue evento. %facility% Inuica el contexto en el se piouuce el log. %uil% La 0RL completa pasaua al eniutauoi antes ue llamai al log. %application% La aplicacion actual en la que se geneia el log.
El foimato ue fecha se pueue mouificai usanuo el mtouo setFoimatBate:
class TestController extends ApplicationController {
public function testAction(){ LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S6S
$logger = new Logger("File", "my_app.log"); $logger->setFormat("> %type% > %controller%/%action% on %application% at %date% with message: %message%"); $logger->setDateFormat("Y.m.d H:i"); $logger->log("Esto es una prueba"); } }
?>
El log geneiauo es el siguiente:
> DEBUG > test/test on default at 2008.10.21 00:14 with message: Esto es una prueba 43.3 Tipos de Eventos en Logs El componente loqqer piopoiciona una seiie ue tipos ue eventos que peimiten clasificai caua uno ue acueiuo a una giaveuau o piioiiuau en algunos contextos. Paia uefinii el tipo ue evento en una linea uel log se pasa como segunuo paimetio al mtouo log una constante uel componente loggei asi:
$logger->log("La memoria usada por la aplicacin es ".memory_get_usage(), Logger::INFO);
Los valoies ue las constantes coinciuen con las seveiiuaues usauas poi syslog y estanuaiizauas en el RFC S164 : The BSB syslog Piotocol (http://tools.ietf.org/html/rfc3164) .
Auicionales a los estnuai, Loggei agiega los eventos C0ST0N y SPECIAL con menoi seveiiuau que los uems peio que se utilizan en contextos menos ciiticos. Los tipos ue eventos sopoitauos son:
T,93,5 /M#$%.7 \ 7" -#7+8(2+(:$ T(2. -# /M#$%. '#M#8(-,- 6#7+8(2+(:$ ENERuENCY u Emeigencia: El sistema esta inutilizable. ALERT 1 Aleita: Nensajes ue aleita. CRITICAL 2 Ciitico: Piopenue a la que se tomen acciones ue inmeuiato ERR0R S Eiioies: Eiioies o excepciones ue la aplicacion WARNINu 4 Auveitencias: Conuiciones ue Auveitencia N0TICE S Nensajes que ocuiien en conuicion noimal. INF0 6 Nensajes ue infoimacion. BEB0u 7 Nensajes ue uebug. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S64
C0ST0N 8 Nensajes sin clasificai geneianuos poi el usuaiio final. SPECIAL 9 Conuiciones especiales fueia ue un contexto ue ciiticiuau. Como poi ejemplo llevai un iegistio ue los usuaiios que ingiesan a la aplicacion.
Ntouos uel mismo nombie son piopoicionauos en la clase loqqer y iealizan la misma taiea que log:
/0#123.5 ;7,8 1_%.-.7 ,3(,7 2,8, ($-(+,8 3, 7#M#8(-,- -# "$ 1#$7,0# $logger->log("Esto es una Advertencia!, Logger::WARNING); $logger->warning("Esto es una Advertencia!);
El tipo ue evento poi uefecto es Loggei::BEB0u. 43.4 Logger Facilities Kumbio Fnterprise Iromework mantiene sepaiauos los espacios ue memoiia y ejecucion uesue el Sistema 0peiativo hasta el Nivel ue 0suaiio esta infoimacion peimite evaluai en que contexto se piouucen los mensajes ue log.
Los Facility son los siguientes:
T,93,5 4.198#7 \ -#7+8(2+(:$ -# !,+(3(%(#7 I:-(). 4.198# 6#7+8(2+(:$ u S0 ueneiaua en el contexto ue sistema opeiativo. 0sualmente se ielaciona con pioblemas con peimisos o aleitas uel S0. 1 BARBWARE Relacionauo con activiuaues 2 NETW0RK Es el contexto ue comunicaciones e infiaestiuctuia ue ieu. S FRANEW0RK_C0RE Contexto uel ncleo uel Fiamewoik. 4 FRANEW0RK_C0NP0NENTS Contexto ue Componentes uel Fiamewoik (bunuleu) S SEC0RITY Contexto ue Seguiiuau S A0BIT Contexto ue Auuitoiia LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S6S
6 0SER_LEvEL Pioblemas ocuiiiuos a nivel ue usuaiio y aplicaciones.
Paia obtenei el couigo numiico uel Facility Actual se utiliza el mtouo esttico Iocility::qetIocility{). Poi meuio uel facility es posible ueteiminai el contexto en el que se oiigino un log. El tipo ue evento visto como seveiiuau y el facility como el contexto en el que se geneio, peimiten calculai la "Piioiiuau". sta es el iesultauo ue multiplicai los couigos ue ambos, la seveiiuau y el facility. 43.5 Transacciones con Logs Caua auaptauoi iealiza una implementacion piopia ue tiansacciones segn su natuialeza. Las tiansacciones peimiten al uesaiiollauoi ueciuii si los mensajes ue log acumulauos uuiante un pioceso ue negocio es necesaiio almacenailos en los backenu o anulai la opeiacion. Los mtouos begin, commit y iollback familiaies en un ambiente ue base ue uatos pueuen sei usauos en el aichivo ue log paia auministiai el estauo ue la tiansaccion.
En el siguiente se ejemplo se ilustia meuiante una tiansaccion ue negocio como el log es cieauo peio solo se guaiua si se cumplen cieitas conuiciones uel pioceuimiento:
/0#123.5 I8#,8 "$, %8,$7,++(:$ #$ "$ 3.) <?php
class PricesController extends WebServiceController {
public function enterpriseProcedureAction(){ $logger = new Logger("File", "procedure.log"); $logger->begin(); $customer = new Customer(); $movements = $customer->getMovement(); if(count($movement)==0){ $logger->log("No hay movimiento para el cliente '{$customer- >getId()}'"); } $firstDay = Date::getFirstDayOfYear(); $lastDay = Date::getLastDayOfYear(); $totalPrice = 0; foreach($movements as $movement){ if(Date::between($movement->getDate(), $firstDay, $lastDay)==true){ $logger->log("El movimiento {$movement->getId()} es de este ao"); if($movement->getStatus()!="F"){ $movement->setStatus("F"); $movement->save(); $totalPrice+=$movement->getPrice(); } } else { if($movement->getStatus()!="H"){ $movement->moveToHistorical(); } LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S66
} } if($totalPrice>=$cutomer->getMaxPrice()){ $logger->log("El cliente '{$customer->getId()}' ha sobrepasado su crdito"); $logger->commit(); } $logger->rollback(); } }
?> 43.6 API de FileLogger public voiJ setPotb{strinq $potb) Peimite establecei el Path uonue se almacenaian los logs.
public voiJ setIormot{strinq $formot) Establece el foimato en el que se piouucii caua linea uel log.
public voiJ setBoteIormot{strinq $formot) Establece el foimato ue fecha con los mouificauoies ue las funcion uate() paia piouucii las fechas en las lineas uel log.
public $potb qetPotb{) 0btiene el path actual uonue se estn almacenanuo los logs.
public voiJ loq{mixeJ $msq, $type=loqqer::BFB06) Agiega una line al log ue tipo $type.
public voiJ beqin{) Inicia una tiansaccion en el log.
public voiJ rollbock{) Cancela una tiansaccion en el log.
public voiJ commit{) Acepta una tiansaccion en el log almacenanuo las lineas penuientes.
public voiJ close{) Cierro el loq. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S67
43.7 Uso de MailLogger El componente loqqer sopoita un auaptauoi especial que peimite que este al ceiiaise se envie automticamente a un coiieo electionico. La extension hace uso ue la libieiia ue envio ue coiieo electionico Swift que se uistiibuye con el fiamewoik.
El auaptauoi est uiseauo paia iealizai el envio ue e-mails usanuo el piotocolo SNTP sin uepenuei ue la funcion moil{) ue PBP o ue la heiiamienta senJmoil.
Touas los iegistios uel log que son agiegauos se almacenan en memoiia hasta que se cieiia el log, se invoca el mtouo commit o se uestiuye el objeto. Bebiuo a lo anteiioi es iecomenuable no almacenai logs muy gianues ya que pueuen consumii uemasiaua memoiia y geneiai una saliua fatal poi paite ue la aplicacion.
Los iegistios solo se pueuen agiegai cuanuo se activa una tiansaccion en el log, poi uefecto una es iniciaua automticamente. Tambin se pueue usai el mtouo beqin{) paia iniciaila.
Es necesaiio que el seiviuoi pueua establecei conexiones salientes a pueitos seguios (46S) e inseguios (2S) y que el seiviuoi SNTP est uisponible al tiatai ue iealizai el envio uel log pues ue lo contiaiio se geneiai una excepcion.
La extension ue PBP php_openssl uebe estai caigaua paia hacei uso ue este auaptauoi.
El siguiente es un ejemplo uel uso ue Hoilloqqer envianuo un mensaje uesue una cuenta ue umail:
Al ceiiai el log se envia un mail con los 2 mensajes acumulauos inteinamente en el log. Paia iealizai conexiones seguias poi TLS se uebe establecei el paimetio "secureConnection" a LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S68
tiue.
Cuanuo no se establece el asunto uel mensaje NailLoggei utiliza el siguiente foimato:
Si se uesea enviai el log a vaiios e-mails se pueue pasai un aiiay como segunuo paimetio al instanciai el log:
/0#123.5 /$M(,$-. 3.7 1#$7,0#7 -#3 @,(3E.))#8 , M,8(.7 +.88#.7 #3#+%8.$(+.7 $log = new Logger("Mail", array( "Soporte al Cliente" => "customer.support@example.com", "Soporte Tecnico" => "technical.support@example.com", "anothermail@example.com" ), array( "server" => "smtp.gmail.com", "secureConnection" => true, "username" => "company.support@gmail.com", "password" => "98j2ue12", "subject" => "Problema en la aplicacin" )); $log->log("Un Message de Error", Logger::ERROR); $log->log("Un Message Critico", Logger::CRITICAL); $log->close(); 43.8 Uso de DatabaseLogger FALTA 43.9 Uso de CompressedLogger El auaptauoi CompresseJloqqer peimite esciibii logs a aichivos ue texto plano compiimiuos usanuo zlib en el seiviuoi local. La extension ue PBP zlib uebe estai caigaua paia hacei uso ue este auaptauoi.
La ventaja ue el uso ue este tipo ue logs es que ahoiian sustancialmente espacio ue uisco aunque iequieien ue mayoies iequeiimientos ue piocesamiento.
/0#123.5 I8#,8 "$ 3.) +.128(1(-. +.$ E.))#8 $logger = new Logger("Compressed", "my_app.log.gz"); $logger->log(Esta cadena ser comprimida en el log); $logger->close();
Al igual que Iileloqqer los iegistio se agiegan en mouo appenu es uecii que nuevos mensajes se agiegan al final uel aichivo. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S69
public voiJ setPotb{strinq $potb) Peimite establecei el Path uonue se almacenaian los logs.
public voiJ setIormot{strinq $formot) Establece el foimato en el que se piouucii caua linea uel log.
public voiJ setBoteIormot{strinq $formot) Establece el foimato ue fecha con los mouificauoies ue las funcion uate() paia piouucii las fechas en las lineas uel log.
public $potb qetPotb{) 0btiene el path actual uonue se estn almacenanuo los logs.
public voiJ loq{mixeJ $msq, $type=loqqer::BFB06) Agiega una line al log ue tipo $type.
public voiJ beqin{) Inicia una tiansaccion en el log.
public voiJ rollbock{) Cancela una tiansaccion en el log.
public voiJ commit{) Acepta una tiansaccion en el log almacenanuo las lineas penuientes.
public voiJ close{) Cierro el loq. 43.10 Uso de SAMLogger El auaptauoi SANLoggei peimite enviai logs a un seivicio ue mensajes que sopoiten Simple Asynchionous Nessaging como el IBN WebSpheie NQSeiies. Este auaptauoi iequieie ue a extension SAN que peimite el envio ue mensajes ue logs a aplicaciones basauas en el WebSpheie Application Seivei que usen el piotocolo ue mensajes WebSpheie Platfoim LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S7u
Nessaging (WPN). La extension pueue sei uescaigaua ue PECL.
/0#123.5 /$M(,8 1#$7,0#7 -# 3.) , ?#9'2C#8# @#77,)($) '#8M#8 //Conectarse a un servidor SAM con WebSphere Messaging Server $logger = new Logger("SAM", null, array( host => 192.168.10.100, port => 1506, broker => webspherebroker )); $logger->log(Esto es una alerta, Logger::ALERT);
//Conectarse a un servidor SAM de una aplicacin en WebSphere Application Server $logger = new Logger("SAM", null, array( endpoints => 192.168.10.100:7278:MyMessagingBoostrap, bus => Bus1, targetchain => InboundMessaging )); $logger->log(Esto es una alerta, Logger::ALERT);
43.11 Uso de StreamLogger Este auaptauoi es el ms flexible y potente ue los auaptauoies ue loqqer ya que peimite esciibii logs a uifeientes iecuisos cuya esciituia poi stieam este sopoitaua poi PBP.
En los siguientes ejemplos se ilustia el uso ue este auaptauoi:
/0#123.5 /$M(,8 1#$7,0#7 -# E.) "7,$-. #3 ,-,2%,-.8 '%8#,1E.))#8 //Este log ser enviado a un archivo $logger = new Logger("Stream", file://mylog.txt"); $logger->log(Un log de ejemplo); $logger->close();
//Este log ser enviado a un archivo comprimido con gzip $logger = new Logger("Stream", compress.zlib://mylog.txt.gz");
//Este log ser enviado a un archivo comprimido con bzip2 $logger = new Logger("Stream", compress.bzip2://mylog.txt.gz");
//Este log ser enviado a un archivo comprimido con bzip2 $logger = new Logger("Stream", compress.bzip2://mylog.txt.bz2");
//Este log ser enviado a un archivo mediante SSH $logger = new Logger("Stream", ssh2.sftp://user:password@example.com:22/path/to/file.txt");
//Este log ser enviado a un archivo mediante FTP $logger = new Logger("Stream", ftp://user:password@example.com/path/to/file.txt");
//Este log ser enviado a un archivo mediante FTP seguro $logger = new Logger("Stream", "ftps://user:password@example.com/path/to/file.txt");
//Este log ser enviado a la salida estndar $logger = new Logger("Stream", php://stdout");
//Este log ser enviado a la salida de errores LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S71
$logger = new Logger("Stream", php://stderr");
//Este log ser enviado a memoria $logger = new Logger("Stream", php://memory");
//Este log ser enviado a memoria, en caso que los datos tengan un tamao superior a 2MB sern escritos a disco $logger = new Logger("Stream", php://temp");
//Cambiar limite a 10MB 1073741824 bytes $logger = new Logger("Stream", php://temp/maxmemory:1073741824");
En las opciones uel Stieam pueue estableceise el mouo ue esciituia que tenui en Log ue esta foima:
$logger = new Logger("Stream", file://my_log.txt", array( mode => a ));
Los posibles mouos ue esciituia son:
T,93,5 @.-.7 -# #7+8(%"8, -# 3.)7 "7,$-. '%8#,1E.))#8 @.-. 6#7+8(2+(:$ a Agiega logs al final uel aichivo existente. Si no existe lo ciea. ab Agiega logs al final uel aichivo existe. La esciituia es binaiia. Este es el mouo pieueteiminauo paia StieamLoggei, FileLoggei y CompiesseuLoggei. w Esciibe logs en el aichivo. Lo tiunca si existe y lo ciea si no existe. wb Esciibe logs en el aichivo. Lo tiunca si existe y lo ciea si no existe. La esciituia es binaiia. x Esciibe logs en el aichivo. Si ya existe geneia una excepcion.
43.12 Uso de SocketLogger Peimite esciibii logs a pueitos TCP0BP que tengan seiviuoies o seivicios que acepten cauenas ue texto. Los seiviuoies ue sockets pueuen ieplicai logs a otios seiviuoies meuiante caicteiisticas ue bajo nivel.
/0#123.5 /$M(,8 1#$7,0#7 -# 3.)7 "7,$-. 7.+S#%7 TIKJ;6K //Escribir a un servidor TCP en el puerto 1589 $logger = new Logger("Socket", tcp://192.168.0.10:1589");
//Escribir a un servidor TCP en el puerto 1589 usando una conexin segura $logger = new Logger("Socket", ssl://192.168.0.10:1589");
//Escribir a un servidor UDP en el puerto 111 $logger = new Logger("Socket", udp://192.168.0.10:111");
44 Componente Utils 44.1 Introduccin 0tils es un componente que piincipalmente es utilizauo poi el fiamewoik paia centializai funciones auxiliaies ue pioposito geneial, su funcionaliuau tambin est uisponible al uesaiiollauoi. 44.2 API de Utils stotic function orroy orroyHerqe0verwrite{orroy $o1, orroy $o2) Este mtouo peimite combinai 2 aiiays asociativos multiuimencionales uevolvienuo el iesultauo.
stotic function voiJ orroylnsert{orroy $form, mixeJ $inJex, mixeJ $volue, mixeJ $key=null) Este mtouo peimite inseitai un valoi en una ueteiminaua posicion ue un aiiay movienuo los elementos a su posicion siguiente.
stotic function orroy sconJirRecursive{strinq $pockoqe_Jir, orroy $files=orroy{)) Bevuelve un vectoi con touos los aichivos que haya una iuta. Este mtouo iecoiie iecuisivamente los uiiectoiios encontiauos.
stotic function orroy qetPoroms{orroy $poroms, int $numberArqs) Convieite los paimetios poi nombie iecibiuos en una funcion y los convieite a un aiiay asociativo. El piimei paimetio noimalmente es un aiiay uevuelto poi la funcion func_get_aigs() y el segunuo el valoi uevuelto poi func_num_aigs().
stotic function orroy qetPorom{strinq $porom) Bevuelve un aiiay asociativo con el iesultauo ue un paimetio poi nombie. La llave uel item es el nombie uel paimetio y su valoi iespectivo.
stotic function strinq comelize{strinq $str) Bevuelve una cauena ue caicteies en notacion camelizaua.
stotic function strinq uncomelize{strinq $str) Bevuelve una cauena ue caicteies en noticacion unuei scoie (guion bajo). LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S7S
stotic function strinq lcfirst{strinq $s) Convieite la piimeia letia ue una palabia a minsculas.
stotic function strinq qetKumbio0rl{strinq $url) 0btiene una iuta valiua segn el entoino ue ejecucion ue la aplicacion. Esta 0RL uevuelta peimitii acceuei a la aplicacion usanuo un iecuiso exteino.
stotic function orroy qetuoteJArroy{orroy $touoteArroy, strinq $quoteCbor=''') Agiega comillas a caua elemento ue un aiiay. El caictei ue comillas se establece con $quoteChai.
stotic function strinq ucworJs{strinq $worJs) Convieite la piimeia letia ue caua palabia ue $woius a mayscula iespetanuo el chaiset en el que se encuentia el valoi ue entiaua.
45 Rendimiento y Optimizacin 45.1 Introduccin En este capitulo se iefeiencian los componentes y picticas que ayuuan a mejoiai el ienuimiento ue aplicacion uesaiiollaua en Kumbio Fnterprise. 45.2 Consideraciones de Rendimiento En los siguientes apaitauos se iecomienuan picticas que mejoian el ienuimiento ue una aplicacion. dNOPOb ;%(3(>,+(:$ -# 2,8U1#%8.7 2.8 $.198# Nuchos ue los componentes ue fiamewoik como ActiveRecorJ, Router y Toq sopoitan paimetios poi nombie. Estos peimiten inuicai los valoies ue los paimetios iequeiiuos en cualquiei oiuen solventanuo una limitacion uel lenguaje PBP.
Cuanuo se tiata ue mejoiai el ienuimiento ue una aplicacion es iecomenuable ieemplazai los llamauos a mtouos que utilicen paimetios poi nombie poi aiiays cuyos inuices iepiesenten los nombies ue estos. Be esta foima se elimina el oveiheau que iequieie evaluai meuiante expiesiones iegulaies los paimetios poi nombie y asi optimiza la ejecucion ue la aplicacion. dNOPOP Z$7%,3,8 "$ I,+C# -# [2I.-# 0na ue las mejoies picticas paia mejoiai el ienuimiento ue aplicaciones en Kumbio Fnteprise en fase ue piouuccion es instalai un cacheauoi ue couigo inteimeuio. Bebiuo a que en esta fase aichivos que contienen couigo PBP usualmente no se mouifican, un softwaie especializauo pueue cacheai el couigo inteimeuio (couigo PBP que se ha ievisauo su sintaxis y se ha eliminauo fiagmentos innecesaiios paia la ejecucion como comentaiios y otias paites) ue esta foima caua vez que se caiga un aichivo PBP en el compilauoi paite uel tiabajo ue inteipietacion ya est hecho.
Noimalmente los caches ue couigo inteimeuio leen uatos ue los aichivos PBP como el inouo y el uispositivo uonue esta almacenauo paia cieai un iuentificauoi nico paia el mismo y asi evitai que un mismo aichivo sea leiuo vaiias veces en una misma peticion. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S7S
La eliminacion ue la etapa ue paiseo uel couigo inteimeuio PBP no es la nica mejoia que iealiza un cacheauoi. 0tias mejoias incluyen un consumo ieuuciuo ue iecuisos ue uisco uuio y optimizaciones al couigo inteimeuio. Las aplicaciones que noimalmente iealicen peticiones coitas con una inclusion moueiaua ue otios aichivos en la misma pueuen obtenei mejoias hasta uel 2uu% y Suu%. Paia piocesos laigos la optimizacion pueue sei uel Su% al 4u%. En cualquiei caso la mejoia siempie es consiueiable.
La mayoi ventaja ue los cacheauoies ue couigo inteimeuio es que no iequiien que la aplicacion sea uesaiiollaua bajo ningn tipo ue estanuai o con algn iequeiimiento especial. La nica limitacion es que PBP uebe estai instalauo como un mouulo uel seiviuoi o usanuo FastCuI, esto se uebe a que los uatos uel couigo inteimeuio se almacenan en memoiia compaitiua y sta no est uisponible paia mouulos cgi.
dNOPOPOb I,+C#,-.8#7 -# I:-(). Z$%#1#8-(. 6(72.$(93#7 Existen implementaciones ue cacheauoies tanto abieitas como ceiiauas. En las ue couigo abieito se encuentia la extension PECL Alteinative PBP Cache (APC) http://pecl.php.net/package/APC y Tuick NNCache http://turck- mmcache.sourceforge.net/index_old.html. En las opciones ue couigo ceiiauo est Zenu 0ptimizei http://www.zend.com/store/products/zend-platform/ y phpAcceleiatoi http://freshmeat.net/projects/phpa/.
Las velociuaues ue touas las implementaciones son en piomeuio muy paieciuas. La opcion APC no implementa optimizaciones ue couigo intemeiuio poi lo que en algunas situaciones en ienuimiento pueue sei menoi. dNOPOc '($%.$(>,+(:$ -#3 '#8M(-.8 ?#9 Algunas optimizaciones iefeientes a aplicaciones uesaiiollauas en Kumbio Fnterprise pueuen sei iealizauas a nivel uel Web Seivei. A continuacion se piesentan las que aplican paia Apache Web Seivei o otios basauos en l, como 0rocle ETTP Server y ZenJ Applicotion Server. dNOPOcOb /3(1($,8 #$+,9#>,-.7 ($$#+#7,8(.7 El encabezauo BTTP que contiene el tipo ue seiviuoi usauo es enviauo en caua iespuesta que geneia el seiviuoi Web. En la mayoi paite ue los casos este encabezauo no tiene uso aplicable y poi lo tanto hace algo ms gianue la iespuesta uel seiviuoi sin necesiuau alguna. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S76
Server: Apache/2.0.59 (Unix) PHP/5.2.9 DAV/2 Server at localhost Port 80
Este encabezauo pueue eliminaise cambianuo en la configuicion ue Apache la opcion SeiveiSignatuie a 0ff. Be esta foima se pueue ahoiiai ms ue 1uB ue ancho ue banua paia una aplicacion en piouuccion uuiante un mes. dNOPOd '($%.$(>,+(:$ -# KLK FALTA
46 Componente Cache 46.1 Introduccin Las aplicaciones ue alta uisponibiliuau iequieien uepenuienuo ue las conuiciones uel negocio sistemas ue cache que ofiezcan la posibiliuau ue implementai tiansacciones, contiol ue concuiiencia y clusteiizacion. louJerTecbnoloqy piopoiciona louJerCocbe un pioyecto inuepenuiente peio totalmente integiable al fiamewoik el cual ha siuo uesaiiollauo pensanuo en estas caiacteiisticas empiesaiiales.
Cuanuo se iequieie mejoiai el ienuimiento y optimizai una aplicacion meuiante taieas ms sencillas como cacheai fiagmentos ue vistas, uatos y iegistios Kumbio Fnterprise fromework piopoiciona el componente Cache.
47 Componente Compiler 47.1 Introduccin Kumbio Fnterprise Iromework utiliza inyeccion ue uepenuencias paia instanciai cualquiei componete a meuiua que se va iequiiienuo. Esto iesulta iueal ya que evita que uecenas ue aichivos sean caigauos en una peticion sin que sean iequeiiuos encontiauo la meuia peifecta ue iequeiimientos ue uepenuencias paia caua pioceso ue negocio.
Algunos componentes como Router, Bispotcber, Core, etc., no iequieien ue inyeccion ya que uebiuo a la aiquitectuia uel fiamewoik son iequeiiuos siempie en caua peticion y ue est foima se mejoia el ienuimiento ue una aplicacion. 0tios componentes son iequeiiuos usualmente peio uepenuienuo ue los objetivos ue la aplicacion se pueue uecii que son utilizauos 'fiecuentemente'.
El uesaiiollauoi pueue contai cuantos aichivos son leiuos en una ueteiminaua peticion ue esta foima:
<?php echo print_r(get_required_files()); ?>
Si el nmeio ue aichivos es muy elevauo, la aplicacion pouiia estai consumienuo iecuisos ue lectuia ue uisco altos hacienuo que el ienuimiento ue una aplicacion se uisminuya.
El componente Compiler iesuelve estas situacion geneianuo un solo aichivo con touos los componentes y aichivos uel fiamewoik en una veision 'optimizaua' que son utilizauos en una peticion iegulai y uejnuole el iesto uel tiabajo al inyectoi ue uepenuencias. El uso ue este componente pueue aumentai el ienuimiento uel fiamewoik ue 4 a S veces. Si se cuenta o no se cuenta con un optimizauoi y cacheauoi ue couigo inteimeuio este componente siempie pueue sei ue gian ayuua paia el mejoiamiento uel ienuimiento ue una aplicacion.
Poi sei una solucion basaua 1uu% en PBP pueue tenei un papel vital cuanuo no se cuenta con contiol uel haiuwaie uonue se implementa la aplicacion.
4.%,5 Compiler solo uebe sei usauo cuanuo la aplicacion haya cumpliuo en gian meuiua con las fases ue uesaiiollo y testeo ya que algunos componentes ue la aplicacion son incluiuos en la compilacion con lo cul no se pouiia iealizai cambios a estos. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S79
47.2 Teoria de optimizacin avanzada En este apaitauo se tiata ue explicai las teoiias que en louJerTecbnoloqy se han investigauo paia tiatai ue bscai una ejecucion ms optima ue aplicaciones en PBP. Las investigaciones se basan en benchmaiks a uifeientes tipos ue piocesos. daOPOb [2%(1(>,+(:$ -# +(+3.7 daOPObOb [2%(1(>,+(:$ 2.8 8##123,>. -# *"$+(.$#7 Si paia un conjunto X' ue instiucciones iepetitivas se evalua n veces una misma funcion f{x) -~ y, en JonJe x es un volor esttico poro este contexto entonces pouiia ueciise que hay una uegiauacion uel ienuimiento ya que el valoi y es evaluauo al menos n veces.
La funcion entonces pueue sei tiauuciua a f{x) -~ z ieemplazanuo z' - y' en el conjunto X'. daOPOP [2%(1(>,+(:$ 2.8 #M,3",+(:$ -# %#81($.7 #7%U%(+.7 6#*($(+(:$ b5 Si paia una evaluacion ue la expiesion ue compilacion f : X - Y, los valoies ue x iesultan ue opeiaciones polimoificas ueuucibles entonces se pueue uecii que f : z' - Y piouucii el mismo iesultauo en ejecucion.
6#*($(+(:$ P5 Si paia una evaluacion ue la expiesion ue compilacion f : X - Y, los valoies ue x iesultan ue ieemplazai constantes ueuucibles entonces se pueue uecii que f : z' - Y piouucii el mismo iesultauo en ejecucion. 47.3 Comportamiento de Compiler El componente geneia un nico aichivo con touos los componentes y clases utilizauos en una peticion iegulai a una aplicacion. 0tios componentes pueuen sei agiegauos a este aichivo paia hacei ms efectivo el objetivo espeiauo. daOcOb [2%(1(>,+(.$#7 9U7(+,7 -# 3, +.12(3,+(:$ El aichivo geneiauo es piouuciuo iealizanuo las siguientes optmizaciones que pueuen mejoiai en meuiua menoi o meuia el ienuimiento ue una peticion:
Touos los comentaiios ue linea sencilla y multi-linea son eliminauos Espacios, tabulaciones y saltos ue linea son eliminauos. Aichivos que sean incluiuos en otios aichivos ya incluiuos son omitiuos Las constantes __FILE__ y __LINE__ mantienen su valoi oiiginal LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S8u
daOcOP [2%(1(>,+(.$#7 ,M,$>,-,7 -# 3, +.12(3,+(:$ Con base al funcionamiento inteino uel compilauoi ue PBP es posible ueteiminai que picticas ue piogiamacion son ms ieconmenuables paia obtenei mejoias en velociuau y ienuimiento. Compiler ofiece una fase ue compilacion uenominaua avanzaua en la que iealiza las siguientes optimizaciones:
Touos los stiings ue uoble comilla que no contengan sustituciones ue vaiiables o caiacteies ue baiia inveitiua son conveitiuos a stiings ue comilla sencilla, excepto los que son multi-linea, ue esta foima se evita que el analizauoi lxico uel inteipiete PBP bsque innecesaiiamente expiesiones iegulaies que no van a sei encontiauas. Las sentencias 'foi' son optimizauas cuanuo iealizan conteos sucesivos en su evaluacion. El couigo es mouificauo hacienuo que el conteo se ejecute una sola vez:
Cuanuo alguna ue las vaiiables ue la evaluacion es mouificaua entonces la sentencia 'foi' se mantiene intacta:
<?php
$unaPalabra = "esto es un texto"; for($i=0;$i<=strlen($unaPalabra)-1;$i++){ if($i%2==0){ $unaPalabra.="x"; } if($i>10){ break; } }
Las asignaciones que no se hagan con el opeiauoi ue inciemento o ueciemento son LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S81
conveitiuas a esta foima, poi lo tanto $x = $x 1 se lleva a $x y $x = $x $y se convieite en $x=$y
El uesaiiollauoi pueue tenei en cuenta las optimizaciones anteiioies e implementailas como buenas picticas ue uesaiiollo.
47.4 Generar una Compilacin Como se menciono anteiioimente el objetivo ue la compilacion es ieunii touos aquellos componentes y iecuisos que constituyen una meuia ue lectuia ue uisco optimizanuolos y asi mejoiai el ienuimiento ue la aplicacion.
En el pioceso seleccionauo poi el uesaiiollauoi se invoca el mtouo compileIromework uel componente Compiler:
<?php Compiler::compileFramework() ?> 47.5 Limitaciones de Compiler El componente Compiler tiene las siguientes limitaciones: FALTA
48 Componente GarbageCollector 48.1 Introduccin El componente 6orboqeCollector peimite ue maneia contiolaua compiimii o eliminai uatos uel estauo ue peisistencia y meta-uatos ue entiuaues almacenauos en el auministiauoi ue sesion. 48.2 Porque usar este componente? Los contiolauoies que implementan el estauo ue peisistencia piopoicionan un potente mtouo paia mantenei contextos ue sesion que mejoian la expeiiencia ue usuaiio en un ueteiminanuo componente ue la aplicacion. El uso excesivo ue mltiples contextos (mltiples contiolauoies con estauo ue peisitencia) pouiia sobiecaigai la aplicacion ya que touos los uatos ue peisistencia son paicialmente caigauos en caua peticion.
Este componente pueue uetectai que contextos han expiiauo y libeiai la memoiia peisistente utilizaua aumentanuo el ienuimiento ue la aplicacion. 48.3 Como funciona el GarbageCollector El componente piopoiciona el mtouo 6orboqeCollector::stortCollect{) que con base a una piobabiliuau pieuefiniua invoca una iutina en busca ue uatos uel estauo ue peisistencia o meta-uatos ue entiuaues que se consiueien en ues-uso o expiiauos. La iutina uel colectoi se ejecuta en 2 fases: d`OcOb !,7# -# I.128#7(:$ Piimeio se localizan uatos que no se hayan usauo en un tiempo pieuefiniuo y se compiimen los uatos usanuo zlib en nivel ue compiesion S (noimal). En este caso no se acta piopiamente como iecolectoi ue uatos en uesuso peio ua la opoituniuau ue ie-utilizai los uatos ahoiianuo espacio al mismo tiempo. d`OcOP !,7# -# /3(1($,+(:$ Cuanuo los uatos han supeiauo un tiempo ue uesuso pionunciauo se pioceue a su eliminacion. En el caso ue los contiolauoies peisistentes bsicamente se piouuce el efecto ue ieinicio ue sus atiibutos y en el ue los meta-uatos ue entiuaues se obliga a un nuevo volcauo poi paite ue ActiveRecorJHetoBoto. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S8S
48.4 Activar el GarbageCollector Poi uefecto el gaibage collectoi se encuentia uesactivauo paia cualquiei aplicacion, su activacion pueue sei piogiamacional o ueclaiativa. d`OdOb B+%(M,+(:$ -# 1,$#8, 28.)8,1,+(.$,3 La iutina ue iecoleccion pueue sei invocaua piogiamacionalmente al finalizai una peticion. 0n plugin ue aplicacion iesulta iueal paia invocai el qorboqe collector. Se iecomienua que la iecoleccion se haga siempie al finalizai las peticiones ya que en este punto se aseguia que los uatos a libeiai iealmente esten en uesuso o expiiauos.
class MyCollectorPlugin extends ApplicationPlugin {
public function beforeFinishRequest(){ //Expirar objetos que tengan ms de una hora en desuso GarbageCollector::setCollectTime(3600); GarbageCollector::startCollect(); }
} d`OdOP B+%(M,+(:$ -# 1,$#8, -#+3,8,%(M, En el aichivo confiq,confiq.ini es posible activai ue foima ueclaiativa el iecolectoi meuiante la siguiente configuiacion:
/0#123.5 B+%(M,8 #3 +.33#+%.8 -#7-# #3 ,8+C(M. -# +.$*()"8,+(:$ +.$*()O($( [application] mode = development name = "APPLICATION NAME" debug = On
La uefinicion ue la seccion collector activa el componente 6orboqeCollector y su iutina ue libeiacion ue iecuisos es ejecutaua al final ue caua peticion a la aplicacion. 48.5 Parmetros del Collector Los siguientes paimetios ueteiminan el compoitamiento uel componente:
K,8U1#%8. 6#7+8(2+(:$ piobability Es un nmeio enteio positivo que ueteimina la piobabiliuau que la iutina ue iecoleccion se ejecute. El collectoi se ejecuta cuanuo un nmeio aleatoiio geneiauo entie 1 y probobility ua exactamente en su mitau enteia. 0n nmeio alto ieuuce la piobabiliuau y uno bajo la aumenta. compiessionTime Es el tiempo que un objeto uebe supeiai paia que el colectoi lo compiima paia ahoiiai espacio. Poi uefecto es 9uu segunuos (1S minutos). compiessionLevel Es el nivel ue compiession que se utilizaia en la piimeia fase uel colectoi. Es un enteio entie u paia ceio compiesion y 9 paia mxima. 0n nmeio elevauo aumenta los iecuisos utilizauos paia efectuai la opeiacion peio ieuuce ms espacio. La compiesion se iealiza usanuo el foimato Zlib (ZLIB Compiesseu Bata Foimat Specification veision S.S). Se iequieie que la extension ue PBP zlib este uisponible. Poi uefecto es S. collectTime Es el tiempo que uebe pasai un objeto en uesuso paia maicaise como expiiauo y iealizai su posteiioi eliminacion. Poi uefecto es 18uu segunuos (Su minutos).
49 Componente Session 49.1 Introduccin El componente Session ofiece piincipalmente un mtouo oiientauo a objetos paia la auministiacion ue peisistencia ue una aplicacion Web. Con una aiquitectuia basaua en auaptauoies es posible ue maneia flexible uefinii uifeientes backenu ue almacenamiento ue sesion a caua aplicacion.
Es altamente iecomenuable utilizai el componente Session paia almacenai uatos ue sesion en vez ue utilizai la supeiglobal $_SESSI0N. Los mtouos estticos Session::set y Session::qet auministian la memoiia ue las aplicaciones ue tal foima que los uatos ue sesion sean completamente inuepenuientes a otias aplicaciones que coiian en el mismo seiviuoi y sobie el mismo cliente.
Esta inuepenuencia elimina posibles pioblemas ue seguiiuau asociauos a la utilizacion ue aplicaciones con una estiuctuia ue autenticacion y valiuacion ue cieuenciales iuntica.
En el siguiente ejemplo se visualiza como Session sepaia la peisistencia en caua aplicacion. Tenemos 2 instancias uel Fiamewoik en el uocument ioot uel seiviuoi web, la piimeia paia la intianet y la segunua paia la intianet. Caua instancia tiene una seiie ue aplicaciones asociauas a caua una junto con un backenu ue sesion uifeiente.
En la aplicacion existe una vaiiable ue sesion llamaua "auth", esta vaiiable contiola que el usuaiio final est autenticauo en una aplicacion. Noimalmente utilizaiiamos esta vaiiable usanuo la supeiglobal $_SFSSl0N[outb]. Sin embaigo el valoi ue esta vaiiable estaiia LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S86
asociauo a nuestio 'session iu' y si acceuemos a otia aplicacion tambin estaiiamos autenticauos. Si las ieglas uel negocio lo peimiten esto estaiia coiiecto, peio en la mayoiia ue casos caua aplicacion auministia uifeientes mouelos ue seguiiuau y valiuacion.
El componente Session hace que la misma vaiiable "auth" sea uifeiente en caua aplicacion ue foima inuepenuiente y en foima tianspaiente paia el uesaiiollauoi.
En el ejemplo tambin se visualiza que la aplicacion 'piouuccion' existe tanto en 'intianet' como en 'extianet' sin embaigo su finaliuau es uifeiente. El componente Session sepaia la peisistencia ue sesion tomanuo en cuenta que se encuentia en uifeientes instancias uel Iromework asi el nombie ue la aplicacion sea el mismo. 49.2 Adaptadores de Sesin Caua aplicacion pueue utilizai un backenu uifeiente uesacueiuo a las necesiuaues ue la aplicacion. El componente Session implementa el pation 6otewoy actuanuo como pueita ue enlace al auaptauoi iequeiiuo cuanuo se efectan opeiaciones sobie el estauo ue la sesion. 0na uesciipcion ue los backenu uisponibles es:
T,93,5 B-,2%,-.8#7 -#3 +.12.$#$%# '#77(.$ B-,2%,-.8 6#7+8(2+(:$ Nemcache 0fiece mayoi velociuau y ienuimiento que los uems backenu. El almacenamiento se iealiza en memoiia RAN poi lo que se evita la intensiva lectuiaesciituia ue uisco ue los uems backenu. Su escalabiliuau es mayoi igualmente. Batabase Peimite iealizai el usanuo una tabla en una base ue uatos. En el caso ue NySQL junto con NBB Clustei pueue aumentai la escalabiliuau, aunque esto uebe sei evaluauo ue acueiuo a las ieglas uel negocio. Este tipo ue implementacion ue sesiones aplica el pation Batabase Session State. Files Es el meuio ue almacenamiento poi uefecto ue PBP que utiliza el sistema ue aichivos paia guaiuai los uatos ue sesion. 0ptimizaciones al sistema ue aichivo pouiian mejoiai el ienuimiento. LouueiCache 0tiliza el Louuei Cache como backenu paia almacenai los uatos ue sesion. Be esta foima se pueue conseguii un sistema escalable y ue alta uisponibiliuau paia almacenai el estauo ue sesion ue una aplicacion. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S87
Los auaptauoies ue sesion implementan la inteiface Sessionlnterfoce:
interface SessionInterface {
public function getSaveHandler(); public function initialize();
} diOPOb B-,2%,-.8 -# '#7(:$ @#1+,+C# Paia activai el auaptauoi Hemcocbe se uebe agiegai a la seccion opplicotion uel aichivo confiq.ini ue la aplicacion lo siguiente:
diOPOP B-,2%,-.8 -# '#7(:$ 6,%,9,7# Paia usai el auaptauoi ue sesiones usanuo una tabla ue la bases ue uatos se uebe agiegai a la seccion opplicotion uel aichivo confiq.ini ue la aplicacion lo siguiente:
En la base ue uatos seleccionaua se uebe cieai la siguiente tabla: CREATE TABLE `session_data` ( `id` int(18) NOT NULL auto_increment, `session_id` varchar(35) NOT NULL, `data` text, `timelife` int(15) default NULL, PRIMARY KEY (`id`), KEY `session_id` (`session_id`) );
0n collectoi ue uatos ue sesion no utilizauos es implementauo en este auaptauoi paia los uatos ue sesion que hayan expiiauo. Sesiones que tengan ms ue 24 hoias ue expiiacion sein eliminauas ue la tabla session_Joto. diOPOc B-,2%,-.8 -# 7#7(:$ !(3#7 Es el auaptauoi poi uefecto y no es necesaiio iealizai configuiaciones auicionales paia estableceilo. La iuta ue almacenamiento ue aichivos pueue mouificaise buscanuo apiovechai optimizaciones uel sistema ue aichivos.
Sistemas ue aichivos como ReiserIS en linux pueuen mejoiai el ienuimiento ya que estos auministian mejoi aichivos pequeos. diOPOd B-,2%,-.8 -# 7#7(:$ E."-#8 I,+C# Paia usai este auaptauoi louJerCocbe uebe estai instalauo como una libieiia en la instancia uel fiamewoik. 49.3 Comportamiento de Sesiones Las sesiones Kumbio Fnterprise Iromework son inicializauas en un manageu enviionment (entoino auministiauo) con lo que el punto ue inicializacion y finalizacion ue sesiones no uebe sei un pioblema paia el uesaiiollauoi. Los uatos en el entoino ue peisistencia son seiializauosueseiializauos exactamente cuanuo es necesaiio, un mal manejo ue esto pouiia geneiai peiuiua ue uatos si se iealizase manualmente, especialmente cuanuo se almacenan objetos o se tiabaja con Web seivices. El Fiamewoik implementa el pation Server Session Stote paia conceptualmente auministiai el estauo ue peisistencia ue la aplicacion.
Las sesiones se inicializan justo uespus ue caigai la clase contiolauoia, cualquiei pioceuimiento pievio a esto en uonue se inteiacte con sesiones pueue piouucii iesultauos confusos. Los plugins ue contiolauoi que implementen el mtouo Pluqin::beforeBispotcbloop{) son un ejemplo ue esto. 49.4 Consideraciones de Seguridad Las sesiones son un blanco ue ataques infoimticos entie ellos estan los Bijacking o Fixation. 0na aplicacion Web mal uiseaua pueue sei blanco ue ello, inuepenuiente uel Fiamewoik utilizauo paia su uesaiiollo. 0na ue las mejoies foimas ue evitai esto es usai sessiones basauas en cookies usanuo la uiiectiva ue configuiacion ue php session.use_cookies = 1 y auems session.use_only_cookies = 1.
0na buena piactica auicional a lo anteiioi es ocasionalmente valiuai el tipo ue uato ue los valoies que piovengan ue sesiones usanuo el componente Iilter en casos en los que los valoies ue sesion vayan a sei utilizauos paia inseitai uatos en la base ue uatos:
public function beforeFilter(){ $valor = Session::get(valor, int); $nombre = Session::get(nombre, alpha); }
}
49.5 Variables de sesin El componente Session peimite la auministiacion ue vaiiables ue sesion que coiiesponuen a valoies simples que se iefeiencia meuiante un inuice o nombie clave.
Las vaiiables ue sesion se almacenan en espacios ue memoiia inuepenuientes poi aplicacion con lo que se evita situaciones confusas al utilizai inuices comunes en uifeientes aplicaciones que se usen en una mismo contexto ue sesion con un usuaiio. diONOb BKZ -#3 I.12.$#$%# '#77(.$ public stotic voiJ initSessionBoto{) Inicializa los uatos ue sesion es uecii los ueseiializa y ciea un vectoi inteino listo paia usai. 0sualmente este mtouo no es invocaua poi el uesaiiollauoi y es implicitamente llamauo al usai getBata o setBata.
public stotic voiJ storeSessionBoto{) Este mtouo es llamauo como un reqister_sbutJown_function y seiializa los uatos ue sesion.
public stotic voiJ setBoto{strinq $inJex, mixeJ $volue) Peimite establecei un valoi ue sesion $value meuiante la llave $inuex.
public stotic mixeJ qetBoto{strinq $inJex) Peimite obtenei un valoi ue sesion ue un valoi estableciuo con la llave $inuex.
public stotic voiJ set{strinq $inJex, mixeJ $volue) Establece el valoi ue una vaiiable ue sesion usanuo la clave $inuex y el valoi $value.
public stotic mixeJ qet{strinq $inJex) 0btenei el valoi ue una vaiiable ue sesion usanuo la clave $inuex.
public stotic voiJ unsetBoto{strinq $inJex) Eliminai un vaiiable ue sesion usanuo la clave $inuex LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S9u
public stotic mixeJ issetBoto{strinq $inJex) Peimite conocei si una vaiiable ue sesion ya existe. Este mtouo uevuelve un valoi booleano true cuanuo ya existe y folse en el caso contiaiio.
public stotic voiJ islockeJ{) Peimite sabei si la sesion esta bloqueaua paia esciituia.
public stotic booleon isStorteJ{) Peimite sabei si ya se ha inicializauo el auaptauoi ue sesion y touo el contexto ue sesion como tal.
public stotic voiJ stortSession{) Inicia el contexto ue sesion incluyenuo el auaptauoi ue auministiacion ue sesiones. 49.6 SessionNamespace La clase SessionNomespoce es un subcomponente ue Session el cual peimite la utilizacion ue uatos ue sesion ue maneia oiientaua a objetos y mantenienuo la inuepenuizacion ue la memoiia peisistente ue las aplicaciones uesaiiollauas.
Al cieai un Nomespoce se asigna un nombie nico que peimite iuentificai el espacio ue nombies en toua la aplicacion. Los iuentificauoies ue los Nomespoces ueben sei Stiings, estos no tienen conflicto con los nombies utilizauos en los mtouos Session::set y Session::qet.
Los objetos ue sesion cieauos en los SessionNomespoce son objetos auministiables que son automticamente seiializauosueseiializauos al guaiuaise en el backenu ue sesion. Auems, estos objetos tienen la piopieuau ue poueise bloqueaiuesbloqueai paia evitai que su valoi sea mouificauo poi eiioi o poi componentes ue teiceios.
En el siguiente ejemplo se muestia un SessionNomespoce paia almacenai la infoimacion ielevante a los uatos uel usuaiio al inicio ue una sesion. Como se ilustia, no es necesaiio ejecutai ningn pioceuimiento paia almacenai los cambios uel Namespace, el nombie 0serBoto es usauo posteiioimente paia iecupeiai la infoimacion uel mismo.
class LoginController extends ApplicationController {
public function processLoginAction(){ $userData = SessionNamespace::add('UserData', 'name', 'John Smith'); $userData->setRole("Administrator"); $userData->setLogin("j.smith"); }
public function anotherAction(){ $userData = SessionNamespace::get('UserData'); if($userData->getRole()=="Administrator"){ Flash::notice("Bienvenido, su login es ".$userData- >getLogin()); } SessionNamespace::lock('UserData'); }
public function theLastAction(){ $userData = SessionNamespace::get('UserData'); try { $userData->setRole("Public"); } catch(SessionException $e){ Flash::error("Error: La sesión esta bloqueada"); } } }
Paia obteneiestablecei los valoies uel namespace se uebe utilizai getteissetteis implicitos en el objeto uevuelto poi SessionNomespoce::oJJ o SessionNomespoce::qet. Estos utilizan notacion camelizaua y la utilizacion uel mismo ayuua a que el compoitamiento ue este sea el espeiauo. Los objetos cieauos son instancias ue NomespoceContoiner quien auems piopoiciona los mtouos setvolue y qetvolue que peimiten obteneiestablecei los valoies uel namespace uinmicamente meuiante claves. diOeOb BKZ -# '#77(.$4,1#'2,+# public stotic NomespoceContoiner oJJ{strinq $nomespoce, strinq $property=null, mixeJ $volue=null) Ciea un nuevo SessionNamespace o uevuelve uno existe. Es posible establecei un piimei valoi usanuo el paimetio $piopeity y $value.
public stotic voiJ lock{strinq $nomespoce) Bloquea el SessionNamespace paia evitai cambios en sus uatos inteinos.
public stotic voiJ unlock{strinq $nomespoce) Besbloquea el SessionNamespace peimitienuo cambios en sus uatos inteinos. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S92
public stotic NomespoceContoiner qet{strinq $nomespoce) 0btiene un SessionNamespace existente.
public stotic booleon exists{strinq $nomespoce) Inuica si un SessionNamespace ya existe o no.
public stotic voiJ reset{strinq $nomespoce) Elimina los uatos uel SessionNamespace.
public stotic voiJ Jrop{strinq $nomespoce) Elimina el SessionNamespace.
50 Herramientas del Desarrollador 50.1 Introduccin En este capitulo se explican compoitamientos ue las aplicaciones uesaiiollauas en Kumbia Enteiipiise que siivan ue guia al uesaiiollauoi. Auems se piesentan componentes que ofiecen faciliuaues paia el testeo o el ropiJ Jevelopment como la geneiacion ue couigo aceleianuo piocesos ue uesaiiollo en una aplicacion ue negocios.
51 Errores y Excepciones 51.1 Introduccin Kumbio Fnteprise es un fiamewoik uiseauo paia sostenei e implementai aplicaciones ciiticas cuyos piocesos esten excesivamente testeauos y cuanuo se lleven a piouuccion tengan una mauuiez consiueiablemente buena. Paia logiai esto se ha uiseauo el fiamewoik paia auoptai en cieito nivel compoitamientos como los ue los lenguajes compilauos o semi- compilauos.
Las aplicaciones en PBP noimalmente iealizan acciones que uepenuienuo ue la situacion conllevan a que piocesos aboiten o no se ejecuten coiiectamente uebiuo a malas picticas ue uesaiiollo. Estas picticas van uesue cieai uinmicamente atiibutos en objetos, obtenei valoies ue inuices que no se han uefiniuo en aiiays, pasai aigumentos uel tipo incoiiecto a mtouos y funciones y hasta no implementai el mouo E_STRICT.
Cuanuo usteu uesaiiolla en Kumbio Fnterprise el fiamewoik le ayuua a uetectai cualquiei mala pictica ue uesaiiollo o situaciones ue baja ciiticiuauau que muchas veces se pasan poi alto obliganuo a que se tome un coiiectivo apiopiauo.
El caictei inteipietauo ue PBP uificulta que se encuentien eiioies o inconvenientes ue tipos en una piimeia fase ue compilacion ya que esta es inexistente. Poi esto es necesaiio hacei testeos a touos los piocesos en mltiples escenaiios paia uetectai pioblemas y coiiegiilos. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S94
51.2 Modo SUPER_STRICT Touas las situaciones ue eiioi, auveitencia e infoimacion que se geneian uesue PBP y como paite uel pioceso ue valiuacion iiguioso implementauo en una aplicacion se iepoitan al uesaiiollauoi en foima ue excepciones.
Algunas situaciones que geneian excepciones:
Llamauos a mtouos y funciones envianuo tipos ue uatos incoiiectos. Funciones que ieciban aiiays o instancias pieuefiniuas ue objetos. Llamauos a mtouos y funciones con un nmeio incoiiecto ue paimetios Leei una piopieuau ue un objeto que no haya uefiniuo pieviamente Esciibii una piopieuau ue un objeto que no se haya uefiniuo pieviamente Leei una vaiiable que no se haya uefiniuo Leei un valoi ue un inuice ue un aiiay que no se haya uefiniuo Leei con incluue un aichivo que no exista Invocai un mtouo en foima esttica sin que este uefiniuo como tal Realizai una uivision poi ceio Realizai una opeiacion cuyos opeianuos no esten sopoiauos poi los opeiauoies Beseiializai un objeto incompleto Asignai una iefeiencia a un objeto instanciauo con new Inuexai un vectoi usanuo una constante no uefiniua Tiatai ue conveitii un objeto (sin __toStiing()) uefiniuo en un valoi escalai (enteio, flotante) Tiatai ue conveitii un objeto stuClass en una cauena
vaiiables ue configuiacion que geneian excepciones (pueuen sei uesactivauas):
Tenei iegistei_globals activauo Tenei session.use_only_cookies = u 51.3 Capturar excepciones de gravedad leve Algunos uesaiiollauoies pueuen consiueiai que ueteiminauos componentes son susceptibles a excepciones leves y poi lo tanto estas ueban contiolaise auecuauamente. Las excepciones poi notificaciones, auveitencias y otias son geneiauas con un couigo que peimite LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S9S
//Imprimir una variable que no existe print $value;
} catch(CoreException $e){ //Si es una excepcin leve la re-lanza if($e->getMessage()!=-8){ throw $e; } }
Los couigos ue las excepciones leves son las siguientes: T,93,5 I:-().7 2,8, (-#$%(*(+,8 #H+#2+(.$#7 3#M#7 I:-(). T(2. 6#7+8(2+(:$ -8 Notificaciones Inuica que se ha encontiauo situaciones que pouiian inuicai un posible eiioi o inconsistencia. -2 Auveitencias Inuica situaciones que inuica que no se ha pouiuo completai una opeiacion espeiaua peio que peimiten que se continue con la ejecucion ue la aplicacion. -16 Auveitencias ue PBP Son situaciones ue auveitencia geneiauas poi PBP como poi ejemplo el no pouei caigai una extension. -2u48 Nouo Stiict ueneia excepciones que pievienen que el couigo no se vuelva obsoleto a tiavs uel tiempo y sea fcilmente poitable a nuevas veisiones ue PBP.
Existen otios tipos ue excepciones, sus couigos coinciuen con los valoies ue las constantes E_0SER_ERR0R, E_0SER_WARNINu, E_0SER_N0TICE, E_BEPRECATEB y otias.
52 Componente Debug 52.1 Introduccin El componente Bebuq ofiece al uesaiiollauoi la posibiliuau ue iealizai seguimiento y obtenei infoimacion extenuiua en piocesos ue negocio ue foima tiauicional meuiante la inseicion ue banueias en el couigo paia conocei el valoi y estauo en un ueteiminauo punto uel mismo. Es una buena pictica iealizai pieviamente test ue uniuau a los piocesos ue negocio paia automatizai los piocesos ue testeo mejoianuo la estabiliuau ue estos. 52.2 Seguimiento al estado de variables El componente Bebug piopoiciona el mtouo oJJ{mixeJ $volue, $sbowTroce=folse) que peimite agiegai una vaiiable a la lista ue seguimiento. Los valoies ue seguimiento solo se agiegan si el pioceuimiento tiazauo ejecuta la linea uonue se encuentia el llamauo.
En el siguiente ejemplo se envia al seguimiento 2 valoies en ueteiminauos puntos uel pioceso. El piimeio visualiza el conteniuo ue la vaiiable $customeiIu y el segunuo el conteniuo uel vectoi $customeiAccounts
class BankingController extends ApplicationController {
public function getSelectedActivityAction(){ $selectedAccountsIds = $this->getPostParam("cuenta"); $customerAccounts = array(); if(is_array($selectedAccountsIds)){ $userData = SessionNamespace::get('UserData'); $customerId = $userData->getCustomer(); //Que hay en la variable $customerId? Debug::add($customerId); foreach($selectedAccountsIds as $accountId){ $accountId = $this->filter($accountId, "int"); $existsAccount = $this->Account->count("customer_id = '$customerId' AND id='$accountId' AND status='A'"); if($existsAccount==true){ $customerAccounts[] = $accountId; } else { Flash::error("Cuentas invalidas en la peticion"); return; } } } else { Flash::error("Datos invalidos en la peticion"); return; } //Que hay en customerAccounts? Debug::add($customerAccounts); $movements = $this->Movement->find("account_id IN (".join(", ", $customerAccounts).")", "order: created_at DESC"); LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S97
$this->setParamToView("movements", $movements); new DebugException(Visualizar el Debug); } }
Siempie se iequieie que se lance una excepcion sin captuiai. El componente Bebuq visualiza el seguimiento sin impoitai el tipo ue excepcion geneiaua. En el ejemplo no se piouuce ninguna excepcion poi lo que a pioposito se lanza un BebuqFxception.
En la pantalla ue excepciones ahoia se muestia el cuauio llamauo "Batos ue Bebug" como el siguiente:
La piimeia columna es el oiuen en el que se agiegaion al seguimiento los valoies, la segunua es el valoi que se paso al mtouo oJJ{), luego la clase y el mtouo en uonue se agiego el uebug, la linea, el aichivo y poi ltimo el tiempo tianscuiiiuo entie un seguimiento y otio. 52.3 Visualizar la traza del seguimiento de un valor Paia cieitos casos pueue que sea impoitante veiificai que mtouos se ejecutaion paia que un uato se haya agiegauo al seguimiento. El segunuo paimetio ue oJJ peimite que se muestie la tiaza asociaua al valoi ue seguimiento.
Los valoies iesaltauos en iosauo inuican que tienen una tiaza asociaua que apaiece a continuacion en giis. En la tiaza es posible visualizai que paimetios iecibio caua mtouo ejecutauo y en que aichivo se encuentia. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S98
52.4 Detener un proceso mediante Aserciones En un pioceso ue seguimiento tambin pueue sei til uetenei el pioceso cuanuo se cumpla una ueteiminaua conuicion. Tomanuo la iuea ue los test ue uniuau es posible inseitai aseiciones en el pioceso. Las aseiciones evaluan conuiciones y en caso ue cumpliise lanzan una excepcion ue tipo BebuqFxception uetenienuo el pioceso y mostianuo el segumiento hasta ese punto. Touas las aseiciones que no se cumplieion tambin se muestian en el seguimiento. Las aseiciones uisponibles son:
T,93,5 B7#8+(.$#7 7.2.8%,-,7 #$ 6#9") @_%.-. 6#7+8(2+(:$ asseitEquals(mixeu $val1, mixeu $val2, $showTiace=false) Aseicion si el valoi $val1 es igual a $val2. asseitNotEquals(mixeu $val1, mixeu $val2, $showTiace=false) Aseicion si el valoi $val1 no es igual a $val2. asseitNull(mixeu $val1, $showTiace=false) Aseicion si $val1 es nulo. asseitAiiay(mixeu $val1, $showTiace=false) Aseicion si $val1 es un aiiay. assetTiue(mixeu $val1, $showTiace=false) Aseicion si $val1 es veiuaueio. asseitFalse(mixeu $val1, $showTiace=false) Aseicion si $val1 es falso.
El uso ue las aseiciones es el siguiente:
/0#123.5 ;7. -# ,7#8+(.$#7 #$ 6#9") <?php
$v = 100; Debug::assertEquals(1, $v); //No se lanza la excepcin Debug::assertNotEquals(1, $v); //Se lanza la excepcin Debug::assertTrue(100==$v); //Se lanza la excepcin
$employees = $this->Employees->find(status=A); Debug::assertEquals(count($employees), 10); //Se lanza si hay 10 trabajadores
Tomanuo el ejemplo anteiioi, el cuauio ue uebug se visualiza el tipo ue aseicion y los valoies uel mismo:
52.5 Establecer una accin a ejecutar al finalizar el proceso de debug El componente Bebuq pueue apiovechai las capaciuaues paia piogiamai eventos uel fiamewoik paia efectuai opeiaciones al teiminai la piocesai una ueteiminaua peticion. Las acciones que se pueuen piogiamai son geneiai una excepcion que visualice el conteniuo uel seguimiento o almacenailos en un aichivo ue log:
Paia uetenei la ejecucion al finalizai la peticion se uebe hacei el llamauo a:
53 Test de Unidad 53.1 Introduccin El testeo unitaiio peimite a uesaiiollauoies e ingenieios ue piuebas compiobai que caua uniuau ue couigo fuente en el softwaie funciona como se espeia. Se pueue uecii que una uniuau es la paite ms pequea ue una aplicacion que se pueue piobai.
Los test ue uniuau ayuuan a oiganizaciones a geneiai mejoies aplicaciones ms ipiuo, lo que les geneia ventajas competitivas impoitantes.
Kumbio Fnterprise Iromework posee su piopio componente paia el uesaiiollo y ejecucion ue piuebas unitaiias tanto paia aplicaciones, como paia piobaise a si mismo. Los ingenieios ue louJerTecbnoloqy han uesaiiollauo ms ue 1Suu test unitaiios paia piobai en piofunuiuau, caua funcionaliuau uel fiamewoik y mejoiai el componente en si mismo. 53.2 Tests para Componentes Componentes ue usuaiio pueuen sei piobauos usanuo test ue uniuau. Estos ueben iesiuii en un ambiente exteino paia compiobai que la misma natuialeza ue su uso es la espeiaua. FALTA
55 Apendices 55.1 Estndares de Codificacin En este apenuice se explica los estnuaies que fueion seguiuos paia couificai el fiamewoik y que ueben sei seguiuos poi colaboiauoies y empleauos ue louJerTecbnoloqy. NNObOb [90#%(M.7 Auto-uocumentai el fiamewoik ue tal maneia que las caiacteiisticas ue auto-completauo ue couigo que tienen los IBEs ue uesaiiollo NNObOP !.81,%. -# B8+C(M.7 KLK ! La etiqueta ue cieiie "." no est peimitiua paia los aichivos que contienen solo couigo PBP. ! La inuentacion ue los aichivos uebe haceise con 4 espacios sin caiacteies tabulauoies. ! La couificacion ue los aichivos uebe sei 0TF-8 ! En aichivos no-compiimiuos, caua linea uebe tenei mximo 8u caiacteies. ! En aichivos compiimiuos caua linea uebe tenei mximo 2u48 caiacteies o 7uu constiucciones uel lenguaje ! La teiminacion ue linea uebe iealizaise con el caictei LF, ASCII 1u coiiesponuiente a aichivos 0nix. NNObOc I3,7#7 ! Las clases coiiesponuientes al fiamewoik ueben estai ubicauas en el uiiectoiio "Kumbia". ! Los nombies ue las clases ueben estai camelizauos y contenei solo caiacteies alfanumiicos. ! Solo es peimitiuo una clase poi aichivo ! El nombie uel aichivo coiiesponue al nombie ue la clase en l ms la extension ".php". NNObOd Z$%#8*,+#7 ! Las inteifaces ueben estai uefiniuas en un aichivo llamauo Inteiface.php en el uiiectoiio uel paquete o subpaquete uonue aplique su uso. ! Las inteifaces ueben tenei el sufijo Inteiface. NNObON @_%.-.7 ! Los nombies ue los mtouos ueben tenei nomenclatuia camelizaua, es uecii no se peimiten unueiscoies "_" y siempie ueben empezai poi un caictei en minsculas. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4uS
NNObOe Y,8(,93#7 ! Las vaiiables ueben tenei solo caiacteies alfanumiicos. Cuanuo son piopieuaues piivauas o piotegiuas ue clases ueben empezai poi un unueiscoie "_". ! La visibiliuau ue las piopieuaues ue las clases uebe sei piincipalmente piivaua o piotegiua. ! Los nombies ue las vaiiables ueben sei lo ms humanizauas posible ue tal foima que se entienua el objetivo ue la vaiiable. vaiiables que almacenan valoies auxiliaies en ciclos pueuen tenei nombies como $j o $i. NNObOa I.$7%,$%#7 ! Solo est peimitiuo uefinii constantes ue clase. Estas ueben estai en maysculas y caua palabia uebe estai sepaiaua poi unueiscoie "_". NNObO` k.3#,$.7 \ M,3.8#7 $"3.7 ! Los valoies tiue, false y null siempie ueben ii en minsculas. NNObOi E(%#8,3#7 -# I,-#$,7 -# I,8,+%#8#7 ! Las cauenas ue caiacteies siempie ueben ii enceiiauas usanuo comillas simples (') a menos que contengan substituciones o otias comillas sencillas. ! $cauena = 'Esto es una cauena' NNObObQ '"97%(%"+(.$#7 -# M,8(,93#7 Se iecomienua evitai las substituciones ue vaiiables poi expiesiones ue concatenacion. FALTA 55.2 Licencia de este Documento NNOPOb I8#,%(M# I.11.$7 B%%8(9"%(.$ cOQ TBE W0RK (AS BEFINEB BEL0W) IS PR0vIBEB 0NBER TBE TERNS 0F TBIS CREATIvE C0NN0NS P0BLIC LICENSE (CCPL 0R LICENSE). TBE W0RK IS PR0TECTEB BY C0PYRIuBT ANB0R 0TBER APPLICABLE LAW. ANY 0SE 0F TBE W0RK 0TBER TBAN AS A0TB0RIZEB 0NBER TBIS LICENSE 0R C0PYRIuBT LAW IS PR0BIBITEB. BY EXERCISINu ANY RIuBTS T0 TBE W0RK PR0vIBEB BERE, Y00 ACCEPT ANB AuREE T0 BE B00NB BY TBE TERNS 0F TBIS LICENSE. T0 TBE EXTENT TBIS LICENSE NAY BE C0NSIBEREB T0 BE A C0NTRACT, TBE LICENS0R uRANTS Y00 TBE RIuBTS C0NTAINEB BERE IN C0NSIBERATI0N 0F Y00R ACCEPTANCE 0F S0CB TERNS ANB C0NBITI0NS. LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4u4
bO 6#*($(%(.$7 Auaptation means a woik baseu upon the Woik, oi upon the Woik anu othei pie-existing woiks, such as a tianslation, auaptation, ueiivative woik, aiiangement of music oi othei alteiations of a liteiaiy oi aitistic woik, oi phonogiam oi peifoimance anu incluues cinematogiaphic auaptations oi any othei foim in which the Woik may be iecast, tiansfoimeu, oi auapteu incluuing in any foim iecognizably ueiiveu fiom the oiiginal, except that a woik that constitutes a Collection will not be consiueieu an Auaptation foi the puipose of this License. Foi the avoiuance of uoubt, wheie the Woik is a musical woik, peifoimance oi phonogiam, the synchionization of the Woik in timeu-ielation with a moving image (synching) will be consiueieu an Auaptation foi the puipose of this License.
Collection means a collection of liteiaiy oi aitistic woiks, such as encyclopeuias anu anthologies, oi peifoimances, phonogiams oi bioaucasts, oi othei woiks oi subject mattei othei than woiks listeu in Section 1(f) below, which, by ieason of the selection anu aiiangement of theii contents, constitute intellectual cieations, in which the Woik is incluueu in its entiiety in unmouifieu foim along with one oi moie othei contiibutions, each constituting sepaiate anu inuepenuent woiks in themselves, which togethei aie assembleu into a collective whole. A woik that constitutes a Collection will not be consiueieu an Auaptation (as uefineu above) foi the puiposes of this License.
Bistiibute means to make available to the public the oiiginal anu copies of the Woik oi Auaptation, as appiopiiate, thiough sale oi othei tiansfei of owneiship.
Licensoi means the inuiviuual, inuiviuuals, entity oi entities that offei(s) the Woik unuei the teims of this License.
Woik means the liteiaiy anuoi aitistic woik offeieu unuei the teims of this License incluuing without limitation any piouuction in the liteiaiy, scientific anu aitistic uomain, whatevei may be the moue oi foim of its expiession incluuing uigital foim, such as a book, pamphlet anu othei wiiting a lectuie, auuiess, seimon oi othei woik of the same natuie a uiamatic oi uiamatico-musical woik a choieogiaphic woik oi enteitainment in uumb show a musical composition with oi without woius a cinematogiaphic woik to which aie assimilateu woiks expiesseu by a piocess analogous to cinematogiaphy a woik of uiawing, LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4uS
painting, aichitectuie, sculptuie, engiaving oi lithogiaphy a photogiaphic woik to which aie assimilateu woiks expiesseu by a piocess analogous to photogiaphy a woik of applieu ait an illustiation, map, plan, sketch oi thiee-uimensional woik ielative to geogiaphy, topogiaphy, aichitectuie oi science a peifoimance a bioaucast a phonogiam a compilation of uata to the extent it is piotecteu as a copyiightable woik oi a woik peifoimeu by a vaiiety oi ciicus peifoimei to the extent it is not otheiwise consiueieu a liteiaiy oi aitistic woik.
You means an inuiviuual oi entity exeicising iights unuei this License who has not pieviously violateu the teims of this License with iespect to the Woik, oi who has ieceiveu expiess peimission fiom the Licensoi to exeicise iights unuei this License uespite a pievious violation.
Publicly Peifoim means to peifoim public iecitations of the Woik anu to communicate to the public those public iecitations, by any means oi piocess, incluuing by wiie oi wiieless means oi public uigital peifoimances to make available to the public Woiks in such a way that membeis of the public may access these Woiks fiom a place anu at a place inuiviuually chosen by them to peifoim the Woik to the public by any means oi piocess anu the communication to the public of the peifoimances of the Woik, incluuing by public uigital peifoimance to bioaucast anu iebioaucast the Woik by any means incluuing signs, sounus oi images.
Repiouuce means to make copies of the Woik by any means incluuing without limitation by sounu oi visual iecoiuings anu the iight of fixation anu iepiouucing fixations of the Woik, incluuing stoiage of a piotecteu peifoimance oi phonogiam in uigital foim oi othei electionic meuium.
PO !,(8 6#,3($) <()C%7. Nothing in this License is intenueu to ieuuce, limit, oi iestiict any uses fiee fiom copyiight oi iights aiising fiom limitations oi exceptions that aie pioviueu foi in connection with the copyiight piotection unuei copyiight law oi othei applicable laws.
cO E(+#$7# j8,$%O Subject to the teims anu conuitions of this License, Licensoi heieby giants You a woiluwiue, ioyalty-fiee, non-exclusive, peipetual (foi the uuiation of the applicable copyiight) license to exeicise the iights in the Woik as stateu below: to Repiouuce the Woik, to incoipoiate the Woik into one oi moie Collections, anu to LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4u6
Repiouuce the Woik as incoipoiateu in the Collections to cieate anu Repiouuce Auaptations pioviueu that any such Auaptation, incluuing any tianslation in any meuium, takes ieasonable steps to cleaily label, uemaicate oi otheiwise iuentify that changes weie maue to the oiiginal Woik. Foi example, a tianslation coulu be maikeu The oiiginal woik was tianslateu fiom English to Spanish, oi a mouification coulu inuicate The oiiginal woik has been mouifieu. to Bistiibute anu Publicly Peifoim the Woik incluuing as incoipoiateu in Collections anu, to Bistiibute anu Publicly Peifoim Auaptations.
!.8 %C# ,M.(-,$+# .* -."9%5 Non-waivable Compulsoiy License Schemes. In those juiisuictions in which the iight to collect ioyalties thiough any statutoiy oi compulsoiy licensing scheme cannot be waiveu, the Licensoi ieseives the exclusive iight to collect such ioyalties foi any exeicise by You of the iights gianteu unuei this License Waivable Compulsoiy License Schemes. In those juiisuictions in which the iight to collect ioyalties thiough any statutoiy oi compulsoiy licensing scheme can be waiveu, the Licensoi waives the exclusive iight to collect such ioyalties foi any exeicise by You of the iights gianteu unuei this License anu, voluntaiy License Schemes. The Licensoi waives the iight to collect ioyalties, whethei inuiviuually oi, in the event that the Licensoi is a membei of a collecting society that auministeis voluntaiy licensing schemes, via that society, fiom any exeicise by You of the iights gianteu unuei this License.
The above iights may be exeiciseu in all meuia anu foimats whethei now known oi heieaftei ueviseu. The above iights incluue the iight to make such mouifications as aie technically necessaiy to exeicise the iights in othei meuia anu foimats. Subject to Section 8(f), all iights not expiessly gianteu by Licensoi aie heieby ieseiveu. dO <#7%8(+%(.$7O The license gianteu in Section S above is expiessly maue subject to anu limiteu by the following iestiictions: You may Bistiibute oi Publicly Peifoim the Woik only unuei the teims of this License. You must incluue a copy of, oi the 0nifoim Resouice Iuentifiei (0RI) foi, this License with eveiy copy of the Woik You Bistiibute oi Publicly Peifoim. You may not offei oi impose any teims on the Woik that iestiict the teims of this License oi the ability of the iecipient of the Woik to exeicise the iights gianteu to that iecipient unuei the teims of the License. You may not LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4u7
sublicense the Woik. You must keep intact all notices that iefei to this License anu to the uisclaimei of waiianties with eveiy copy of the Woik You Bistiibute oi Publicly Peifoim. When You Bistiibute oi Publicly Peifoim the Woik, You may not impose any effective technological measuies on the Woik that iestiict the ability of a iecipient of the Woik fiom You to exeicise the iights gianteu to that iecipient unuei the teims of the License. This Section 4(a) applies to the Woik as incoipoiateu in a Collection, but this uoes not iequiie the Collection apait fiom the Woik itself to be maue subject to the teims of this License. If You cieate a Collection, upon notice fiom any Licensoi You must, to the extent piacticable, iemove fiom the Collection any cieuit as iequiieu by Section 4(b), as iequesteu. If You cieate an Auaptation, upon notice fiom any Licensoi You must, to the extent piacticable, iemove fiom the Auaptation any cieuit as iequiieu by Section 4(b), as iequesteu. If You Bistiibute, oi Publicly Peifoim the Woik oi any Auaptations oi Collections, You must, unless a iequest has been maue puisuant to Section 4(a), keep intact all copyiight notices foi the Woik anu pioviue, ieasonable to the meuium oi means You aie utilizing: (i) the name of the 0iiginal Authoi (oi pseuuonym, if applicable) if supplieu, anuoi if the 0iiginal Authoi anuoi Licensoi uesignate anothei paity oi paities (e.g., a sponsoi institute, publishing entity, jouinal) foi attiibution (Attiibution Paities) in Licensoi's copyiight notice, teims of seivice oi by othei ieasonable means, the name of such paity oi paities (ii) the title of the Woik if supplieu (iii) to the extent ieasonably piacticable, the 0RI, if any, that Licensoi specifies to be associateu with the Woik, unless such 0RI uoes not iefei to the copyiight notice oi licensing infoimation foi the Woik anu (iv) , consistent with Section S(b), in the case of an Auaptation, a cieuit iuentifying the use of the Woik in the Auaptation (e.g., Fiench tianslation of the Woik by 0iiginal Authoi, oi Scieenplay baseu on oiiginal Woik by 0iiginal Authoi). The cieuit iequiieu by this Section 4 (b) may be implementeu in any ieasonable mannei pioviueu, howevei, that in the case of a Auaptation oi Collection, at a minimum such cieuit will appeai, if a cieuit foi all contiibuting authois of the Auaptation oi Collection appeais, then as pait of these cieuits anu in a mannei at least as piominent as the cieuits foi the othei contiibuting authois. Foi the avoiuance of uoubt, You may only use the cieuit iequiieu by this Section foi the puipose of attiibution in the mannei set out above anu, by exeicising Youi iights unuei this License, You may not implicitly oi explicitly asseit oi imply any connection with, sponsoiship oi enuoisement by the 0iiginal Authoi, Licensoi anuoi Attiibution Paities, as appiopiiate, of You oi Youi use of the Woik, without the sepaiate, expiess piioi wiitten peimission of the 0iiginal Authoi, Licensoi anuoi Attiibution Paities. Except as otheiwise agieeu in wiiting by the Licensoi oi as may be otheiwise peimitteu by LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4u8
applicable law, if You Repiouuce, Bistiibute oi Publicly Peifoim the Woik eithei by itself oi as pait of any Auaptations oi Collections, You must not uistoit, mutilate, mouify oi take othei ueiogatoiy action in ielation to the Woik which woulu be piejuuicial to the 0iiginal Authoi's honoi oi ieputation. Licensoi agiees that in those juiisuictions (e.g. }apan), in which any exeicise of the iight gianteu in Section S(b) of this License (the iight to make Auaptations) woulu be ueemeu to be a uistoition, mutilation, mouification oi othei ueiogatoiy action piejuuicial to the 0iiginal Authoi's honoi anu ieputation, the Licensoi will waive oi not asseit, as appiopiiate, this Section, to the fullest extent peimitteu by the applicable national law, to enable You to ieasonably exeicise Youi iight unuei Section S(b) of this License (iight to make Auaptations) but not otheiwise. NO <#28#7#$%,%(.$7m ?,88,$%(#7 ,$- 6(7+3,(1#8 0NLESS 0TBERWISE N0T0ALLY AuREEB T0 BY TBE PARTIES IN WRITINu, LICENS0R 0FFERS TBE W0RK AS-IS ANB NAKES N0 REPRESENTATI0NS 0R WARRANTIES 0F ANY KINB C0NCERNINu TBE W0RK, EXPRESS, INPLIEB, STAT0T0RY 0R 0TBERWISE, INCL0BINu, WITB00T LINITATI0N, WARRANTIES 0F TITLE, NERCBANTIBILITY, FITNESS F0R A PARTIC0LAR P0RP0SE, N0NINFRINuENENT, 0R TBE ABSENCE 0F LATENT 0R 0TBER BEFECTS, ACC0RACY, 0R TBE PRESENCE 0F ABSENCE 0F ERR0RS, WBETBER 0R N0T BISC0vERABLE. S0NE }0RISBICTI0NS B0 N0T ALL0W TBE EXCL0SI0N 0F INPLIEB WARRANTIES, S0 S0CB EXCL0SI0N NAY N0T APPLY T0 Y00. 6. Limitation on Liability. EXCEPT T0 TBE EXTENT REQ0IREB BY APPLICABLE LAW, IN N0 EvENT WILL LICENS0R BE LIABLE T0 Y00 0N ANY LEuAL TBE0RY F0R ANY SPECIAL, INCIBENTAL, C0NSEQ0ENTIAL, P0NITIvE 0R EXENPLARY BANAuES ARISINu 00T 0F TBIS LICENSE 0R TBE 0SE 0F TBE W0RK, EvEN IF LICENS0R BAS BEEN ABvISEB 0F TBE P0SSIBILITY 0F S0CB BANAuES. aO T#81($,%(.$O This License anu the iights gianteu heieunuei will teiminate automatically upon any bieach by You of the teims of this License. Inuiviuuals oi entities who have ieceiveu Auaptations oi Collections fiom You unuei this License, howevei, will not have theii licenses teiminateu pioviueu such inuiviuuals oi entities iemain in full compliance with those licenses. Sections 1, 2, S, 6, 7, anu 8 will suivive any teimination of this License. Subject to the above teims anu conuitions, the license gianteu heie is peipetual (foi the uuiation of the applicable copyiight in the Woik). Notwithstanuing the above, Licensoi ieseives the iight to ielease the Woik unuei uiffeient license teims oi to stop uistiibuting the Woik at any time pioviueu, howevei that any such election will not seive to withuiaw this LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4u9
License (oi any othei license that has been, oi is iequiieu to be, gianteu unuei the teims of this License), anu this License will continue in full foice anu effect unless teiminateu as stateu above. `O @(7+#33,$#."7 Each time You Bistiibute oi Publicly Peifoim the Woik oi a Collection, the Licensoi offeis to the iecipient a license to the Woik on the same teims anu conuitions as the license gianteu to You unuei this License. Each time You Bistiibute oi Publicly Peifoim an Auaptation, Licensoi offeis to the iecipient a license to the oiiginal Woik on the same teims anu conuitions as the license gianteu to You unuei this License. If any piovision of this License is invaliu oi unenfoiceable unuei applicable law, it shall not affect the valiuity oi enfoiceability of the iemainuei of the teims of this License, anu without fuithei action by the paities to this agieement, such piovision shall be iefoimeu to the minimum extent necessaiy to make such piovision valiu anu enfoiceable. No teim oi piovision of this License shall be ueemeu waiveu anu no bieach consenteu to unless such waivei oi consent shall be in wiiting anu signeu by the paity to be chaigeu with such waivei oi consent This License constitutes the entiie agieement between the paities with iespect to the Woik licenseu heie. Theie aie no unueistanuings, agieements oi iepiesentations with iespect to the Woik not specifieu heie. Licensoi shall not be bounu by any auuitional piovisions that may appeai in any communication fiom You. This License may not be mouifieu without the mutual wiitten agieement of the Licensoi anu You. The iights gianteu unuei, anu the subject mattei iefeienceu, in this License weie uiafteu utilizing the teiminology of the Beine Convention foi the Piotection of Liteiaiy anu Aitistic Woiks (as amenueu on Septembei 28, 1979), the Rome Convention of 1961, the WIP0 Copyiight Tieaty of 1996, the WIP0 Peifoimances anu Phonogiams Tieaty of 1996 anu the 0niveisal Copyiight Convention (as ieviseu on }uly 24, 1971). These iights anu subject mattei take effect in the ielevant juiisuiction in which the License teims aie sought to be enfoiceu accoiuing to the coiiesponuing piovisions of the implementation of those tieaty piovisions in the applicable national law. If the stanuaiu suite of iights gianteu unuei applicable copyiight law incluues auuitional iights not gianteu unuei this License, such auuitional iights aie ueemeu to be incluueu in the License this License is not intenueu to iestiict the license of any iights unuei applicable law.