Sunteți pe pagina 1din 409

Kumbia Enteipiise Fiamewoik

0n Fiamewoik paia el PBP Empiesaiial


LouueiTechnology

Abiil ue 2uu9
veision uel Piouucto: 1.u.17uA























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2


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





LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 14


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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 17


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






























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 18


Capitulo Intiouuccion

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.

Sopoite comeicial paia uesaiiollo, piouuccion y entienamiento estn uisponibles atiavz ue
louJerTecbnoloqy.








LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2u


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>

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 22


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>

<Directory "/srv/www/htdocs/application/public">
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,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.

'(%",+(:$5 B3 ($)8#7,8 , 3, ,23(+,+(:$ 2.8 -#*#+%. 7# 28#7#$%, "$, 2,$%,33, 93,$+, 7($
$($)G$ 1#$7,0#

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.

'(%",+(:$5 B3 ($)8#7,8 , 3, ,23(+,+(:$ 7# )#$#8, 3, #H+#2+(:$5 DI.8#I.$*()/H+#2%(.$5
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 26


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.































LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 27


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.








LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S4


Capitulo Tutoiial

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

CREATE TABLE `customer` (
`id` int(11) NOT NULL auto_increment,
`identification` varchar(20) NOT NULL,
`sucursal_id` int(11) NOT NULL,
`name` varchar(120) NOT NULL,
`email` varchar(52) default NULL,
`created_at` datetime default NULL,
`status` char(1) default NULL,
PRIMARY KEY (`id`),
KEY `sucursal_id` (`sucursal_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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


`sucursal_id` int(11) NOT NULL,
`customer_id` int(11) NOT NULL,
`balance` decimal(30,6) NOT NULL,
`swap_balance` decimal(30,6) NOT NULL,
`type` char(1) NOT NULL,
`created_at` datetime default NULL,
`status` char(1) default NULL,
PRIMARY KEY (`id`),
KEY `clientes_id` (`customer_id`),
KEY `sucursal_id` (`sucursal_id`),
CONSTRAINT `account_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customer`
(`id`),
CONSTRAINT `account_ibfk_2` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursal`
(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Besciipcion ue los campos:

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

CREATE TABLE `movement` (
`id` int(11) NOT NULL auto_increment,
`account_id` int(11) NOT NULL,
`ubication_id` int(11) NOT NULL,
`cash` decimal(30,6) NOT NULL,
`created_at` datetime default NULL,
PRIMARY KEY (`id`),
KEY `account_id` (`account_id`),
KEY `ubication_id` (`ubication_id`),
CONSTRAINT `movement_ibfk_2` FOREIGN KEY (`ubication_id`) REFERENCES
`ubication` (`id`),
CONSTRAINT `movement_ibfk_1` FOREIGN KEY (`account_id`) REFERENCES `account`
(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Besciipcion ue los campos:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S7


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

CREATE TABLE `sucursal` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(120) NOT NULL,
`ubication_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`),
KEY `ubication_id` (`ubication_id`),
CONSTRAINT `sucursal_ibfk_1` FOREIGN KEY (`ubication_id`) REFERENCES
`ubication` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Besciipcion ue los campos:

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.

CREATE TABLE `ubication` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(120) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Besciipcion ue los campos:
I,12. 6#7+8(2+(:$
iu Es la llave piimaiia ue la tabla y es auto numiica.
name Nombie ue la 0bicacion

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S8


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:

example/
apps/
default/
bank/
controllers/
application.php
config/
boot.ini
config.ini
environment.ini
routes.ini
logs/
models/
base/
modelBase.php
views
layouts/
index.phtml

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:

[development]
database.host = localhost
database.username = root
database.password = 2fe0517
database.name = bankdb
database.type = mysql

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S9


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;
}


}

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4u


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.

<h1>Bienvenido a Central Bank</h1>

<?php echo Tag::form("login/validateCredentials") ?>
<table>
<tr>
<td align='right'><b>Documento Identificaci&oacute;n:</b></td>
<td><?php echo Tag::textField("identification", "size: 20",
"maxlength: 20") ?></td>
</tr>
<tr>
<td align='right'><b>Contrase&ntilde;a:</b></td>
<td><?php echo Tag::numericPasswordField("password", "size: 4",
"maxlength: 4") ?></td>
</tr>
<tr>
<td></td>
<td><?php echo Tag::submitButton("Entrar") ?></td>
</tr>
</table>
<?php echo Tag::endForm() ?>

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.

<?php

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 44


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());
}

?>

<?php echo Tag::form("login/validateCredentials") ?>
<table>
<tr>
<td align='right'><b>Documento Identificaci&oacute;n:</b></td>
<td><?php echo Tag::textField("identification", "size: 20",
"maxlength: 20") ?></td>
</tr>
<tr>
<td align='right'><b>Contrase&ntilde;a:</b></td>
<td><?php echo Tag::numericPasswordField("password", "size: 4",
"maxlength: 4") ?></td>
</tr>
<tr>
<td></td>
<td><?php echo Tag::submitButton("Entrar") ?></td>
</tr>
</table>
<?php echo Tag::endForm() ?>
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4S



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:

public function validateCredentialsAction(){

$rules = array(
"identification" => array(
"filter" => "alpha",
"message" => "Porfavor indique su documento de
identificacin"
),
"password" => array(
"filter" => "int",
"message" => "Porfavor indique su contrasea"
),
);
if($this->validateRequired($rules)){
$identification = $this->getPostParam("identification", "alpha");
$password = sha1($this->getPostParam("password", "int"));
$customer = $this->Customer-
>findFirst("identification='$identification' AND status=A");
if($customer!==false){
$successAuth = false;
$accounts = $this->Account->find("customer_id = '{$customer-
>getId()}' AND status=A");
foreach($accounts as $account){
if($password==$account->getPassword()){
$successAuth = true;
break;
}
}
if($successAuth==false){
$this->addValidationMessage("Documento/Password
Incorrectos");
$this->routeTo("action: index");
} else {
Session::set(existsValidUser, true);
$userData = SessionNamespace::add('UserData');
$userData->setCustomer($customer->getId());
$userData->setLogInTime(time());
$this->routeTo("controller: menu");
}
} else {
$this->addValidationMessage("Documento/Password
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 46


Incorrectos");
$this->routeTo("action: index");
}
} else {
$this->routeTo("action: index");
}
}

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 aichivo views,loyouts,menu.pbtml queua asi:

<h1>Cajero Virtual</h1>

<b>Men&uacute; Principal:</b>
<ul>
<li><?php echo Tag::linkTo("banking/checkBalance", "Ver Saldo") ?></li>
<li><?php echo Tag::linkTo("banking/showTransactionActivity", "Ver
Extractos Bancarios") ?></li>
<li><?php echo Tag::linkTo("transfer", "Transferencias") ?></li>
<li><?php echo Tag::linkTo("logout", "Salir del Banco") ?></li>
</ul>

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:

<?php

print "<table border='1'>
<thead>
<tr>
<th>N&uacute;mero</th>
<th>Saldo</th>
<th>Saldo en Canje</th>
<th>Total</th>
</tr>
</thead>
<tbody>";
foreach($accounts as $account){
print "<tr>
<td>".$account->getNumber()."</td>
<td align='right'>".number_format($account->getBalance(), 2)."</td>
<td align='right'>".number_format($account->getSwapBalance(),
2)."</td>
<td align='right'>".number_format($account->getBalanceTotal(),
2)."</td>
</tr>";
}
print "</tbody></table>";

?>

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{):

<?php

if(count($accounts)>0){
print "<table border='1' align='center'>
<thead>
<tr>
<th>Nmero</th>
<th>Saldo</th>
<th>Saldo en Canje</th>
<th>Total</th>
</tr>
</thead>
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su


<tbody>";
$total = 0;
$totalBalance = 0;
$totalSwapBalance = 0;
foreach($accounts as $account){
print "<tr>
<td>".$account->getNumber()."</td>
<td align='right'>".number_format($account->getBalance(),
2)."</td>
<td align='right'>".number_format($account->getSwapBalance(),
2)."</td>
<td align='right'>".number_format($account-
>getBalanceTotal(), 2)."</td>
</tr>";
$totalBalance+=$account->getBalance();
$totalSwapBalance+=$account->getSwapBalance();
$total+=$account->getBalanceTotal();
}
print "<tr>
<td align='right'>TOTALES</td>
<td align='right'>".number_format($totalBalance, 2)."</td>
<td align='right'>".number_format($totalSwapBalance, 2)."</td>
<td align='right'>".number_format($total, 2)."</td>
</tr>";
print "</tbody></table>";
} else {
Flash::notice("No tiene cuentas activas en nuestro banco");
}

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:

<h1>Cajero Virtual</h1>

<table width="100%">
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S1


<tr>
<td valign="top" width="25%">
<b>Men&uacute; Principal:</b>
<ul>
<li><?php echo Tag::linkTo("banking/checkBalance",
"Ver Saldo") ?></li>
<li><?php echo
Tag::linkTo("banking/showTransactionActivity", "Ver Extractos Bancarios")
?></li>
<li><?php echo Tag::linkTo("transfer",
"Transferencias") ?></li>
<li><?php echo Tag::linkTo("logout", "Salir del
Banco") ?></li>
</ul>
</td>
<td>
<?php View::getContent() ?>
</td>
</tr>
</table>

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");
}

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S2


public function indexAction(){

}

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':

<?php

if(count($accounts)>0){
print "<p>Por favor seleccione las cuentas a consultar:</p>";
print Tag::form("banking/getSelectedActivity");
print "<table align='center' border='1'>
<thead>
<tr>
<th></th>
<th>N&uacute;mero Cuenta</th>
<th>Oficina</th>
</tr>
</thead>
<tbody>";
foreach($accounts as $account){
print "<tr>
<td>".Tag::checkboxField("cuenta[]", "value: {$account-
>getId()}", checked: checked)."</td>
<td align='center'>{$account->getNumber()}</td>
<td align='center'>{$account->getSucursalId()}</td>
</tr>";
}
print "</tbody></table><p align='center'>";
print Tag::submitButton("Consultar");
print "</p>";
print Tag::endForm();
} else {
Flash::notice("No tiene cuentas activas en nuestro banco");
}

?>

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:

<td align='center'>{$account->getSucursal()->getName()}</td>

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 {

protected function initialize(){
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S4


$this->setTemplateAfter("menu");
}

public function indexAction(){

}

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:

E(7%,-.5 /7%8"+%"8, -# -(8#+%.8(.7 28#-#%#81($,-,

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S6


apps/
default/
controllers/
application.php
config/
filters/
library/
models/
base/
plugins/
validators/
views/
config/
languages/
Library/
public/
javascript/
css/
files/
temp/
img/
index.php
scripts/
test/
index.php

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S8


'"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:

/0#123.5 /7%8"+%"8, -# -(8#+%.8(.7 2,8, 1G3%(23#7 ,23(+,+(.$#7

empresa/
apps/
default/
controllers/
clientes_controller.php
productos_controller.php
config/
models/
views/
produccion/
controllers/
compras_controller.php
config/
models/
views/

0na peticion al contiolauoi clientes seiia asi:
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S9



/0#123.5 B++#-#8 , 3,7 ,23(+,+(.$#7 \ +.$%8.3,-.8#7 -#7-# "$, ;<E
http://www.ejemplo.com/empresa/clientes/
http://www.ejemplo.com/empresa/clientes/buscar
http://www.ejemplo.com/empresa/clientes/consultar/18


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:

/0#123.5 B++#-#8 , 3, ,23(+,+(:$ -# 28.-"++(:$ -#7-# "$, ;<E

http://www.ejemplo.com/empresa/produccion/compras/
http://www.ejemplo.com/empresa/produccion/verEstado/22

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:

/0#123.5 6#*($(8 "$ 28.+#-(1(#$%. -# ($(+(,3(>,+(:$ -# 3, ,23(+,+(:$

<?php

class ControllerBase {


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.





LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 61


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:

/0#123.5 ;$ +.$%8.3,-.8 \ 7" ,++(:$ 2.8 -#*#+%.
<?php

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:

/0#123.5 6#*($(8 "$ 1_%.-. ^"# ,-1($(7%8# 3,7 #H+#2+(.$#7 #$ +.$%8.3,-.8#7

<?php

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:

/0#123.5 [9%#$#8 "$ ($7%,$+(, -# 3, +3,7# I.$%8.33#8<#^"#7%

<?php

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.

orroy qetAcceptobleContent{)
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 74


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:

T,93,5 T(2.7 -# 8#72"#7%, ^"# ,+#2%, #3 .90#%. I.$%8.33#8<#72.$7#

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:

T,93,5 T(2.7 -# 8#72"#7%, ,M,$>,-.7 -#3 .90#%. I.$%8.33#8<#72.$7#

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



/0#123.5 Z123#1#$%,8 "$, 7,3(-, ]'[4 -#7-# "$ +.$%8.3,-.8

<?php

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.

public voiJ setResponseType{int $type)
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 77


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.

/0#123.5 6#*($(8 "$, ,++(:$ ^"# ,-1($(7%8# 3,7 2#%(+(.$#7 , +.$%8.3,-.%#7 \ ,++(.$#7
^"# $. #7%#$ -#*($(-,7

<?php

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.

/0#123.5 6#*($(8 *(3%8.7 , $(M#3 )#$#8,3 #$ 3, ,23(+,+(:$

<?php

class ControllerBase {

public function init(){
Router::routeTo("controller: login");
}

public function beforeFilter(){
$activeRole = Session::getData("activeRole");

if(Router::getController()=="admin"&&$activeRole!="Administradores"){
Router::routeTo("controller: login", action: index);
return false;
}
}

}

Se uebe uevolvei false uesue beforeIilter cuanuo se iealiza un eniutamiento a otio
contiolauoi uifeiente al activo.

Cuanuo se implementan mltiples filtios es necesaiio invocai el filtio pauie en el momento
inuicauo:

/0#123.5 6#*($(+(:$ -# 1G3%(23#7 *(3%8.7

<?php
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 79



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(#$%.

Intentar
InvocarEventoDeControlador(beforeDispatchLoop)
HayEnrutamiento := Verdadero
Mientras HayEnrutamiento = Verdadero Hacer
HayEnrutamiento := InvocarEventoDeControlador(beforeDispatch)
HayEnrutamiento := InvocarEventoDeControlador(beforeExecuteRoute)
EjecutarFiltroBeforeFilter()
HayEnrutamiento := EjecutarAccionEnControlador()
EjecutarFiltroAfterFilter()
HayEnrutamiento := InvocarEventoDeControlador(afterExecuteRoute)
HayEnrutamiento := InvocarEventoDeControlador(afterDispatch)
ContinuarMientras
InvocarEventoDeControlador(afterDispatchLoop)
CapturarExcepcin
InvocarEventoDeControlador(onExceptions)
FinIntentar

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:

/0#123.5 Y,3(-,+(:$ -# "7",8(. \ #$8"%,1(#$%. +.$-(+(.$,3

<?php

class LoginController extends ApplicationController {

public function startSessionAction(){
$login = $this->getPostParam('login', 'alpha');
$pass = $this->getPostParam('pass', 'alpha');
if($this->Usuarios->findFirst("login = $login AND clave =
'$pass'")){
Flash::success('Bienvenido '.$this->Usuarios->getNombre());
$this->routeTo('controller: menu');
} else {
Flash::error('Permisos Insuficientes/Password Incorrecto');
$this->routeTo('action: startSession');
}
}

}

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:

Router::routeTo(controller: invoice, action: setMovementDate, id:
2008/01/12, 1: 2008/01/17);

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 81


/0#123.5 <##7+8(%"8, -# ;<E 1#-(,$%# <."%#8558."%#T.;<Z

<?php

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.

/0#123.5 Z$(+(,3(>,8 "$ +.$%8.3,-.8 1#-(,$%# ($(%(,3(>#VW

<?php

class UsuariosController extends StandardForm {

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;
}

public function initialize(){

$this->ignore('clave');
$this->setTextUpper("nombre");
$this->setComboStatic('perfil', array(
array('Administradores', 'ADMINISTRADOR'),
array('Cajeros', 'CAJERO'),
array('Meseros', 'MESERO')
));
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 82



$this->setComboStatic("estado", array(
array("A", "ACTIVO"),
array("I", "INACTIVO")
));

}

}

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:

/0#123.5 Z123#1#$%,8 2#87(7%#$+(, #$ #3 +.$%8.3,-.8

<?php

class ProductsController extends ApplicationController {

public $name;

public function indexAction(){
$this->name = TV 22;
}

public function showProductAction(){
Flash::notice($this->name);
}


public function initialize(){
$this->setPersistance(true);
}

}
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 8S



`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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 84


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:

/0#123.5 Z123#1#$%,8 "$ #M#$%. -#3 #7%,-. -# 2#87(7%#$+(,

<?php

class ProductsController extends ApplicationController {

public $name;
public $veryLongData;

public function indexAction(){
$this->name = TV 22;
}

public function showProductAction(){
Flash::notice($this->name);
}


public function initialize(){
$this->setPersistance(true);
}

public function beforeStorePersitence(){
$this->veryLongData = ;
}

}
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 8S


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 startSessionAction($login, $password){
$password = $this->filter($password, alpha);
$login = $this->filter($login, alpha);
$auth = new Auth(ldap, server: ldap.server.local,
accountDomainName: server.local,
username: CN=$login,DC=server,DC=local,
password: $password);
if($auth->autentcate()){
return true;
} else {
sleep(2);
return false;
}
}

public function getAvalabilityAction($initialDate, $finalDate){
if(Auth::isValid()==false){
return false;
}
if(Date::compareDates($initialDate, $finalDate)==-1){
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 9u


throw new WebServiceControllerException(Fechas
incorrectas);
} else {
$reserva = Reserva($initialDate, $finalDate);
return $reserva->checkAvalability();
}

}

public function getTicketNumberAction(){
if(Auth::isValid()==false){
return false;
}
return AE1872;
}

}

En el cliente se utiliza la clase SoopClient estnuai paia acceuei al seivicio Web Basauo en
Soap:

/0#123.5 B++#-#8 , "$ 7#8M(+(. R#9 "7,$-. '.,2I3(#$%

<?php

class VerifierController extends ApplicationController {

public function validateAction(){
$initialDate = $this->getPostParam(initialDate, date);
$finalDate = $this->getPostParam(finalDate, date);
$reservationService = new SoapClient(null, array(
'location' => 'http://web.server.local/w/reservation',
'uri' => 'http://app-services'
));
try {
if($reservationService->startSession(webserviceUser,
2fe05187a)==true) {
if($reservationService->getAvailability($initialDate,
$finalDate)==true) {
$ticketNumber = $reservationService-
>getTicketNumber();
return $this->routeTo(action: successChecking,
id: $ticketNumber);
}
}
}
catch(SoapFault $e) {
Flash::error(Ha ocurrido un error);
}
}

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:

/0#123.5 I8#,8 "$ 7#8M(+(. R#9 +.$ ?#9'#8M(+#I3(#$%

$webService = new WebServiceClient('http://web.server.local/w/reservation');

Es posible uefinii los paimetios uel cliente meuiante un aiiay ue esta foima:

/0#123.5 6#*($(8 2,8U1#%8.7 #H%8, #$ #3 7#8M(+(. R#9 +.$ ?#9'#8M(+#I3(#$%

$webService = new WebServiceClient(array(
wdsl => http://www.example.com/external-services/reservation.wsdl,
location => 'http://web.server.local/w/reservation',
uri => http://www.example.com/external-services,
encoding => ISO-8859-1
));

El constiuctoi establece los siguientes paimetios poi uefecto paia el cliente SoopClient:

T,93,5 K,8U1#%8.7 ^"# 8#+(9# #3 +.$%8"+%.8 -# ?#9'#8M(+#I3(#$%

K,8U1#%8. Y,3.8
wsul null
uii http://app-services
encouing 0TF-8
compiession S0AP_C0NPRESSI0N_ACCEPT |
S0AP_C0NPRESSI0N_uZIP

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.

Los espacios ue nombies XNL usauos son:

xsu: http:www.wS.oig2uu1XNLSchema"
soap-enc: "http:schemas.xmlsoap.oigsoapencouing

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:

/0#123.5 '#8M(+(. R#9 ,8(%1_%(+.
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 9S



<?php

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:

/0#123.5 '#8M(+(. R#9 ,8(%1_%(+. #$ #3 %#8+#8 7#8M(-.8

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 94


<?php

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 96


! 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:

T,93,5 /M#$%.7 ^"# 7# 2"#-#$ (123#1#$%,8 #$ 23")($7 -# I.$%8.3,-.8

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


LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 97


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.

















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 98


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















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 99


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

$filter = new Filter();
print $filter->applyFilter("<h1>Hola</h1>", "striptags", upper); // Imprime
HOLA

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:

/0#123.5 ;7,8 #3 9"**#8 -# 3.7 *(3%8.7

<?php

$filter = new Filter();
print $filter->applyFilter("a1b2c3d4e5", "digits"); // Imprime 12345
print $filter->applyFilter("www.radiobox77.com"); // Imprime 77
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u2


11.4 Crear chains de Filtros
Es posible cieai chains paia la aplicacion ue filtios base y ue usuaiio a un mismo valoi ue la
siguiente maneia:

/0#123.5 Z123#1#$%,8 IC,($7 -# !(3%8.7

<?php

Filter::load("striptags", "email", "lower", special);

$filter = new Filter();
$filter->addFilter(new StriptagsFilter());
$filter->addFilter(new EmailFilter());
$filter->addFilter(new LowerFilter());
$filter->addFilter(new LowerFilter());
$filter->addFilter(new SpecialFilter());

print $filter->applyFilter("<b>ANEWUSER1978@YAHOO.ES</b>")."<br>";

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:

/0#123.5 B23(+,8 1G3%(23#7 *(3%8.7 , "$ M,3.8

<?php

Filter::load("striptags", "email", "lower", special);

$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:

/0#123.5 B23(+,8 "$ *(3%8. -#7-# "$ +.$%8.3,-.8
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1uS



<?php

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:

/0#123.5 B23(+,8 "$ *(3%8. , 3, #$%8,-, -# "7",8(.

<?php

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&ntilde;a'
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u4


),
'confirmPassword' => array(
'message' => 'Por favor indique la confirmaci&oacute;n
de la contrase&ntilde;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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1uS


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:

/0#123.5 !(3%#8 -# "7",8(. ^"# *(3%8, -.1($(.7 #$ "$, ;<E

<?php

class DomainFilter implements FilterInterface {

public function execute($url){
$protocol = strpos($url, "//");
if($protocol!==false){
$url = substr($url, $protocol+2);
}
$fisrtSlash = strpos($url, "/");
if($fisrtSlash!==false){
$url = substr($url, 0, $fisrtSlash);
}
return $url;
}

}

En cualquiei paite ue la aplicacion se pueue utilizai usanuo su nombie coito o caiganuolo
meuiante Iilter::looJ:

/0#123.5 B23(+,8 "$ *(3%8. -# "7",8(.
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u6



<?php

$filter = new Filter();
$url = "http://www.google.com/?q=kumbia%20framework";
print $filter->applyFilter($url, "domain"); // www.google.com






























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1u7


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


uefecto las clases tienen los siguientes estilos:

.kumbiaDisplay {
font-size: 11px;
font-weight: bold;
margin: 0 auto;
padding: 2px 25px;
background-repeat: no-repeat;
background-position: 5px center;
text-align: left;
}

.errorMessage {
background-image: url("@path/img/error.gif");
background-color: #FFDDDD;
color: #B30000;
border: 1px solid #FFB7B7;
margin: 2px;
text-align: left;
}

.noticeMessage {
background-image: url("@path/img/user.gif");
background-color: #CCDEFF;
color: #004A6F;
margin: 2px;
border: 1px solid #004A6F;
text-align: left;
}

.sucessMessage {
background-image: url("@path/img/ok.gif");
background-color: #CCFF99;
color: #008000;
border: 1px solid #008000;
}

.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"));

T,93,5 I.$7%,$%#7 -# 3.7 %(2.7 -# 1#$7,0#7

Y,3.8 I.$7%,$%# 6#7+8(2+(:$
u Flash::ERR0R Nensajes ue eiioi
1 Flash::N0TICE Nensajes ue infoimacion
2 Flash::S0CCESS Nensajes ue xito
S Flash::WARNINu Nensajes ue auveitencia

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:

<h1>Buscar Productos</h1>

<?php echo Tag::form('products/search'); ?>
<table>
<tr>
<td align="right">Cdigo:</td>
<td><?php echo Tag::numericField('code') ?></td>
</tr>
<tr>
<td align="right">Nombre:</td>
<td><?php echo Tag::textField('name') ?></td>
</tr>
<tr>
<td align="right">Categora:</td>
<td><?php echo Tag::select('product_category_id',
$ProductsCategories->find(), 'using: id,name', 'useDummy: yes') ?></td>
</tr>
<tr>
<td align="right">Tipo:</td>
<td><?php echo Tag::selectStatic('type', array(
'A' => 'ALIMIMENTOS',
'B' => 'BEBIDAS',
'O' => 'OTRO'
), 'useDummy: yes') ?></td>
</tr>
<tr>
<td></td>
<td><?php echo Tag::submitButton('Enviar') ?></td>
</tr>
</table>
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 111


<?php echo Tag::endForm() ?>

En el contiolauoi se uefine la bsqueua segn se envie los paimetios a la accion seorcb:

<?php

class ProductsController extends ApplicationController {

public function indexAction(){

}

public function searchAction(){
$criteria = new FormCriteria($_POST, array(
'code' => array(
'type' => 'integer',
'fieldName' => 'id'
),
'name' => array(
'type' => 'string'
),
'product_categories_id' => array(
'type' => 'integer',
'operator' => '=',
'nullValue' => '@'
),
'type' => array(
'type' => 'string',
'operator' => '=',
'nullValue' => '@'
)
));
$this->Products->find($criteria->getConditions());
}

}

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:

$criteria = new FormCriteria($_POST, array(
'fechaInicial:fechaFinal' => array(
'type' => 'date',
'fieldName' => 'fecha'
)
));

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 11S


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:

$criteria1 = new FormCriteria($_POST, array(
'code' => array(
'type' => 'integer',
'fieldName' => 'id'
),
'product_categories_id' => array(
'type' => 'integer',
'operator' => '=',
'nullValue' => '@'
),
));

$criteria2 = new FormCriteria($_POST, array(
'code' => array(
'type' => 'integer',
'fieldName' => 'id'
),
'name' => array(
'type' => 'string'
),
));

$conditions = FormCriteria::join(OR, array(
$criteria1->getConditions(AND),
$criteria2->getConditions(AND)
));

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 11S


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:

<?php echo Tag::textFieldWithAutocomplete('pais', 'action: paises/consultar') ?>

Segn su uefinicion cuanuo el usuaiio esciiba algunos caicteies se obtenuin los uatos uel
iesultauo ue la accion consultor en el contiolauoi poises.

Si los uatos ue paises se obtienen ue un aiiay esttico entonces el contiolauoi paises es el
siguiente:

<?php

class PaisesController extends ApplicationController {

public function consultarAction(){

//Se indica que la respuesta es AJAX
$this->setResponse('ajax');

//Se obtiene lo que digit el usuario en la caja de texto
$pais = $this->getPostParam('pais');

//Obtener los datos de un array estatico
$paises = array(
'C' => 'COLOMBIA',
'E' => 'ECUADOR',
'M' => 'MEXICO',
'A' => 'ARGENTINA',
'U' => 'URUGUAY',
'B' => 'BOLIVIA'
);

//Se filtran los que coincida con la busqueda
$paisesBusqueda = Scriptaculous::filter($pais, $paises);

//Se genera el HTML a devolver al usuario
$htmlCode = Scriptaculous::autocomplete($paisesBusqueda);

$this->renderText($htmlCode);

}
}

Si los uatos ue paises se obtienen ue una tabla entonces el contiolauoi paises es el siguiente:

<?php

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 117


class PaisesController extends ApplicationController {

public function consultarAction(){

//Se indica que la respuesta es AJAX
$this->setResponse('ajax');

//Campos del modelo utilizados para crear el resultado
$fields = array('cod_pais', 'nombre');

//Obtener los paises requeridos
$paises = Scriptaculous::querySource(paises, $fields, $pais);

//Se genera el HTML a devolver al usuario
$htmlCode = Scriptaculous::autocomplete($paises, $fields);

$this->renderText($htmlCode);

}

}























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 118


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.



























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 119


Paite 2: Seguiiuau

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 12u


! 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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 122


! 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.

/0#123.5 E(7%, BIE #$ l@E 2,8, +.$%8.3 -# ,++#7.

<?xml version="1.0" encoding="UTF-8" ?>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!-- 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>

<!-- CONSTRAINTS DE ACCESO -->
<access-constraint>
<role-name>Public</role-name>
<resource-name>*</resource-name>
<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>
<role-name>EconomyCustomers</role-name>
<resource-name>*</resource-name>
<action-name>*</action-name>
<rule-type>allow</rule-type>
</access-constraint>
<access-constraint>
<role-name>EconomyCustomers</role-name>
<resource-name>banking</resource-name>
<action-name>checkBalance</action-name>
<rule-type>deny</rule-type>
</access-constraint>

</security>

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.

























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 126


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:

/0#123.5 ;%(3(>,8 BIE +.$ 1.-#3.7 2,8, M,3(-,8 #3 ,++#7. , 3.7 8#+"87.7 -# "$,
,23(+,+(:$
<?php

class ControllerBase {

public function beforeFilter(){
$role = Session::get('role');
if($role==""){
$role = 'Public';
}
$acl = new Acl('Model', 'className: AccessList');
$resourceName = $this->getControllerName();
$operationName = $this->getActionName();
if($acl->isAllowed($role, $resourceName, $operationName)==false){
if($this->getControllerName()!='appmenu'){
$this->routeTo("controller: appmenu");
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 128


} 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:

/0#123.5 I.12.8%,1(#$%. -# 3, 3(7%, BIE 7#)G$ -,%.7 -# #0#123.

$acl = new Acl('Model', 'className: AccessList');

//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:

/0#123.5 ;7. -# 3(7%,7 BIE +.$ @.-#3.7

$acl = new Acl('Model', 'className: AccessList');

$acl->isAllowed("Administrators", "customers", "create")

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.

El aichivo uebe contenei la siguiente estiuctuia:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S1


! 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:

<?xml version="1.0" encoding="UTF-8" ?>
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!-- 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>

<!-- CONSTRAINTS DE ACCESO -->
<access-constraint>
<role-name>Public</role-name>
<resource-name>*</resource-name>
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S2


<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.











LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S4


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 {

public function indexAction(){

}

public function authSessionAction(){
$login = $this->getPostParam("login");
$password = sha1($this->getPostParam("password"));
$auth = new Auth('model', "class: Usuarios", "login: $login",
"password: $password");
if($auth->authenticate()==false){
Flash::error("Usuario/clave incorrectos");
$this->routeTo("action: index");
} else {
$this->routeTo("controller: menu");
}
$this->setRequest("password", "");
}

}

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:

/0#123.5 ;7. -#3 +.12.$#$%# B"%C +.$ "$ 7#8M(-.8 h#89#8.7Y

<?php

class LoginController extends ApplicationController {

public function startSessionAction(){
$login = $this->getPostParam("login");
$password = $this->getPostParam("password");
$auth = new Auth('kerberos5',
"realm: GONICUS.LOCAL",
"username: admin/admin",
"password: 12345");
if($auth->authenticate()==true){
$identity = $auth->getIdentity();
$policies = $auth->getPolicies();
Flash::success("Bienvenido {$identity['username']}");
foreach($policies as $policy){
Flash::notice($policy);
}
} else {
Flash::error("Fallo autenticacion. Credenciales invalidas");
}
}

}

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S8


!"#$%&$'()*+ 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:

/0#123.5 ;7. -#3 +.12.$#$%# B"%C +.$ "$ 7#8M(-.8 <,-("7

<?php

class LoginController extends ApplicationController {

public function startSessionAction(){
$login = $this->getPostParam("login");
$password = $this->getPostParam("password");
$auth = new Auth('radius',
"server: 172.16.2.10",
"port: 1821",
"secret: a1b2c3d4",
"username: tierry",
"password: henry"
);
if($auth->authenticate()==true){
$identity = $auth->getIdentity();
Flash::success("Bienvenido {$identity['username']}");

} else {
Flash::error("Fallo autenticacion. Credenciales invalidas");
}
}

}

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:

nombreusuario:nombrerealm:resumenpassword
otronombreusuario:nombrerealm:otroresumenpassword


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:

john.smith:Production:5ebe2294ecd0e0f08eab7690d2a6ee69


El siguiente pioceso ue autenticacion es satisfactoiio:
/0#123.5 B"%#$%(+,+(:$ "7,$-. #3 ,-,2%,-.8 6()#7%

<?php

class LoginController extends ApplicationController {

public function startSessionAction(){
$auth = new Auth('digest',
"filename: auth/passwd.txt",
"username: john.smith",
"password: secret",
"realm: Production"
);
if($auth->authenticate()==true){
$identity = $auth->getIdentity();
Flash::success("Bienvenido {$identity['username']}");
} else {
Flash::error("Fall autenticacin. Credenciales invalidas");
}
}

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 14u


}

/0#123.5 B"%#$%(+,+(:$ "7,$-. "$ ,8+C(M. +.$ .%8. +C,87#% -(*#8#$%# ,3 -# #$%8,-,O

<?php

class LoginController extends ApplicationController {

public function startSessionAction(){
$auth = new Auth('digest',
"filename: auth/passwd.txt",
"username: ",
"password: secret",
"realm: ",
charset: EUC-JP
);
if($auth->authenticate()==true){
$identity = $auth->getIdentity();
Flash::success("Bienvenido {$identity['username']}");
} else {
Flash::error("Fall autenticacin. Credenciales invalidas");
}
}

}

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 141


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:

/0#123.5 ;7. -#3 +.12.$#$%# B"%C +.$ "$ 7#8M(-.8 E6BK

<?php

class LoginController extends ApplicationController {

public function startSessionAction(){
$login = $this->getPostParam("login");
$password = $this->getPostParam("password");
$auth = new Auth('ldap', "server: server.local",
"accountDomainName: example.com",
"baseDN: dc=example,dc=com",
"username: uid=$login,dc=example,dc=com",
"password: $password",
"identityAttributes: cn,uid",
"port: 1389"
);
if($auth->authenticate()==true){
$identity = $auth->getIdentity();
Flash::success("Bienvenido {$identity['username']}");
} else {
Flash::error("Fall autenticacin. Credenciales invalidas");
}
}

}

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");

$this->setFieldData("controller", Router::getController());
$this->setFieldData("action", Router::getAction());
$this->setFieldData("USER_ID", Session::get("usuariosId"));
$this->setFieldData("USERNAME", Session::get("usuariosNombre"));
$this->setFieldData("NOTE", $note);

if($transaction!=null){
$this->setTransaction($transaction);
}

$this->commit();
}

}














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:

<?xml version="1.0" encoding="UTF-8"?>
<firewallRules>
<hostTraslation>
<hostname>localhost</hostname>
<address>::1</address>
</hostTraslation>
<rule>
<source>localhost</source>
<controller>products</controller>
<action>*</action>
<target>reject</target>
</rule>
<rule>
<source>192.168.10.120</source>
<controller>admin</controller>
<action>*</action>
<target>reject</target>
</rule>
<rule>
<source>localhost</source>
<controller>*</controller>
<action>*</action>
<target>accept</target>
</rule>
</firewallRules>

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.


LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 146
























Paite S: La logica ue uatos

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:

4.198# 6#7+8(2+(:$
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 148


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:

T,93,5 B-,2%,-.8#7 -#3 +.12.$#$%# 69 \ 1,-"8#> ,+%",3
4.198# I,2, -# B++#7. /7%,-. -# @,-"8#>
NySQL Nativo (NySQL) Estable
NySQLi Nativo (NySQLi) Estable
0iacle Nativo (oci8) Estable
PostgieSQL Nativo Beta
Niciosoft SQL Seivei PB0 Beta
IBN Infoimix PB0 Beta
SQLite PB0 Beta
0iacle PB0 Beta
0iacle }BBC Estable

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 149


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.

/0#123.5 I.$#H(:$ %8,-(+(.$,3 , )#7%.8#7 8#3,+(.$,3#7 "7,$-. KLK

//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.

/0#123.5 Z$+.12,%(9(3(-,- -# ,3)"$,7 #H%#$7(.$#7 -#3 3#$)",)# 'fE #$ )#7%.8#7
8#3,+(.$,3#7

//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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S1


El aichivo ue configuiacion environment.ini pieueteiminauo tiene la siguiente estiuctuia:

[development]
database.type = mysql

database.host = localhost
database.username = root
database.password =
database.name = development_db

[production]
database.type = mysql
database.host = localhost
database.username = root
database.password =
database.name = production_db

[test]
database.type = mysql
database.host = localhost
database.username = root
database.password =
database.name = test_db

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:

T,93,5 @,%8(> -# +.12,%(9(3(-,- #$%8# KLKm [IZ` \ +3(#$%# [8,+3#
6(7%8(9"+(:$ Y#87(:$ KLK Y#87(:$ -# [IZ` Y#87(.$#7 -#3
+3(#$%# [8,+3#
7.2.8%,-.
PBP CvS S.2.7 1.2.S 8i, 9i, 1ug, 11g
PBP Binaiio paia
Winuows
S.27 1.2.S 1ug, 11g
PECL 0CI8 CvS Se pueue constiuii
uesue PBP 4.S.9
1.S.4 9iR2, 1ug, 11g
Zenu Coie foi 0iacle 2.S S.2.S 1.2.S Incluye el 0iacle
Instant Client 1u poi
lo que se sopoitan:
8i, 9i, 1ug, 11g

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:

[production]
database.type = oracle
database.host = 127.0.0.1
database.username = scott
database.password = tiger
database.instance = XE
database.port = 1521
database.territory = spain
database.sort = spanish_m
database.comp = linguistic
database.charset = AL32UTF8

La uesciipcion ue los paimetios es la siguiente:

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S4


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:

lib/x86/linux/ojdbc14.jar

Los paimetios en enviroment.ini ueben sei:

[production]
database.layer = jdbc
database.type = oracle
database.driver = "oracle.jdbc.driver.OracleDriver"
database.dsn = "thin:@192.168.151.12:1521:XE"
database.username = scott
database.password = tiger

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1SS




A continuacion se selecciona el tipo ue uiivei utilizauo, se busca 'SQL Seivei' y se ua click en
siguiente:



LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S6


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.


LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S7




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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S8




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':

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 1S9




La ltima pantalla peimite piobai la conexion, si touo esta bien no habi pioblema al efectuai
una conexion uesue Kumbio Fnterprise.



LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 16u


Los paimetios iequeiiuos ue conexion al conectaise con el auaptauoi "mssql" son:

[production]
database.layer = pdo
database.type = mssql
database.dsn = "DRIVER={SQL Server};SERVER=SQLEXPRESS;DATABASE=test"

0sanuo un BSN ue 0suaiio:

[production]
database.layer = pdo
database.type = mssql
database.dsn = "bankdb"

Establecienuo el usuaiio y contiasea:

[production]
database.layer = pdo
database.type = mssql
database.dsn = "bankdb;UID=sa;PWD=mypass"

Establecienuo el usuaiio y contiasea sin BSN:

[production]
database.layer = pdo
database.type = mssql
database.dsn = "DRIVER={SQL
Server};SERVER=SQLEXPRESS;DATABASE=test;UID=sa;PWD=pass"


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


extension "mysql". Ambos auaptauoies sopoitan tiansacciones en sesiones ue conexion
uifeientes.

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:

[production]
database.type = mysqli
database.host = localhost
database.username = root
database.password = my_password
database.name = production_db

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:

[production]
database.type = mysqli
database.host = localhost
database.username = root
database.password = my_password
database.name = production_db

Los posibles paimetios ue conexion al conectaise con el auaptauoi "mysqli" son:

[production]
database.type = mysqli
database.host = localhost
database.socket = /tmp/mysql.sock
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
database.charset = utf8
database.key = /home/user/key.pem
database.cert = /home/user/ca.crt
database.ca = /home/user/ca_file
database.capath = /home/user/capath
database.cipher = aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-
cbc,aes256-cbc

Los paimetios auicionales que sopoita el auaptauoi "mysqli" son:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 16S


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:

[development]
database.layer = pdo
database.type = informix
database.dsn = "host=127.0.0.1;service=9800;database=bankdb;server=ids_server;
protocol=onsoctcp;EnableScrollableCursors=1"
database.username = informix
database.password = bypass

Paimetios ue conexion con Infoimix:

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



export INFORMIXDIR=/opt/IBM/informix
export INFORMIXTMP=/opt/IBM/informix/tmp
export INFORMIXSERVER=ol_server
export INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts
export ONCONFIG=onconfig
export TERMCAP=/home/informix/etc/termcap
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/IBM/informix/lib:/opt/IBM/informix/etc/lib
:/opt/IBM/informix/lib/esql
export DBDATE=y4md
export DB_LOCALE=en_US.819
export SERVER_LOCALE=en_US.819
export CLIENT_LOCALE=en_US.819
export TERM=ansi
export PATH=$PATH:$HOME/bin:$INFORMIXDIR/bin

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.

Los paimetios ue Conexion a SQLite son:

[development]
database.layer = pdo
database.dsn = "data/company.db"
database.type = sqlite

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.

/0#123.5 /7%,93#+#8 "$, +.$#H(:$ , "$ )#7%.8 8#3,+(.$,3 1#-(,$%# 69E.,-#855*,+%.8\

<?php

$db = DbLoader::factory('MySQL', array(
"host" => "localhost",
"username" => "root",
"password" => "mypass",
"name" => "bankdb"
));

print_r($db->fetchAll(SELECT * FROM accounts));

Si se uesea usai los auaptauoies PB0 hay que inuicai la opcion auicional "pJo" =~ true en el
vectoi ue configuiacion.

/0#123.5 /7%,93#+#8 "$, +.$#H(:$ , "$ )#7%.8 8#3,+(.$,3 1#-(,$%# "$ ,-,2%,-.8 K6[

<?php

$db = DbLoader::factory('MySQL', array(
"pdo" => true,
"host" => "localhost",
"username" => "root",
"password" => "mypass",
"name" => "bankdb"
));

$db->fetchAll("SELECT * FROM account");

0n uesciiptoi stiing tambin pueue sei usauo paia establecei una conexion. Estos tienen el
mismo foimato que un BSN ue PB0.

/0#123.5 /7%,93#+#8 "$, +.$#H(:$ 1#-(,$%# "$ -#7+8(2%.8 7%8($)
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 169



$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:

/0#123.5 B+%(M,8 \ .9%#$#8 3, %8,>, -# 7#)"(1(#$%. #$ "$ 28.+#-(1(#$%. +.$ )#7%.8#7
8#3,+(.$,3#7

<?php

$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.

/0#123.5 B+%(M,8 #3 28.*(3($) -#7-# .90#%. -# +.$#H(:$ , "$ )#7%.8 8#3,+(.$,3

<?php

$db = DbBase::rawConnect();
$db->setProfiling(true);

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{).

/0#123.5 6#*($(8 "$, +3,7# -# 28.*(3# 2#87.$,3(>,-,
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 17u



<?php

$db = DbBase::rawConnect();
$db->setProfiling(new MyProfiler());

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:

/0#123.5 I,2%"8,8 "$, #H+#2+(:$ 69/H+#2%(.$ )#$#8,-, 2.8 #3 ,-,2%,-.8 -# +.$#H(:$
,3 )#7%.8 8#3,+(.$,3

<?php

try {
$db = DbLoader::factory('MySQL', array(
"pdo" => true,
"host" => "localhost",
"username" => "root",
"password" => "hea101",
"name" => "bankdb"
));

}
catch(DbException $e){
//No se pudo cargar el adaptador
}

PQO`Ob T(2.7 -# /H+#2+(.$#7 3,$>,-,7 2.8 #3 +.12.$#$%# 69
/H+#2+(:$ 6#7+8(2+(:$
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 171


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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 17S




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:

[development]
database.host = 127.0.0.1
database.username = my_user
database.password = my_password
database.name = bankdb
database.type = mysql
database.tracing = true

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 17S


public resourcejfolse query{strinq $sqluery)
Envia una sentencia SQL al gestoi ielacional. La sentencia pueue uevolvei iegistios o no
uevolveilos.

/0#123.5 /$M(,8 "$, 7#$%#$+(, 'fE ,3 )#7%.8 8#3,+(.$,3 1#-(,$%# #3 1_%.-. ^"#8\VW

<?php

$db = DbLoader::factory('Oracle', array(
"host" => "192.168.2.140",
"username" => "scott",
"password" => "tiger",
"instance" => "XE"
));
$result = $db->query("SELECT id, name FROM customer WHERE category_id = 1");
while($row = $db->fetchArray($result)){
print $row['name']."\n";
}

public orroy finJ{strinq $tobleNome, strinq $wbereClouse, strinq $fielJs="", strinq $orJerBy="1")
Realiza una consulta SELECT en una tabla en foima abstiaiua.

/0#123.5 <#,3(>,8 "$, 9G7^"#-, "7,$-. #3 1_%.-. *($-VW

<?php

//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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 176


/0#123.5 <#,3(>,8 "$ +.$7"3%, ^"# -#M"#3M# 3.7 8#)(7%8.7 +.1. M#+%.8#7 ($-#H,-.7
,7.+(,%(M,1#$%#

<?php

$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.

/0#123.5 <#,3(>,8 "$ +.$7"3%, ^"# -#M"#3M# 3.7 8#)(7%8.7 +.1. M#+%.8#7 ($-#H,-.7
$"1_8(+,1#$%#

<?php

$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.

/0#123.5 [9%#$#8 "$ 8#7"3%,-. 2,8, +.$7"3%,7 ^"# -#M"#3M#$ "$ 7.3. 8#)(7%8.

<?php

$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.

public voiJ numRows{resource $resultuery=null)
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 177


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.

/0#123.5 [9%#$#8 #3 $G1#8. -# 8#)(7%8.7 ^"# -#M"#3M# "$, +.$7"3%,

<?php

$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.

/0#123.5 @.M#8 #3 2"$%#8. -#3 8#7"3%,-. -# "$, +.$7"3%,

<?php

$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.

/0#123.5 B23(+,8 3, #H%#$7(:$ -#3 3#$)",0# 'fE EZ@ZT , "$, +.$7"3%,

<?php

$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.

/0#123.5 <#,3(>,8 "$, ($7#8+(:$ +.$ n,"%.1,%(+f".%#7 \ 7($ #33,7

<?php

$db = DbBase::rawConnect();

//Usando Quotes Manualmente
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 179


$values = array(0044, England);
$fields = array(code, name);
if($db->insert(countries, $values, $fields)){
Flash::success(Se insert correctamente el registro);
}

//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.

/0#123.5 Z$7#8%,8 "$ M,3.8 #H28#7(:$ -# 3, 9,7# -# -,%.7

<?php

$db = DbBase::rawConnect();
$values = array(John Smith, new DbRawValue(current_date()));
$fields = array(name, created_at);
if($db->insert(employees, $values, $fields, true)){
Flash::success(Se insert correctamente el registro);
}

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{).

/0#123.5 <#,3(>,8 "$, ,+%",3(>,+(:$ -# -,%.7

<?php

$db = DbBase::rawConnect();

$fields = array(code, name);
$values = array(0044, England);
if($db->update(countries, $fields, $values)){
Flash::success(Se actualiz correctamente el registro);
}

$fields = array(code, name);
$values = array(0044, England);
if($db->update(countries, $fields, $values, true)){
Flash::success(Se actualiz correctamente el registro);
}
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 18u



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.

/0#123.5 [9%#$#8 ($*.81,+(:$ -# 3.7 8#)(7%8.7 ,*#+%,-.7 #$ "$, .2#8,+(:$ -#
1,$(2"3,+(:$ -# -,%.7

<?php

$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.

/0#123.5 ;7. -# %8,$7,++(.$#7 , 9,0. $(M#3

<?php

$db = DbBase::rawConnect();

$db->begin();
$fields = array("name", "createdAt");
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 181



$values = array("John Smith", "2007-10-21");
if($db->insert("customer", $values, $fields, true)==false){
$values = array("Darren Davison", "2007-12-02");
if($db->insert("customer", $values, $fields, true)==false){
$db->commit();
} else {
$db->rollback();
}
} else {
$db->rollback();
}

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.

<?php

$db = new Db();
$db->connect("192.168.2.140", "scott", "tiger", "bankdb");
$result = $db->query("SELECT * FROM customer");
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 18S


while($row = $db->fetchArray($result)){
print $row['name']."\n";
}

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:

<?php

$db = DbBase::rawConnect();
$fields = $db->getFieldsFromTable(customer);

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.

/0#123.5 I8#,8 "$, %,93, "7,$-. "$ ,-,2%,-.8 #$ #72#+(,3

<?php

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 18S


$db = DbLoader::factory('MySQL', array(
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'name' => 'test'
));
$db->createTable(example, array(
"id" => array(
"type" => DbMySQL::TYPE_INTEGER,
"notNull" => true,
"primary" => true,
"auto" => true
),
"nombre" => array(
"type" => DbMySQL::TYPE_VARCHAR,
"notNull" => true,
"size" => 120
),
"texto" => array(
"type" => DbMySQL::TYPE_TEXT,
"notNull" => true
),
"cantidad" => array(
"type" => DbMySQL::TYPE_INTEGER,
"notNull" => true,
"size" => 11
),
"fecha" => array(
"type" => DbMySQL::TYPE_DATETIME,
"notNull" => true
),
"fecha_at" => array(
"type" => DbMySQL::TYPE_DATE
),
"fecha_in" => array(
"type" => DbMySQL::TYPE_DATE
),
"estado" => array(
"type" => DbMySQL::TYPE_CHAR ,
"notNull" => true,
"size" => 1
)
), array(
ix1 => nombre,
ix2 => array(fecha, estado)
));

Tambin es posible cieai la tabla usanuo la conexion pieueteiminaua uel entoino actual:

/0#123.5 I8#,8 "$, %,93, "7,$-. 3, +.$#H(:$ 28#-#%#81($,-,

<?php

$db = Db::rawConnect();
$db->createTable(example, array(
"id" => array(
"type" => Db::TYPE_INTEGER,
"notNull" => true,
"primary" => true,
"auto" => true
),
"nombre" => array(
"type" => Db::TYPE_VARCHAR,
"notNull" => true,
"size" => 120
)
));

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 186


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.

<?php

$db = DbBase::rawConnect();
$db->dropTable(customer);

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 187


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.






LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 188


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:

php scripts/create_model.php -table-name customers -enable-casting yes

Los tipos ue uatos a los que les aplica casting son los siguientes:

T,93,5 <#3,+(:$ -# +,7%($) #$%8# %(2. -# -,%. -# 3, 9,7# -# -,%.7 \ %(2. -# -,%. -# KLK

T(2. 6,%. k6 T(2. 6,%. KLKJh"19(,
/$%#828(7#
vaichai, Chai, Text, Blob Stiing
Integei, smallint, tinyint Integei
uecimal, float, Noney uouble
uate Bate
time Time

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.

/0#123.5 /7%,93#+#8 "$ +,12. %8,7(#$% #$ #3 1.-#3.

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:

/0#123.5 @"3%(23(+(-,- 1"+C.7 , "$. 8#3,+(.$,-, +.$ "$ 7.3. +,12.

Paia 2 Tablas:

CREATE TABLE `country` (
`code` int(11) NOT NULL,
`name` varchar(20) default NULL,
PRIMARY KEY (`code`)
);

CREATE TABLE `city` (
`code` int(11) NOT NULL,
`country_code` int(11) default NULL,
`name` varchar(80) default NULL,
PRIMARY KEY (`code`)
);
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 194



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:

/0#123.5 ;%(3(>,8 "$, ,7.+(,+(:$ 1"+C.7 , "$.

$city = EntityManager::getEntityInstance(City);
$city->findByName(Bogot);
$country = $city->getCountry()
print $country->getNombre(); // => Colombia

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.

/0#123.5 ;%(3(>,8 "$, 8#3,+(:$ +.12"#7%, 1"+C.7 , "$.

CREATE TABLE `customer` (
`identification_type` char(3) NOT NULL default '',
`number` varchar(40) NOT NULL default '',
`nombre` varchar(120) default NULL,
`status` char(1) default NULL,
PRIMARY KEY (`identification_type`,`number`)
);

CREATE TABLE `flights` (
`flight_number` varchar(12) NOT NULL default '',
`identification_type` char(3) default NULL,
`number` varchar(40) default NULL,
`flight_date` date default NULL,
`initial_hour` time default NULL,
`final_hour` time default NULL,
PRIMARY KEY (`flight_number`)
);
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 19S



El mouelo Flights se implementa asi:

/0#123.5 6#*($(8 "$, 8#3,+(:$ 9#3.$)7T. #$ "$ 1.-#3. #$%(-,-A8#3,+(:$ 7($
+.$M#$+(.$#7

<?php

class Flights extends ActiveRecord {

protected function initialize(){
$this->belongsTo(array(identification_type, number),
customer);
}

}

La ielacion pueue sei utilizaua asi:

$flight = $this->Flights->findByDate(2008-11-01);
$customer = $flight->getCustomer();

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.

public voiJ setloqqer{mixeJ $loqqer)
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 197


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:

/0#123.5 E.)"#,8 3,7 .2#8,+(.$#7 ($%#8$,7 -# "$ 1.-#3. , "$ 3.))#8 ^"# "7,
+.128#7(:$

$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.

/0#123.5 6#*($(8 "$ E.))#8 2#87.$,3(>,-. 2,8, C,+#8 7#)"(1(#$%. , 3,7 .2#8,+(.$#7
($%#8$,7 -# "$ 1.-#3.

$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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 198


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.

/0#123.5 <#,3(>,8 "$, +.$7"3%, #$ "$ 1.-#3. "7,$-. 'fE

//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.

/0#123.5 ;%(3(>,8 *($-!(87% 2,8, .9%#$#8 #3 28(1#8 8#)(7%8. -# "$ 1.-#3. : #3 28(1#8.
^"# +"123, -#%#81($,-,7 +.$-(+(.$#7

//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.

/0#123.5 ;%(3(>,8 *($- 2,8, +.$7"3%,8 3.7 8#)(7%8.7 -#3 1.-#3.

//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.

/0#123.5 k3.^"#,8 "$ +.$0"$%. -# 8#)(7%8.7 #$ 1.-. $. +.12,8%(-. #$ "$, %8,$7,++(:$

<?php

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2uu


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.

/0#123.5 <#,3(>,8 +.$%#.7 7.98# ,%8(9"%.7 -#3 1.-#3.

//Cuantos productos hay?
$this->Products->count();

//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.

/0#123.5 <#,3(>,8 28.1#-(.7 7.98# ,%8(9"%.7 -#3 1.-#3.

//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.

/0#123.5 <#,3(>,8 7"1,%.8(,7 7.98# ,%8(9"%.7 -#3 1.-#3.

//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


atiibutos ue la entiuau.

/0#123.5 [9%#$#8 #3 M,3.8 1UH(1. -# "$ ,%8(9"%. -# "$ 1.-#3.

//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.

/0#123.5 [9%#$#8 #3 M,3.8 1=$(1. -# "$ ,%8(9"%. -# "$ 1.-#3.

//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{))

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2u4


public booleon upJote{orroy $volues)

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.

/0#123.5 I8#,8 "$ 8#)(7%8. "7,$-. #3 1_%.-. 7,M#VW -# B+%(M#<#+.8-

<?php

$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)

public booleon JeleteAll{$conJitions)

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2uS


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.

/0#123.5 /7%,93#+#8 8#3,+(.$#7 C,7[$# Vb , bW -# ,+"#8-. ,3 1.-#3. #$%(-,-A8#3,+(.$

//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)
);

protecteJ voiJ belonqsTo{mixeJ $fielJs, strinq $referenceToble, mixeJ $referenceJIielJs, strinq
$relotionNome= )
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2u6


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.

/0#123.5 /7%,93#+#8 8#3,+(.$#7 9#3.$)7T. V1"+C.7 , bW -# ,+"#8-. ,3 1.-#3. #$%(-,-A
8#3,+(.$

//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.

/0#123.5 /7%,93#+#8 8#3,+(.$#7 C,7@,$\ Vb , 1"+C.7W -# ,+"#8-. ,3 1.-#3. #$%(-,-A
8#3,+(.$

//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.

/0#123.5 /7%,93#+#8 "$ )#$#8,-.8 #*(+(#$%# L(JE. #$ "$ 1.-#3.

<?php

class Invoices extends ActiveRecord {

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.

0n 00IB tiene la siguiente foima:

4cfce7c2-6089-102c-91cf-d8dbbe268425

Se establece un geneiauoi 00IB ue esta foima:

/0#123.5 /7%,93#+#8 "$ )#$#8,-.8 -# (-#$%(*(+,-.8#7 ^"# "7# #3 ,3).8(1. ;;Z6

<?php

class Media extends ActiveRecord {

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.

/0#123.5 /7%,93#+#8 "$ )#$#8,-.8 -# (-#$%(*(+,-.8#7 ^"# "7# #3 ,3).8(%1. "$(^(-

<?php

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 21u


class Media extends ActiveRecord {

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:

/0#123.5 /7%,93#+#8 "$ )#$#8,-.8 $,%(M. #$ "$ 1.-#3.

<?php

class Orders extends ActiveRecord {

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.

/0#123.5 /7%,93#+#8 "$ )#$#8,-.8 -# 7#+"#$+(,7 2,8, "$ 1.-#3. +.$ "$ )#7%.8
8#3,+(.$,3 ^"# 3. 7.2.8%#
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 211



<?php

class Orders extends ActiveRecord {

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:

/0#123.5 6#*($(8 #3 $.198# 3, 7#+"#$+(, -#3 )#$#8,-.8 -# M,3.8#7 (-#$%(-,-

<?php

class Orders extends ActiveRecord {

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

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 214


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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 216


public booleon offsetFxists{inteqer $inJex)
Peimite consultai si existe un iegistio en una ueteiminaua posicion.

public voiJ rewinJ{)
Bevuelve el cuisoi inteino uel iesulset al piimei iegistio.

public booleon voliJ{)
Inuica la posicion actual uel cuisoi inteino es valiua, es uecii que aun queuan ms iegistios
paia iecoiiei.

public voiJ next{)
Nueve el cuisoi inteino al siguiente iegistio uel Resultset.

public voiJ current{)
Bevuelve el objeto ActiveRecoiu activo en el cuisoi.

public voiJ seek{int $position)
Nueve el cuisoi inteino uel iesultset a la posicion inuicaua poi $position, esta uebe sei un
nmeio enteio mayoi a u.

public inteqer count{)
Implementa el mtouo que exige la inteiface Countoble el cual peimite sabei cuantos iegistios
ha uevuelto el iesultset.

public ActiveRecorJ qetIirst{)
0btiene el piimei iegistio uel cuisoi. Implicitamente iebobina el punteio al piimei iegistio.

public ActiveRecorJ qetlost{)
0btiene el ltimo iegistio uel cuisoi. Implicitamente mueve el punteio inteino al ltimo
iegistio.

public ActiveRecorJ offset6et{$inJex)
0btiene el iegistio ubicauo en la posicion $inuex uel cuisoi. Las posiciones empiezan en u.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 217


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:

/0#123.5 [9%#$#8 3.7 1#$7,0#7 -# M,3(-,+(:$ -# "$ 1.-#3.

<?php

$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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 218


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:

interface TransactionManagerInterface {

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 22u


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:

/0#123.5 /7%,93#+#8 3.7 2,8U1#%8.7 -# 3, %8,$7,++(:$ +.$ "$ T8,$7,+%(.$6#*($(%(.$

<?php

class AccountsController extends ApplicationController {

public function createCustomerDataAction(){

try {
$definition = new TransactionDefinition();
$definition->
setIsolationLevel(TransactionDefinition::ISOLATION_SERIALIZABLE);
$definition->setPropagation(false);
$definition->setReadOnly(false);
$definition->setTimeout(0);

$transaction =
TransactionManager::getUserTransaction($definition);

$customer = new Customer();
$customer->setTransaction($transaction);
$customer->setName("John Smith");
$customer->setStatus("Active");
if($customer->save()){
$this->routeToAction("action: createAccountData");
} else {
$transaction->rollback();
}
}
catch(TransactionFailed $e){
Flash::error($e->getMessage());
}
}

public function createCustomerDataAction($clientId){

$clientId = $this->filter($clientId, "int");

try {
$transaction =
TransactionManager::getUserTransaction($definition);
$this->Account->setTransaction($transaction);

$accounts = $this->Account-
>findWithSharedLock("client_id=$clientId");
foreach($accounts as $account){
if($account->getStatus()=='Inactive'){
$account->setBalance(0);
$account->setStatus('Active');
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 221


if($account->save()==false){
foreach($account->getMessages() as
$message){
Flash::error($message-
>getMessage());
}
$transaction->rollback();
}
}
}
if($transaction->commit()==true){
Flash::success("Se cre correctamente el cliente");
}
}
catch(TransactionFailed $e){
Flash::error($e->getMessage());
}

}

}

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.

/0#123.5 ;%(3(>,8 %8,$7,++(.$#7 , 9,0. $(M#3

$invoice = new Invoice();
$db = $invoice->getConnection();
$db->begin();
$invoice->find(124);
$invoice->setStatus(Cancelled);
$invoice->save();
$db->commit();

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:

/0#123.5 '($+8.$(>,+(:$ -# 8#+"87.7 #$ +.$%8.3,-.8#7

<?php

try {
$transaction = new ActiveRecordTransaction(true);
foreach($Accounts->find("status = 'P'") as $accountItem){
$accountItem->setTransaction($transaction);
$accountItem->setStatus("A");
if($accountItem->save()==false){
foreach($accountItem->getMessages() as $message){
Flash::error($message->getMessage());
}
$transaction->rollback();
}
}

foreach($Accounts->find("status = 'A' AND customer_id = '$customerId'") as
$accountItem){
$accountItem->setTransaction($transaction);
$accountItem->setBalance($accountItem->getBalance()-
$manageDiscount);
if($accountItem->save()==false){
foreach($accountItem->getMessages() as $message){
Flash::error($message->getMessage());
}
$transaction->rollback();
}
}

$transaction->commit();

}
catch(TransactionFailed $e){
Flash::error($e->getMessage());
}

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:

/0#123.5 '($+8.$(>,+(:$ -# 8#+"87.7 #$ +.$%8.3,-.8#7

<?php

try {
$transaction = new ActiveRecordTransaction(true);
$Accounts->setTransaction($transaction);
foreach($Accounts->find("status = 'P'") as $accountItem){
$accountItem->setStatus("A");
if($accountItem->save()==false){
foreach($accountItem->getMessages() as $message){
Flash::error($message->getMessage());
}
$transaction->rollback();
}
}

foreach($Accounts->find("status = 'A' AND customer_id = '$customerId'") as
$accountItem){
$accountItem->setBalance($accountItem->getBalance()-
$manageDiscount);
if($accountItem->save()==false){
foreach($accountItem->getMessages() as $message){
Flash::error($message->getMessage());
}
$transaction->rollback();
}
}

$transaction->commit();

}
catch(TransactionFailed $e){
Flash::error($e->getMessage());
}

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 22S


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.

/0#123.5 I,2%"8,8 "$, #H+#2+(:$ ,3 $. 2.-#8 .9%#$#8 "$ 93.^"#. #$ "$, %8,$7,++(:$

<?php

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:

<?php

class Customers extends ActiveRecord {

protected $id;
protected $name;
protected $e_mail;
protected $status;

protected function setId($id){
$this->id = $id;
}

protected function setName($name){
$this->name = $name;
}

protected function setEMail($e_mail){
$this->e_mail = $e_mail;
}

protected function setStatus($status){
$this->status = $status;
}

protected function validation(){
$this->validate("Length", array("field" => "name", "minimum" => 10,
"maximum" => 50));
$this->validate("Email", "e_mail");
$this->validate("InclusionIn", array("field" => "status", domain
=> array(A, I), required => false);

if($this->validationHasFailed()==true){
return false;
}
}
}

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:

T,93,5 Y,3(-,-.8#7 2.8 -#*#+%. ^"# C,+#$ 2,8%# -# B+%(M#<#+.8-

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 229


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:

/0#123.5 /7%,93#+#8 8#)3,7 -# M,3(-,+(:$ -# ($%#)8(-,- -# -,%.7 #$ 1.-#3.7

protected function validation(){
$this->validate("Numericality", array(field" => precio_venta",
required => false));
if($this->validationHasFailed()==true){
return false;
}
}

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.

/0#123.5 [9%#$#8 3.7 1#$7,0#7 -# M,3(-,+(:$ +",$-. *,33, "$, .2#8,+(:$ -#
1,$(2"3,+(:$ -# -,%.7

<?php

$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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2Su


/0#123.5 K#87.$,3(>,8 3, 28#7#$%,+(:$ -# 3.7 1#$7,0#7 -# M,3(-,+(:$ 1#-(,$%# #3 BKZ -#
!(&)#$,$(-%".$//*0$

<?php

$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){
if($message->getType()==Email){
Flash::warning($message->getMessage());
} else {
Flash::error($message->getMessage());
}
}
}

El campo que geneia el mensaje tambin peimite peisonalizai los mensajes geneiauos:

/0#123.5 [9%#$#8 ($*.81,+(:$ -# 3.7 1#$7,0#7 -# M,3(-,+(:$ #$ "$ 28.+#7. -#
1,$(2"3,+(:$ -# -,%.7

<?php

$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:

/0#123.5 I8#,8 "$ M,3(-,-.8 2,8, ($%#)8(-,- -# -,%.7 #$ 1.-#3.7

<?php

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&oacute;n para IdentificationValidator");
}
if(!in_array($this->getOption('type'), array('any', 'company',
'people'))){
throw new ActiveRecordException("El tipo de numero de
identificaci&oacute;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&oacute;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':

/0#123.5 Z123#1#$%,8 "$ #M#$%. -# M,3(-,+(:$ -# ,+"#8-. , 3, .2#8,+(:$ #0#+"%,-,

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:

T,93,5 T(2.7 -# #M#$%.7 -# M,3(-,+(:$ \ 7" .8-#$ -# #0#+"+(:$

[2#8,+(:$ 4.198#
K"#-#
+,$+#3,8 /H23(+,+(:$
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2SS


.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:

/0#123.5 Z123#1#$%,8 "$ #M#$%. -# M,3(-,+(:$ 2,8, 1.-#3.7

<?php

class Products extends ActiveRecord {

protected function beforeSave(){
if($this->quantity<0){
Flash::error("La cantidad no puede ser negativa");
return false;
}
}

}

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S6


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:

/0#123.5 I,19(,8 #3 $.198# #7%U$-,8 -# "$ #M#$%. #$ "$ 1.-#3.

<?php

class Products extends ActiveRecord {

protected $beforeSave = myCustomEvent

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.

/0#123.5 6#*($(8 1G3%(23#7 +,339,+S7 2,8, "$ 1(71. #M#$%. -# "$ 1.-#3.

<?php

class Products extends ActiveRecord {

protected $beforeSave = array(myFirstEvent, mySecondEvent);

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:

/0#123.5 6#*($(8 #M#$%.7 -#3 1.-#3. -($U1(+,1#$%# 1#-(,$%# ,%8(9"%.7

<?php

class Products extends ActiveRecord {

protected $beforeSave;

protected function beforeValidation(){
if($this->category==Food){
$this->beforeSave = checkFoodQuantity;
} else {
$this->beforeSave = checkOtherQuantity;
}
}

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



/0#123.5 6#*($(8 "$ #M#$%. , 3, #72#8, -# "$ *,33. #$ #3 28.+#7. -# M,3(-,+(:$ -# "$
1.-#3.

<?php

class Products extends ActiveRecord {

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:

/0#123.5 6#*($(8 "$, 33,M# *.8U$#, M(8%",3 2.8 +.$M#$+(:$

<?php

class Products extends ActiveRecord {

protected function initialize(){
$this->addForeignKey(categories_id);
}

}

Sino se utiliza un mouelo entiuau-ielacion que use convenciones la foima ue inuicai las llaves
foineas se iealiza ue esta maneia:

/0#123.5 /7%,93#+#8 33,M#7 *.8U$#,7 -# ,+"#8-. ,3 1.-#3. #$%(-,- 8#3,+(:$

<?php
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 24u



class Employees extends ActiveRecord {

protected function initialize(){

//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.

/0#123.5 /7%,93#+#8 ,++(.$#7 -# "$, 33,M# *.8U$#, M(8%",3 #$ "$ 1.-#3.

<?php

class Employees extends ActiveRecord {

protected function initialize(){

$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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 242


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 {

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 244


protected $id;
protected $product_id;
protected $cantidad;

public function getId(){
return $this->id;
}

public function getProductId(){
return $this->product_id;
}

public function getCantidad(){
return $this->cantidad;
}

public function setId($id){
$this->id = $id;
}

public function setProductId($product_id){
$this->product_id = $product_id;
}

public function setCantidad($cantidad){
$this->cantidad = $cantidad;
}

protected function _tableDefinition(){
return array(
"attributes" => array(
"id" => array(
"type" => db::TYPE_INTEGER,
"notNull" => true,
"primary" => true,
"auto" => true
),
"product_id" => array(
"type" => db::TYPE_INTEGER,
"notNull" => true
),
"cantidad" => array(
"type" => db::TYPE_VARCHAR,
"notNull" => true,
"size" => 10
)
),
"indexes" => array("product_id")
);
}

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.

/0#123.5 ;%(3(>,8 #$%(-,-#7 %#12.8,3#7 +.$ %8,$7,++(.$#7
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 24S



try {
$transaction = TransactionManager::getUserTransaction();
$this->Movement->setTransaction($transaction);
$this->Cart->setTransaction($transaction);
$conditions = "sellDate = '".Date::getCurrentDate()."'";
foreach($this->Movement->find($conditions) as $movement){
$productStadistic = new ProductStatistics();
$productStadistic->setTransaction($transaction);
$productStadistic->setProductId($movement->getProductId());
$productStadistic->setCantidad($movement->getQuantity());
if($productStadistic->save()==false){
foreach($productStadistic->getMessages() as $message){
Flash::error($message->getMessage());
}
$transaction->rollback();
}
}
$transaction->commit();
$productStadistic = $this->ProductStadistics->findFirst();

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:

CREATE TABLE `products_categories` (
`id` int(18) NOT NULL,
`name` varchar(70) default NULL,
PRIMARY KEY (`id`)
);

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 246


CREATE TABLE `products` (
`id` int(18) NOT NULL,
`name` varchar(100) default NULL,
`products_categories_id` int(11) NOT NULL,
`quantity` int(11) NOT NULL,
`price` decimal(16,2) NOT NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE `customers` (
`id` int(18) NOT NULL,
`name` varchar(20) default NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE `invoices` (
`id` int(18) NOT NULL,
`customers_id` int(18) NOT NULL,
`sell_date` date NOT NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE `invoices_lines` (
`id` int(18) NOT NULL,
`invoices_id` int(18) NOT NULL,
`products_id` int(18) NOT NULL,
`quantity` int(11) NOT NULL,
`price` decimal(16,2) NOT NULL,
`taxes` decimal(16,2) NOT NULL,
PRIMARY KEY (`id`)
);

Los mouelos ue estas entiuaues son los siguientes, (a pioposito se omiten los getteissetteis):

/0#123.5 6#*($(+(:$ -# 1.-#3.7 \ 7"7 8#3,+(.$#7 2,8, "7. +.$ B+%(M#<#+.8-].($

<?php

// 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");
}

}
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 247



// 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

$query = new ActiveRecordJoin(array(
"entities" => array("Invoices", "Products", "InvoicesLines"),
"fields" => array(
"{#Products}.name",
"{#Invoices}.sell_date",
"{#InvoicesLines}.quantity"
)
));

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.

/0#123.5 [9%#$#8 3.7 8#)(7%8.7 )#$#8,-.7 #$ "$ ].($ +.$ B+%(M#<#+.8-].($

//Mediante getters
foreach($query->getResultSet() as $result){
print $result->getName()." ".
$result->getSellDate()." ".
$result->getQuantity()."\n";
}

//Mediante atributos pblicos
foreach($query->getResultSet() as $result){
print $result->name." ".$result->sell_date." ".$result->quantity."\n";
}

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:

/0#123.5 B)8"2,1(#$%.7 -# -,%.7 +.$ B+%(M#<#+.8-].($

//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.

CREATE TABLE `cart` (
`id` int(11) NOT NULL auto_increment,
`sid` char(35) default NULL,
`product_id` int(11) NOT NULL,
`quantity` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8;


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.

/0#123.5 '.98##7+8(9(8 "$ K8.2#8%\B++#77.8 #$ "$ 1.-#3.

<?php

class Products extends ActiveRecord {

protected function readAttribute($attributeName){
if($attributeName==very_private_field){
return null;
} else {
return $this->$attributeName;
}
}

}
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.

/0#123.5 /7%,93#+#8 3, +8#,+(:$ -# 7#$%#$+(,7 -# ($7#8+(:$ \ ,+%",3(>,+(:$ 7.3. 2,8, 3.7
,%8(9"%.7 -#3 1.-#3. ^"# C,$ +,19(,$-.

<?php

class Categories extends ActiveRecord {

protected function initialize(){
$this->setDynamicUpdate(true);
$this->setDynamicInsert(true);
}

}
21.24 Manejo de Excepciones
Las siguientes excepciones son geneiauas y asociauas a opeiaciones con ActiveRecorJ:

T,93,5 /H+#2+(.$#7 )#$#8,-,7 +",$-. 7# %8,9,0, +.$ B+%(M#<#+.8-

/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:

/0#123.5 T8,%,8 #H+#2+(.$#7 2.8 M(.3,+(:$ -# 33,M# *.8U$#,

<?php

class Inventory extends ActiveRecord {

protected function exceptions($e){
if($e instanceof DbConstraintViolationException){
//Algn procedimiento
} else {
throw $e;
}
}
}

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:

T,93,5 /M#$%.7 ^"# 7# 2"#-#$ (123#1#$%,8 #$ 23")($7 -# B+%(M#<#+.8-

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:

/0#123.5 6#*($(8 ,"%.$(+(,3(>,+(:$ -# 1.-#3.7 #$ 3, +.$*()"8,+(:$


[application]
mode = development
name = "Project Name"
interactive = On
dbdate = YYYY-MM-DD
debug = On

[entities]
autoInitialize = Off






LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S6


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:

/0#123.5 [9%#$#8 ($7%,$+(,7 -# 1.-#3.7 #$ *.81, #*(+(#$%#

<?php

try {
$transaction = TransactionManager::getUserTransaction();
$this->Movement->setTransaction($transaction);
$this->Cart->setTransaction($transaction);
$conditions = "sellDate = '".Date::getCurrentDate()."'";
foreach($this->Movement->find($conditions) as $movement){
$productSt = EntityManager::getEntityInstance(ProductStatistics);
$productSt->setTransaction($transaction);
$productSt->setProductId($movement->getProductId());
$productSt->setCantidad($movement->getQuantity());
if($productSt->save()==false){
foreach($productSt->getMessages() as $message){
Flash::error($message->getMessage());
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S7


}
$transaction->rollback();
}
}
$transaction->commit();
}
catch(TransactionFailed $e){
Flash::error($e->getMessage());
}

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.

stotic function voiJ initHoJelBose{strinq $moJelsBir)
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 2S8


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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 261


stotic function orroy qetIoreiqnKeys{strinq $entityNome)
0btiene las llaves foineas viituales uefiniuas paia una entiuau.

stotic function booleon bosIoreiqnKeys{strinq $entityNome)
Peimite consultai una entiuau tiene llaves foineas viituales uefiniuas.























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 262


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.

/0#123.5 I,19(,8 "$ .90#%. B+%(M#<#+.8- , "$ #7%,-. ,-1($(7%8,-.

<?php

$transaction = TransactionManager::getUserTransaction();
$customer = new Customer();
$customer->setTransaction($transaction);
$customer->setName(John);
$customer->setSurname(Smith);
$customer->save();
$transaction->commit();
$customer->detachTransaction();

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.



LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 26S


Paite 4: La capa ue piesentacion

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.

























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 266


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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 267


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:

/0#123.5 Y(7%, 28($+(2,3 M(#R7J($-#HO2C%13 2.8 -#*#+%.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv='Content-type' content='text/html; charset=UTF-8' />
<title>Application Title</title>
<?php Tag::stylesheetLink('style', true) ?>
<?php echo Core::stylesheetLinkTags() ?>
<?php echo Core::javascriptBase() ?>
</head>
<body>
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 268


<?php echo View::getContent(); ?>
</body>
</html>

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.

El XBTNL geneiauo poi la vista anteiioi es:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv='Content-type' content='text/html; charset=UTF-8' />
<title>Application Title</title>
<link rel='stylesheet' type='text/css' href='/app-
path/css.php?c=style&p=/app-path' />
<script type='text/javascript' src='/app-
path/javascript/scriptaculous/protoculous.js'></script>
<script type='text/javascript' src='/hfos/javascript/core/base.js'></script>
<script type='text/javascript' src='/app-
path/javascript/core/validations.js'></script>
<script type='text/javascript' src='/app-path/javascript/core/main.php?app=
&module=&path=%2Finstance-name%2F&controller=login&action=index&id='></script>
</head>
<body>
</body>
</html>

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:

Jefoult,views,coteqories,creote.pbtml
Jefoult,views,loyouts,coteqories.pbtml
Jefoult,views,inJex.pbtml

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:

/0#123.5 B23(+,8 1"3%(23#7 %#123,%#7 , "$ 1(71. +.$%8.3,-.8

<?php

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 272


<div style='background:yellow;padding:10px'>
<h2>Template 1</h2>
<?php View::getContent(); ?>
</div>

El llamauo a view::qetContent{) inuica uonue se uebe inciustai el conteniuo ue otias vistas
conteniuas poi el fiagmento ue piesentacion.

El aichivo ue plantilla views,loyouts,templote2.pbtml tiene:

<div style='background:#faca22;padding:10px'>
<h2>Template 2</h2>
<?php View::getContent(); ?>
</div>

El aichivo ue plantilla views,loyouts,temploteS.pbtml tiene:

<div style='background:#ccccf2;padding:10px'>
<h2>Template 3</h2>
<?php View::getContent(); ?>
</div>

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:

<div style='background:#eac2ff;padding:10px'>
<h3>Accin Create</h3>
<?php View::getContent(); ?>
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 27S


</div>

La vista ue la accion upJote en el aichivo views,customers,_upJote.pbtml tiene:

<div style='background:#cceaff;padding:10px'>
<h3>Accin Update</h3>
<?php View::getContent(); ?>
</div>

El iesultauo obteniuo en el exploiauoi al invocai la accion creote es:



El iesultauo obteniuo al invocai la accion upJote en customers es:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 274




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:

/0#123.5 ;%(3(>,8 ,%8(9"%.7 2G93(+.7 2,8, %8,$7*#8(8 M,3.8#7 , 3, 28#7#$%,+(:$

<?php

class PressController extends ApplicationController {

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 27S


public $code;
public $name;

public function indexAction(){

}

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.

/0#123.5 T8,$7*#8(8 -,%.7 , 3, 28#7#$%,+(:$ 1#-(,$%# 7#%K,8,1T.Y(#R
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 276



<?php

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:

T,93,5 /M#$%.7 ^"# 7# 2"#-#$ (123#1#$%,8 #$ 23")($7 -# Y(#R

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:

<?php echo View::renderPartial(nombreVista, controller: nombreControlador);
?>

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



<?php echo View::renderView(nombreVista, controller: nombreControlador); ?>

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 281


Los contiolauoies ueben establecei el auministiauoi ue piesentacion iequeiiuo
sobiesciibienuo el mtouo qetviewEonJler ue esta foima:

/0#123.5 I,19(,8 #3 +.12.$#$%# ^"# ,-1($(7%8, 3, )#$#8,+(:$ -# 3, 28#7#$%,+(:$
<?php

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:

/0#123.5 6#*($(8 "$ +.12.$#$%# -# "7",8(. ^"# ,-1($(7%#8 3, 28#7#$%,+(:$
<?php

class MyView {

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.

/]#123.5 6#*($(8 "$ +.12.$#$%# -# "7",8(. ^"# ,-1($(78# 3, 28#7#$%,+(:$ -#
#H+#2+(.$#7 $. +,2%"8,-,7
<?php

class CustomersController extends ApplicationController {

public function getViewExceptionHandler(){
return array("MyView", "handleViewExceptionRender");
}
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 282



}

El mtouo iecibe la excepcion y el ltimo contiolauoi activo antes ue que se geneiai. El
componente Hyview seiia:

/0#123.5 6#*($(8 "$ +.12.$#$%# -# "7",8(. ^"# ,-1($(7%8# 3, 28#7#$%,+(:$ -#
#H+#2+(.$#7 $. +,2%"8,-,7
<?php

class MyView {

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:

/0#123.5 /7%,93#+#8 "$ 28.H\ ,3 +.12.$#$%# -# 28#7#$%,+(:$ o#$-pY(#R
<?php

class MyController extends ApplicationController {

public function getViewHandler(){
View::setProxyProvider('Zend', array(
'zendPath' => 'Library',
'class' => 'Zend_View',
'extension' => 'phtml',
'encoding' => 'UTF-8',
'strictVars' => false
));
return array('View', 'proxyHandler');
}
}

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:

/0#123.5 j#$#8,8 "$ 28.H\ -# 28#7#$%,+(:$ , '1,8%\

<?php

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












LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 28S


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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 286


/0#123.5 @.7%8,8 "$ M,3.8 #$ "$ +.12.$#$%# M(7",3 -#7-# #3 +.$%8.3,-.8 1#-(,$%#
T,)55-(723,\T.
<?php

class PeopleController extends ApplicationController {

public function indexAction(){
Tag::displayTo('genero', 'F');
}

}

En la vista el como esttico se visualizai con el valoi "F" seleccionauo:

<?php

$generos = array(
'M' => 'Masculino',
'F' => 'Femenino'
);

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::linkTo(controlador/accion, Tag::image(foto.jpg)) ?>

Los helpeis pueuen iecibii paimetios poi nombie o un aiiay asociativo cuyos inuices sen
los nombies ue los paimetios.

<?php echo Tag::form(controlador/accion, method: post) ?>

<?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.

/0#123.5 ;7. -# 3($ST.

<?php echo Tag::linkTo(controlador/saludo, Saludar) ?>

<?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.

/0#123.5 ;7. -# 3($ST.B+%(.$

<?php echo Tag::linkTo(cancelInvoice, Cancelar) ?>

<?php echo Tag::linkTo(cancelInvoice, Cancelar, class: css_saludo,
border: 0, confirm: Desea cancelar la factura?); ?>

0pciones extenuiuas ue linkToAction:

T,93,5 [2+(.$#7 #H%#$-(-,7 -# 3($ST.B+%(.$
4.198# 6#7+8(2+(:$
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 288


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':

/0#123.5 ;7. -#3 C#32#8 3($ST.<#1.%#
<div id='the_menu'></div>

<?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.

<?php echo Tag::textField("nombre") ?>

El couigo BTNL geneiauo es:

<input type='text' id='nombre' value='' name='nombre' />

El helpei textIielJ acepta como paimetio cualquiei nombie ue atiibuto aplicable a la
etiqueta input type="text".

public stotic function textAreo{mixeJ $poroms)
Peimite cieai una aiea ue texto (textaiea) con los paimetios estableciuos.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 29u


/0#123.5 ;7. -#3 C#32#8 T,)55%#H%B8#,
<?php echo Tag::textArea("nombre", "cols: 120", "rows: 5") ?>


Lo cal geneia el siguiente couigo BTNL:

<textarea id="nombre" name="nombre" cols="120" rows="5"></textarea>

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.

/0#123.5 ;7. -#3 C#32#8 T,)55$"1#8(+!(#3-
<?php echo Tag::numericField("accountNumber") ?>


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.

/0#123.5 ;7. -#3 C#32#8 $"1#8(+K,77R.8-!(#3-
<?php echo Tag::numericPasswordField("password") ?>

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.

/0#123.5 ;7. -#3 C#32#8 T,)557#3#+%'%,%(+
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 291


<?php

$estados = array(
'A' => 'ACTIVO',
'I' => 'INACTIVO'
);
echo Tag::selectStatic("estados", $estados, 'useDummy: yes');

?>

Lo cul geneia el siguiente BTNL:

<select id='estados' name='estados'>
<option value='@'>Seleccione...</option>
<option value='A'>ACTIVO</option>
<option value='I'>INACTIVO</option>
</select>

0pciones ue selectStatic:

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):

/0#123.5 ;7. -#3 C#32#8 T,)557#3#+%
<?php echo Tag::select('userId', $Users->find('order: name'), 'using: id,name',
'useDummy: yes') ?>

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 292


0pciones ue select:

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:

/0#123.5 ;7. -#3 C#32#8 T,)553.+,3#'#3#+%
<?php echo Tag::localeSelect('languageId', $Languages->find('order: name'),
$traslate, 'using: id,name', 'useDummy: yes') ?>

public stotic function selectHixeJ{)
Este mtouo peimite cieai listas combinanuo aiiays ue valoies estticos y iesultauos
uinmicos.

/0#123.5 ;7. -#3 C#32#8 T,)557#3#+%@(H#-
<?php

$dynamicData = $Categories->find();
$staticData = array(
N => NINGUNO DE LOS ANTERIORES
);

echo Tag::selectMixed('categoriesId', $dynamicData, $staticData, 'using:
id,name', 'useDummy: yes') ?>

Las opciones auicionales ue selectStotic y select tambin aplican a selectHixeJ.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 29S


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.

/0#123.5 ;7. -#3 C#32#8 T,)557"91(%Z1,)#
<?php echo Tag::submitImage('Enviar', Core::getInstancePath.'img/submit.png') ?>

Auicionalmente este helpei acepta como paimetio cualquiei atiibuto o piopieuau que pueua
sei aplicable a la etiqueta input type='image'.

public static function button()
Peimite cieai un boton tipico ue BTNL sin ninguna accion poi uefecto.

/0#123.5 ;7. -#3 C#32#8 T,)559"%%.$
<?php echo Tag::button('Actualizar','id: update','onclick: actualiza()') ?>

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'.

/0#123.5 ;7. -#3 C#32#8 T,)55(1,)#
<?php echo Tag::image('imagen.png', 'alt: Imagen') ?>

0pciones ue image:

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'.

/0#123.5 ;7. -#3 C#32#8 T,)55*.81<#1.%#
<?php echo Tag::formRemote('usuarios/buscar','update: findResults','required:
name') ?>

0pciones ue foimRemote:

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.

/0#123.5 ;7. -#3 C#32#8 T,)557"91(%<#1.%#
<?php echo Tag::submitRemote('Buscar', 'update: findResults') ?>

0pciones ue submitRemote:

T,93,5 K,8U1#%8.7 ^"# 8#+(9# T,)557"91(%<#1.%#
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 29S


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.

/0#123.5 ;7. -#3 C#32#8 T,)55*.81
<?php echo Tag::form('usuarios/buscar','id: formSearch') ?>

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.

/0#123.5 ;7. -#3 C#32#8 T,)55#$-!.81VW
<?php echo Tag::endForm() ?>

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 296


ueneia el siguiente couigo XBTNL:

</form>

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'.

/0#123.5 ;7. -#3 C#32#8 T,)557"91(%k"%%.$
<?php echo Tag::submitButton('Buscar', 'id: submitSearch') ?>

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.

/0#123.5 ;7. -#3 C#32#8 T,)557#%@#%,
<?php echo Tag::setMeta('description','Busqueda de usuarios.') ?>

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.

/0#123.5 ;7. -#3 C#32#8 T,)55)#%@#%,7VW
<?php Tag::getMetas() ?>

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.

/0#123.5 ;7. -#3 C#32#8 T,)557%\3#'C##%E($S
<?php echo Tag::stylesheetLink('calendar', true) ?>

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 297


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.

En una clase CSS las vaiiables se utilizan asi:

/0#123.5 ;7. -# M,8(,93#7 I'' +.$ T,)557%\3#7C##%E($S
.header {
background-image: url(@path/img/site/bg-header.gif);
}

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.

/0#123.5 ;7. -# C#32#8 T,)55-,%#!(#3-
<?php echo Tag::dateField("fechaInicial") ?>
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 298



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.

/0#123.5 ;7. -#3 C#32#8 T,)553.+,3#6,%#!(#3-
<?php echo Tag::localeDateField("fechaInicial", $traslate) ?>

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.

/0#123.5 ;7. -#3 C#32#8 T,)550,M,7+8(2%Z$+3"-#
<?php echo Tag::javascriptInclude(lightbox) ?>

ueneia el couigo BTNL:

<script type='text/javascript' src='/instance/javascript/lightbox.js'></script>

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.

/0#123.5 ;7. -#3 C#32#8 T,)550,M,7+8(2%Z$+3"-# +.$ +,+C#
<?php echo Tag::javascriptInclude(lightbox, false) ?>

ueneia el couigo BTNL:

<script type='text/javascript'
src='/instance/javascript/lightbox.js?nocache=18261'></script>

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.

/0#123.5 ;7. -#3 C#32#8 T,)550,M,7+8(2%@($(*(#-Z$+3"-#
<?php echo Tag::javascriptMinifiedInclude(lightbox) ?>

ueneia el couigo BTNL:

<script type='text/javascript'
src='/instance/javascript/lightbox.min.js'></script>

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.

/0#123.5 ;7. -#3 C#32#8 T,)55-(723,\T.
<?php Tag::displayTo(nombre, Juanita Mendoza);
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Suu



En la vista la caja "nombie" se muestia con el valoi estableciuo:

<?php echo Tag::textField(nombre) ?>

lo que piouuce:

<input type=text id=nombre name=nombre value=Juanita Mendoza />

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

/0#123.5 ;7. -#3 C#32#8 T,)55)#%Y,3"#!8.1B+%(.$
<?php

$nameValue = Tag::getValueFromAction(nameValue);













LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su1


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:

/0#123.5 ;7. -#3 C#32#8 ],M,'+8(2% !.81,%

<script type="text/javascript">
var format = new Format({
type: 'numeric',
properties: { decimals: 2, letNegative: false, blankToZero: false } }, {
type: 'percent',
properties: { decimals: 3, complete: 2 } }, {
type: 'money',
properties: { decimals: 2, simbMon: 'US$', leftZeros: 1 }
});
</script>

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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su2


0pciones uel constiuctoi ue Foimat:

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.

0so uel Foimat:

<div><input id="temp" type="text" /></div>

Nmeiico:
<input type='boton' onclick='formatoNumerico()' />
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SuS


<input type='boton' onclick='deFormatoNumerico()' />

<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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su4


format.changeProperties({type: 'numeric', properties: { letNegative: false } });

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>





























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su6


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:

/0#123.5 I8#,8 "$, %,93, +.$ -,%.7 #$ "$ -.+"1#$%. K6!
<?php

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su7



class ReportsController extends ApplicationController {

public function showAction(){

$pdf = new PdfDocument();
$pdf->addPage();
$black = PdfColor::fromName(PdfColor::COLOR_BLACK);
$pdf->setTextColor($black);

//Agregar el titulo
$pdf->setFont('helvetica', '', 18);
$pdf->writeCell(40, 7, "Reporte de Productos");
$pdf->lineFeed();

//La fecha del reporte
$pdf->setFont('helvetica', '', 12);
$pdf->writeCell(40, 7, "Fecha: ".Date::getCurrentDate());
$pdf->lineFeed();

foreach($this->Products->find('order: id') as $product){
$pdf->writeCell(20, 7, $product->getId());
$pdf->writeCell(70, 7, $product->getName());
$pdf->lineFeed();
}

$pdf->outputToBrowser();

}
}

0na veision ms estilizaua uel iepoitelistauo se pueue obtenei agieganuo boiues,
encabezauos y coloies ue fonuo al uocumento:

/0#123.5 I8#,8 "$ -.+"1#$%. K6! +.$ "$, %,93, -# -,%.7 1U7 #7%(3(>,-,
<?php


class ReportsController extends ApplicationController {

public function showAction(){

$pdf = new PdfDocument();
$pdf->addPage();

//Los datos de entrada son UTF-8
$pdf->setEncoding(PdfDocument::ENC_UTF8);

$black = PdfColor::fromName(PdfColor::COLOR_BLACK);
$pdf->setTextColor($black);

//Agregar el titulo
$pdf->setFont('helvetica', '', 18);
$pdf->writeCell(40, 7, "Reporte de Productos");
$pdf->lineFeed();

//La fecha del reporte
$pdf->setFont('helvetica', '', 12);
$pdf->writeCell(40, 7, "Fecha: ".Date::getCurrentDate());
$pdf->lineFeed();

//Encabezados con fondo gris
$lightGray = PdfColor::fromGrayScale(0.75);
$pdf->setFillColor($lightGray);
$pdf->writeCell(20, 7, 'Cdigo', 1, 0, PdfDocument::ALIGN_JUSTIFY,
1);
$pdf->writeCell(90, 7, 'Nombre', 1, 0, PdfDocument::ALIGN_JUSTIFY,
1);
$pdf->lineFeed();
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su8



//Volver al fondo blanco
$white = PdfColor::fromName(PdfColor::COLOR_WHITE);
$pdf->setFillColor($white);


foreach($this->Products->find('order: id') as $product){
$pdf->writeCell(20, 7, $product->getId(), 1, 0,
PdfDocument::ALIGN_JUSTIFY, 1);
$pdf->writeCell(70, 7, $product->getName(), 1, 0,
PdfDocument::ALIGN_JUSTIFY, 1););
$pdf->lineFeed();
}

//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.

Las couificaciones sopoitauas son:
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia Su9


T,93,5 T(2.7 -# +.-(*(+,+(.$#7 7.2.8%,-,7 2.8 K-*6.+"1#$%
I.$7%,$%# I.-(*(+,+(:$ 6#7+8(2+(:$
ENC_IS088S91 Couificacion IS0-88S9-1 o latin occiuental.
ENC_0TF8 Couificacion 0nicoue 0TF-8
ENC_IS08u22}P Couificacion }aponesa IS0-8u22-}P

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S1u


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:

T,93,5 T(2.7 -# .8(#$%,+(:$ -# 2U)($, 7.2.8%,-,7 2.8 K-*6.+"1#$%
I.$7%,$%# [8(#$%,+(:$ 6#7+8(2+(:$
0R_P0RTRAIT 0iientacion veitical.
0R_LANBSCAPE 0iientacion hoiizontal.

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.

function voiJ setIontSize{inteqer $size)
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S1S


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 voiu wiiteNultiCell(integei $w, integei $h, stiing $txt, integei $boiuei=u, stiing
$align=PufBocument::ALIuN_}0STIFY, integei $fill=u)

function voiJ write{inteqer $b, strinq $txt, strinq $link='')
Agiega un texto al uocumento PBF en las cooiuenauas actuales.

function voiJ oJJlmoqe{strinq $file, inteqer $x, inteqer $y, inteqer $w=0, inteqer $b=0, strinq
$type='', strinq $link='')

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.

function integei getX()
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S14


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.

function int qetAvoilobleWiJtb{)

function voiJ setIontPotb{strinq $potb)





LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S1S


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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S16


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 {

public function listReservationTypesAction(){

$this->getResponseInstance-
>setResponseType(ControllerResponse::RESPONSE_NO_LAYOUT);

ReportComponent::load(array("Text", "Style"));

// Para PDF
$report = new Report('Pdf');

// Para HTML
$report = new Report('Html');

$numeroPagina = new ReportText("%pageNumber%", array(
"fontSize" => 9,
"textAlign" => "right"
));

$titulo = new ReportText("REPORTE DE TIPOS DE RESERVA", array(
"fontSize" => 16,
"fontWeight" => "bold",
"textAlign" => "center"
));
$titulo2 = new ReportText("Fecha: ".date("Y-m-d H:i a"), array(
"fontSize" => 11,
"fontWeight" => "bold",
"textAlign" => "center"
));

$report->setHeader(array($numeroPagina, $titulo, $titulo2));

$report->setDocumentTitle("Reporte de Tipos de Reserva");
$report->setColumnHeaders(array("CODIGO", "DETALLE"));

$report->setCellHeaderStyle(new ReportStyle(array(
"textAlign" => "center",
"backgroundColor" => "#eaeaea"
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S18


)));
$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:

/0#123.5 /7%,93#+#8 1.-. -# M(7%, 28#M(, 2,8, 8#2.8%#7 LT@E
<?php

// 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




29.7 API de Report
















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S2u


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.

/0#123.5 I8#,8 "$ -.+"1#$%. -# 7($-(+,+(:$ <''
<?php

Class BlogController extends ApplicationController {

public function rssAction(){
$this->setResponse('rss');
$feed = new Feed();
$feed->setTitle('Corporate Blog');
$feed->setDescription('This is our corporate blog');
$feed->setLink('http://www.examplecompany.com/blog');
$feed->setLanguage('en-us');
foreach($this->Posts->find('order: created_at DESC') as $post){
$item = new FeedItem();
$item->setTitle($post->getTitle());
$item->setLink($post->getPermaLink());
$item->setDescription($post->getBody());
$feed->addItem($item);
}
return $feed->getXMLFeed();
}
}
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S21


30.4 API de Feed
http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes

































LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S22


Ncleo e integiacion ue componentes uel fiamewoik

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.

/0#123.5 /7%,93#+#8 3, >.$, C.8,8(, #$ #3 ,8+C(M. +.$*()O($(
[core]
defaultApp = default
timezone = "America/Bogota"
locale = "es_CO"
charset = UTF-8

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:

<meta http-equiv='Content-type' content='text/html; charset=UTF-8' />

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:

<script src="/instante/javascript/menu.js" type="text/javascript" charset="utf-
8"></script>

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.

/0#123.5 I,19(,8 3, 3.+,3(>,+(:$ 2.8 -#*#+%. 28.)8,1,+(.$,31#$%#
<?php Locale::setDefault(es_ES) ?>

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.

/0#123.5 I.12,8,8 3, +.12,%(9(3(-,- -# "$, ,23(+,+(:$ "7,$-.
1-%$++2,!.345,6783,9:5;
<?php

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:

/0#123.5 <##123,>,8 3, 8"%, -# "$, +3,7# , .%8, -#*($(-, 2.8 #3 "7",8(.
<?php

CoreClassPath::replacePath('Locale', 'apps/my-app/library/Locale/Locale');

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








LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S29


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.

stotic function orroy qetPluqins{)
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SSu


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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS1


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.































LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS2


Paite S: Inteinacionalizacion y Localizacion

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.





















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SSS


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:

/0#123.5 I8#,8 "$ .90#%. E.+,3# "7,$-. "$, +,-#$, -# 3.+,3(>,+(:$
$locale = new Locale(es_CO);

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:

/0#123.5 E##8 3, +"3%"8, -#3 "7",8(. *($,3 7#)G$ #3 $,M#),-.8
$browserLocale = Locale::getBrowser();


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.

/0#123.5 [9%#$#8 3, 3.+,3(>,+(:$ 7#)G$ #3 #$%.8$. -# #0#+"+(:$ -# 3, ,23(+,+(:$
$environLocale = Locale::getEnvironment();


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


en Fiancs y }apones:

/0#123.5 [9%#$#8 %8,-"++(.$#7 3.+,3(>,-,7 2,8, -(*#8#$%#7 +"3%"8,7
<?php

//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














LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS6


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:

/0#123.5 I,8),8 3, 3(7%, -# %8,-"++(:$ 7#)G$ 3, +"3%"8, .9%#$(-, -#3 $,M#),-.8
<?php

class NewsController extends ApplicationController {

private function _loadTraslation(){
$locale = Locale::getBrowser();
$language = $locale->getLanguage();
$path = "apps/myapp/languages/$language/LC_MESSAGES/messages.php";
require $path;
$traslate = new Traslate(Array, $messages);
$this->setParamToView("traslate", $traslate);
}

public function beforeFilter(){
$this->_loadTraslation();
}

}

En caua peticion al contiolauoi la vaiiable $tiaslate es tiansfeiiua a la piesentacion paia su
uso:

/0#123.5 [9%#$#8 3,7 %8,-"++(.$#7 1#-(,$%# 3,7 33,M#7 -#*($(-,7
<?php echo $traslate->_(home) ?>
<?php echo $traslate->_(exit) ?>

Si el aichivo "esLC_NESSAuESmessages.php" tiene el siguiente uiccionaiio:

<?php $messages = array(home => Inicio, exit => Salir) ?>

y el aichivo "enLC_NESSAuESmessages.php" tiene el siguiente uiccionaiio:

<?php $messages = array(home => Home) ?>
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS8



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


















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS9


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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S42


/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:

/0#123.5 @_%.-.7 2,8, 1,$(2"3,8 *8,)1#$%.7 -# *#+C,7
$fecha = new Date(2008-11-30);

//Cambiar el mes a Marzo
$fecha->setMonth(3);
print $fecha; //Devuelve 2008-03-30

//Cambiar el mes a Febrero (se ajusta el da automticamente)
$fecha->setMonth(2);
print $fecha; // Devuelve 2008-02-29

//Cambiar el ao de un ao bisiesto a uno no bisiesto
$fecha->setYear(2009);
print $fecha; // Devuelve 2009-02-28

//Cambiar el dia de la fecha
$fecha->setDay(30);
print $fecha; // Devuelve 2009-02-28

$fecha->setDay(12);
print $fecha; // Devuelve 2009-02-12

//Cuando el mes es mayor a 12 ajusta al ao aos siguientes
$fecha = new Date("2008-01-01");
$fecha->setMonth(13);
print $fecha; //2009-01-01

$fecha = new Date("2009-01-30");
$fecha->setMonth(14);
print $fecha; //2009-02-28

$fecha = new Date("2008-01-30");
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S44


$fecha->setMonth(-2);
print $fecha; //2007-11-30

$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.

T,93,5 T(2.7 -# ($%#8M,3.7 7.2.8%,-.7 2.8 6,%#55,--Z$%#8M,3
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S4S



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:

/0#123.5 I,19(,8 3, 3.+,3(>,+(:$ -# 3.7 .90#%.7 -# *#+C,
<?php

$date = new Date('1986-02-02');

//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:

/0#123.5 [9%#$#8 *#+C,7 #$ *.81,%.7 3.+,3(>,-.7 -# ,+"#8-. , 3, +"3%"8,
<?php

$date = new Date('1985-11-01');

//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.

/0#123.5 [9%#$#8 3, *#+C, ,+%",3 7(1"3%,$#,1#$%# -# ,+"#8-. , -(*#8#$%#7 >.$,7
C.8,8(,7
print Date::getNowFromTimezone("Arctic/Longyearbyen"); // 2009-02-12 03:20:52
print Date::now(); // 2009-02-11 21:20:52
print Date::getNowFromTimezone("America/Caracas"); // 2009-02-11 21:50:52
print Date::getNowFromTimezone("Europe/Amsterdam"); // 2009-02-12 03:20:52
print Date::getNowFromTimezone("Europe/Berlin"); // 2009-02-12 03:20:52
print Date::getNowFromTimezone("Europe/Stockholm"); // 2009-02-12 03:20:52
print Date::getNowFromTimezone("Africa/Cairo"); // 2009-02-12 04:20:52
print Date::getNowFromTimezone("Asia/Jerusalem"); // 2009-02-12 04:20:52
print Date::getNowFromTimezone("Asia/Tokyo"); // 2009-02-12 11:20:52
print Date::getNowFromTimezone("Australia/Sydney"); // 2009-02-12 13:20:52
print Date::getNowFromTimezone("Antarctica/South_Pole"); // 2009-02-12 15:20:52












LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S49


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:

/0#123.5 Z128(1(8 +,$%(-,-#7 1.$#%,8(,7 "7,$-. -(*#8#$%#7 3.+,3(>,+(.$#7
<?php

$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:

/0#123.5 Z128(1(8 "$, +,$%(-,- 1.$#%,8(, "7,$-. "$ *.81,%. 2#87.$,3(>,-.
<?php

$currency = new Currency(new Locale('en_US'));
print $currency->getMoney(10000, '%symbol%%name% %quantity% (%displayName%)');

$currency->setLocale(new Locale('es_CO'));
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SSu


print $currency->getMoney(10000, '%symbol%%name% %quantity% (%displayName%)');

ueneianuo la saliua:

$USD 10,000.00 (US Dollar)
$COP 10.000,00 (Peso de Colombia)

Los tipos ue iuentificauoies sopoitauos son:

T,93,5 T(2.7 -# 1.-(*(+,-.8#7 -# *.81,%. 7.2.8%,-.7 2.8 I"88#$+\
T(2.
@.-(*(+,-.8
6#7+8(2+(:$
%symbol% Simbolo pieueteiminauo ue la moneua utilizaua.
%name% Couigo IS0 S166 ue la moneua
%uisplayName% Nombie ue la moneua en la localizacion activa.
%quantity 0bicacion ue la cantiuau a foimateai.

Si se iequiie se pueue pasai un teicei paimetio a qetHoney inuicanuo la moneua en la que
est la cantiuau peio sin cambiai la localizacion:

/0#123.5 Z$-(+,8 #3 %(2. -# 1.$#-, "7,-. 7#)G$ 3, 3.+,3(>,+(:$ #$ I"88#$+\

$currency->setLocale(new Locale('es_CO'));
print $currency->getMoney(100, '%symbol%%name% %quantity% (%displayName%)',
USD);

El ejemplo anteiioi impiime:

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:

//CUATROMIL QUINIENTOS BOLVARES FUERTES VENEZOLANOS
$currency = new Currency(new Locale('es_VE'));
print $currency->getMoneyAsText(4500);

//UN MILLON DOSCIENTOS CINCUENTAMIL PESOS COLOMBIANOS
$currency = new Currency(new Locale('es_CO'));
print $currency->getMoneyAsText(1250000);

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS1


//UN MILLON DE PESOS COLOMBIANOS
$currency = new Currency(new Locale('es_CO'));
print $currency->getMoneyAsText(1250000);

//CIEN PESOS COLOMBIANOS CON CINCUENTA CENTAVOS
$currency = new Currency(new Locale('es_CO'));
print $currency->getMoneyAsText(100.50);

//UN PESO ARGENTINO
$currency = new Currency(new Locale('es_AR'));
print $currency->getMoneyAsText(1);

//DOSCIENTOS CINCUENTA PESOS URUGUAYOS
$currency = new Currency(new Locale('es_UY'));
print $currency->getMoneyAsText(250);

//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


















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS2


Paite 6: Nonitoiizacion ue Aplicaciones

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.


























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SSS


39 Componente CommonEvent
39.1 Introduccin
FALTA






























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS6


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.


























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS7


41 Componente Config
41.1 Introduccin
FALTA






























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia SS8


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.

/0#123.5 I,8),8 "$, #H%#$7(.$ -($U1(+,1#$%# "7,$-. #3 +.12.$#$%# /H%#$7(.$7
<?php

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:

/0#123.5 I,8),8 "$, #H%#$7(.$ #7%U%(+,1#$%# "7,$-. 9..%O($(
; Cargar extensiones

[modules]
extensions = Kumbia.Acl,User.MyComponent,Mail.Phpmailer

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".

Paia caigai una extension uinmicamente se usa:

/0#123.5 I,8),8 +.12.$#$%#7 -# o#$- !8,1#R.8S
Load::extension(Zend.Dojo)

Paia caigailas en confiq,boot.ini se usa:

[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.





LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S6u


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:

/0#123.5 I8#,+(:$ -# 3.)7 "7,$-. #3 +.12.$#$%# E.))#8
<?php

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S62


<?php

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:

/0#123.5 I,19(,8 #3 *.81,%. -# *#+C, -# "$ 3.) "7,$-. 7#%!.81,%6,%#
<?php

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:

/0#123.5 I8#,8 "$ @,(3E.))#8 ^"# #$M(, 3.7 1#$7,0#7 , "$ +.88#. -# j1,(3
$log = new Logger("Mail", "support@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();

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:

Hoilloq: nombreAplicocion - Iecbo usonJo formoto RIC2822

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");


LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S72


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.




















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S74


Paite 8: Renuimiento y 0ptimizacion

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


























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S77


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.

FALTA




















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S78


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:

/0#123.5 [2%(1(>,+(:$ 2.8 #3(1($,+(:$ -# +,3+"3.7 8#-"$-,$%#7
<?php

$unArrayGrande = range(1, 10000);
for($i=0;$i<=count($unArrayGrande)-1;$i++){
print $unArrayGrande[$i];
}

Es mouificauo a:

<?php

$unArrayGrande = range(1, 10000);
$_sp=count($unArrayGrande)-1;
for($i=0;$i<=$_sp;$i++){
print $unArrayGrande[$i];
}

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















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S82



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.

/0#123.5 /7%,93#+#8 3,7 .2+(.$#7 -#3 +.33#+%.8 28.)8,1,+(.$,31#$%#
<?php

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

[collector]
probability = 100
compressionTime = 900
compressionLevel = 5
collectTime = 1800

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:

T,93,5 K,8U1#%8.7 -#3 +.12.$#$%# j,89,)#I.33#+%.8
LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S84


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).















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S8S


Paite 9: Contexto y Auministiacion ue Sesiones

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.

/0#123.5 /7%8"+%"8, -# ,23(+,+(.$#7 +.$ -(*#8#$%#7 9,+S#$- -# '#7(:$
intranet/
apps/
default/ | memcached
produccion/ | files
compras/ | Database:MySQL
extranet/
apps/
default/ | files
reservas/ | Database:Sqlite
informacion/ | memcached
produccion/ | files

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:

/0#123.5 /7%,93#+#8 #3 ,-,2%,-.8 -# 7#7(:$ , @#1+,+C#-
sessionAdapter = memcache
sessionSavePath = "tcp://127.0.0.1:11211?persistent=1&weight=2&timeout=2"

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:

/0#123.5 /7%,93#+#8 #3 ,-,2%,-.8 -# 7#7(:$ , 6,%,9,7#
sessionAdapter = database
sessionSavePath = "mysql:host=127.0.0.1;username=root;password=mypass;name=mydb"

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.

/0#123.5 /7%,93#+#8 #3 ,-,2%,-.8 -# 7#7(:$ , *(3#7
sessionAdapter = files
sessionSavePath = "/path/to/session/data"

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S88


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:

/0#123.5 !(3%8,8 3.7 -,%.7 -# 7#77(.$ 2,8, #M(%,8 C(0,+S($)
<?php

class CustomerController extends ApplicationController {

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S89


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.

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S91


/0#123.5 ;%(3(>,+(:$ -# '#77(.$4,1#72,+#

<?php

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&oacute;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.






















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S9S


Paite 1u: Beiiamientas uel Besaiiollauoi

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


iuentificailas:

/0#123.5 I,2%"8,8 "$, #H+#2+(:$ -# )8,M#-,- 3#M#
<?

try {

//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.








LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S96


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

/0#123.5 <#,3(>,8 "$ 6#9") , "$ 28.+#7. -# $#).+(.
<?php

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:

LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia S99



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:

/0#123.5 /7%,93#+#8 #3 3,$>,1(#$%. -# "$, #H+#2+(:$ +",$-. *($,3(+# 3, 2#%(+(:$
Debug::setActionOnFinish(Debug::ACTION_HALT);

0tilizai un loggei paia almacenai el seguimiento:

/0#123.5 B31,+#$,8 #3 7#)"(1(#$%. "7,$-. "$ E.))#8
$logger = new Logger(File, debug.txt);
Debug::setActionOnFinish(Debug::ACTION_LOG, $logger);








LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4uu


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















LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4u1


54 Componente Script
54.1 Introduccin
Este componente peimite la cieacion ue sciipts tipo shell que ayuuen al uesaiiollauoi a
optimizai taieas. FALTA





























LouueiTechnologyKumbia Enteipiise Fiamewoik - Nanual ue Refeiencia 4u2


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.

S-ar putea să vă placă și