Sie sind auf Seite 1von 350

CodeIgniter

Gua del Usuario en Espaol


Versin 2.1.3
Rev. 01 102012
Gua del Usuario de CodeIgniter Versin 2.1.3 2
!a"la de Contenido
In#or$a%in &'si%a (.......................................................................................... )
Bienvenido a CodeIgniter ................................................................................................................ 6
Acuerdo de licencia de CodeIgniter ............................................................................................... 7
Crditos ...................................................................................................................................... 8
Instala%in (....................................................................................................... *
Descargar CodeIgniter ................................................................................................................. 10
Instrucciones de Instalacin ......................................................................................................... 11
Introdu%%in (..................................................................................................... 12
Primeros Pasos con CodeIgniter .................................................................................................... 1
CodeIgniter de un !ista"o ............................................................................................................ 1#
$uncionalidades de CodeIgniter .................................................................................................... 16
Diagrama de $lu%o de la A&licacin ................................................................................................ 17
'odelo(!ista(Controlador ................................................................................................................ 18
)*%etivos de Dise+o , Ar-uitectura ............................................................................................... 1.
!utorial (............................................................................................................. 20
Introduccin .................................................................................................................................. /1
P0ginas 1st0ticas ............................................................................................................................ //
2eccin de 3oticias ......................................................................................................................... /4
Crear 5tems de 3oticias .................................................................................................................. /.
Conclusin ..................................................................................................................................... /
!e$as Generales (.............................................................................................. 33
6as 786s de CodeIgniter ................................................................................................................. #
Controladores .............................................................................................................................. 6
3om*res 8eservados ................................................................................................................... #/
!istas ......................................................................................................................................... #
'odelos ...................................................................................................................................... #7
$unciones 9el&er ......................................................................................................................... 40
7sar las Bi*liotecas de CodeIgniter ............................................................................................... 4
Crear sus Pro&ias Bi*liotecas ........................................................................................................ 4#
7sar Drivers de CodeIgniter ......................................................................................................... 48
Crear Drivers ............................................................................................................................... 4.
Crear Clases del 3:cleo ................................................................................................................ 60
Gua del Usuario de CodeIgniter Versin 2.1.3 3
!e$as Generales +%ont.,
9oo;s ( 1<tender el 3:cleo del $rame=or; .................................................................................... 6
Carga Autom0tica de 8ecursos ........................................................................................................ 64
$unciones Comunes ..................................................................................................................... 66
8uteo 78I ................................................................................................................................... 68
'ane%o de 1rrores ....................................................................................................................... 71
Almacenamiento en Cac> de P0ginas ?e* ................................................................................... 7
Per@ilar su A&licacin .................................................................................................................... 7#
Administrar A&licaciones ............................................................................................................... 76
2inta<is Alternativa de P9P &ara Arc>ivos de !istas ........................................................................ 78
2eguridad ................................................................................................................................... 80
1stilo , 2inta<is Aenerales ............................................................................................................ 8/
1scri*ir Documentacin ................................................................................................................ .
Re#eren%ia de Clases (........................................................................................ *-
Clase Benc>mar; ......................................................................................................................... .4
Clase Calendar ............................................................................................................................ .7
Clase Cart ................................................................................................................................... 101
Clase Con@ig ................................................................................................................................ 106
Clase Data*ase ............................................................................................................................ 10.
Clase 1mail ................................................................................................................................. 148
Clase 1ncr,&t .............................................................................................................................. 16
Clase $ormBvalidation .................................................................................................................. 166
Clase $CP ................................................................................................................................... 18#
Clase ImageBli* ........................................................................................................................... 188
Clase In&ut ................................................................................................................................. 1.6
Clase Davascri&t ........................................................................................................................... /01
Clase 6ang .................................................................................................................................. /06
Clase 6oad ..................................................................................................................................... /08
Clase 'igration ............................................................................................................................ /1/
Clase )ut&ut ............................................................................................................................... /1#
Clase Pagination .......................................................................................................................... /17
Clase Parser ................................................................................................................................ //1
Clase 2ecurit, .............................................................................................................................. //4
Clase 2ession .............................................................................................................................. //6
Clase Ca*le .................................................................................................................................. /1
Clase Crac;Bac; ........................................................................................................................... /6
Clase C,&ogra&>, ........................................................................................................................ /#0
Clase 7nitBtest ............................................................................................................................ /#/
Clase 7&load ............................................................................................................................... /#4
Gua del Usuario de CodeIgniter Versin 2.1.3 4
Re#eren%ia de Clases +%ont.,
Clase 78I .................................................................................................................................... /41
Clase 7serBagent ......................................................................................................................... /4#
Clases E'6(8PC , 2ervidor E'6(8PC ............................................................................................. /48
Clase Fi& ..................................................................................................................................... /67
Driver de Almacenamiento en Cac> ............................................................................................. /71
Re#eren%ia de .elpers (...................................................................................... 2/-
9el&er Arra, ................................................................................................................................ /74
9el&er CAPCC9A .......................................................................................................................... /80
9el&er Coo;ie ............................................................................................................................. /80
9el&er Date ................................................................................................................................ /81
9el&er Director, .......................................................................................................................... /86
9el&er Do=nload ......................................................................................................................... /88
9el&er 1mail ................................................................................................................................ /8.
9el&er $ile .................................................................................................................................. /.0
9el&er $orm ................................................................................................................................ /.
9el&er 9'C6 ............................................................................................................................... 01
9el&er In@lector ........................................................................................................................... 07
9el&er 6anguage ......................................................................................................................... 0.
9el&er 3um*er ............................................................................................................................ 10
9el&er Pat> ................................................................................................................................. 11
9el&er 2ecurit, ............................................................................................................................ 1/
9el&er 2mile, .............................................................................................................................. 1
9el&er 2tring ............................................................................................................................... 18
9el&er Ce<t ................................................................................................................................. 1.
9el&er C,&ogra&>, ...................................................................................................................... //
9el&er 786 .................................................................................................................................. /
9el&er E'6 ................................................................................................................................. /8
0ne1os (............................................................................................................. 32*
Ane<o IG Actuali"ar desde una !ersin Anterior ............................................................................. 0
Ane<o IIG 8egistro de Cam*ios .................................................................................................... 40







Gua del Usuario de CodeIgniter Versin 2.1.3 5

In#or$a%in &'si%a
Gua del Usuario de CodeIgniter Versin 2.1.3 6
&ienvenido a CodeIgniter
CodeIgniter es un @rame=or; &ara desarrollo de a&licaciones ( un con%unto de >erramientas ( &ara gente -ue
constru,e sitios =e* usando P9P. 2u o*%etivo es &ermitirle desarrollar &ro,ectos muc>o m0s r0&ido -ue lo -ue
&odrHa >acer si escri*iera el cdigo desde ceroI &rove,ndole un rico con%unto de *i*liotecas &ara tareas comunesI
asH como , una inter@a" sencilla , una estructura lgica &ara acceder a esas *i*liotecas. CodeIgniter le &ermite
en@ocarse creativamente en su &ro,ecto al minimi"ar la cantidad de cdigo necesaria &ara una tarea dada.
23ara 4uien es CodeIgniter5
CodeIgniter es &ara 7d siG
3ecesita un @rame=or; con una &e-ue+a im&ronta.
3ecesita un desem&e+o e<ce&cional.
3ecesita am&lia com&ati*ilidad con cuentas est0ndar de alo%amiento -ue corren una variedad de versiones
de P9P , con@iguraciones.
3ecesita un @rame=or; -ue casi no necesite con@iguracin.
3ecesita un @rame=or; -ue no le o*ligue a usar la lHnea de comandos.
3ecesita un @rame=or; -ue no le o*ligue a ad-uirir reglas de codi@icacin restrictivas.
3o est0 interesado en *i*liotecas monolHticas de gran tama+o como P1A8.
3o -uiere verse @or"ado a a&render un lengua%e de &lantillas Jaun-ue >a, un motor de &lantillas dis&oni*le
si desea unoK.
1vita la com&le%idadI @avoreciendo las soluciones sim&les.
3ecesita una documentacin clara , com&leta.
Re4uisitos del 6ervidor
P9P versin 4.1.6 o m0s reciente.
2e necesita una *ase de datos en la ma,orHa de los casos de &rogramacin de a&licaciones =e*. 6as *ases
de datos -ue se so&ortan actualmente son ',2L6 J#.1MKI ',2L6iI '2 2L6I PostgresI )racleI 2L6iteI ,
)DBC.
Gua del Usuario de CodeIgniter Versin 2.1.3 7
0%uerdo de 7i%en%ia de CodeIgniter
Co&,rig>t JcK /008 ( /011I 1llis6a*I Inc.
Codos los derec>os reservados.
1sta licencia es un acuerdo legal entre 7d , 1llis6a* Inc. &ara el uso del so@t=are CodeIgniter Jel N2o@t=areNK. Al
o*tener el 2o@t=areI 7d est0 de acuerdo a cum&lir con los trminos , condiciones de esta licencia.
Uso 3er$itido
2e le &ermite usarI co&iarI modi@icar , distri*uir el 2o@t=are , su documentacinI con o sin modi@icacionesI &ara
cual-uier &ro&sitoI siem&re -ue se cum&lan los siguientes re-uisitosG
1. 2e inclu,a una co&ia de esta licencia con la distri*ucin.
/. 6as redistri*uciones del cdigo @uente de*en conservar el aviso de co&,rig>t en todos los arc>ivos de
cdigo @uente.
. 6as redistri*uciones en @ormato *inario de*en re&roducir el aviso de co&,rig>t en la documentacin ,Oo
otros materiales suministrados con la distri*ucin.
#. Codos los arc>ivos -ue >an sido modi@icados de*en llevar avisos indicando la naturale"a de los cam*ios ,
los nom*res de a-uellos -ue los cam*i.
4. 6os &roductos derivados del 2o@t=are de*e incluir un reconocimiento de -ue son derivados de CodeIgniter
en su documentacin ,Oo otros materiales suministrados con la distri*ucin.
6. 6os &roductos derivados del 2o@t=are no se &ueden llamar NCodeIgniterNI ni &uede a&arecer NCodeIgniterN
en su nom*reI sin la &revia autori"acin &or escrito de 1llis6a*I Inc.
Inde$ni8a%in
7sted ace&ta indemni"ar , mantener inocentes a los autores del 2o@t=are , todos los cola*oradores &or los da+os
directosI indirectosI incidentales o consecuentes reclamaciones de tercerosI acciones o demandasI asH como
cual-uier gastoI res&onsa*ilidadesI da+osI asentamientos o cargos derivados de su uso o mal uso del 2o@t=areI o
una violacin de cual-uiera de los trminos de esta licencia.
Renun%ia de Garanta
16 2)$C?A81 21 P8)!11 NC)') 12CPNI 2I3 AA8A3C5A D1 3I3AQ3 CIP)I 1EP812A ) I'P65CICAI
I3C67R13D)I P18) 3) 6I'ICADA AI AA8A3C5A2 D1 CA6IDADI 813DI'I13C)I 3) I3$8ACCIS3I
C)'18CIA6IFACIS3 ) ID)31IDAD PA8A 73 P8)PS2IC) PA8CIC76A8.
7i$ita%iones de Responsa"ilidad
7D A27'1 C)D)2 6)2 8I12A)2 A2)CIAD)2 C)3 6A I32CA6ACIS3 R 72) D1 12C1 2)$C?A81. 13 3I3AQ3
CA2) 6)2 A7C)812 ) C131D)812 D16 C)PR8IA9C D16 2)$C?A81 218P3 812P)32AB612 P)8 81C6A')2I
DAT)2 ) C7A6L7I18 )C8A 812P)32ABI6IDAD L71 21 P81213C1 D1 ) 13 816ACIS3 C)3 16 2)$C?A81. 6)2
C131D)812 D1 6A 6IC13CIA 2)3 812P)32AB612 73ICA'13C1 D1 D1C18'I3A8 6A C)3!13I13CIA D16 72) R
A27'I8 C)D)2 6)2 8I12A)2 A2)CIAD)2 C)3 27 72)I I3C67R13D) P18) 3) 6I'ICAD) A 6)2 8I12A)2 D1
6)2 188)812 D16 P8)A8A'AI DAT) A6 1L7IP)I PU8DIDA D1 DAC)2 ) P8)A8A'A2 D1 2)$C?A81I ) 6A
$A6CA D1 DI2P)3IBI6IDAD ) I3C1887PCIS3 D1 )P18ACI)312.
Gua del Usuario de CodeIgniter Versin 2.1.3 8
Cr9ditos
CodeIgniter @ue desarrollado originalmente &or 8ic; 1llis JC1) de 1llis6a*I Inc.K. 1l @rame=or; se escri*i &ara
o*tener *uen rendimiento en el mundo realI donde muc>as de las *i*liotecas de clasesI >el&ersI , su*sistemas se
tomaron &restados del cdigo *ase de 1<&ression1ngine.
ActualmenteI es el 1-ui&o de Desarrollo de 1<&ression1ngine -uien lo desarrolla , mantiene.
1l desarrollo de vanguardia est0 enca*e"ado &or el selecto gru&o de cola*oradores del 8eactor Ceam.
7na mencin es&ecial &ara 8u*, on 8ails &or ins&irarnos a crear un @rame=or; P9PI &or &oner los @rame=or;s en
la conciencia general de la comunidad =e*.
0%er%a de la Gua de Usuario en Espaol
6a traduccin @ue reali"ada en la &rimavera austral de /01/I li*er0ndola con la es&eran"a de serle :til a -uien la
lea.
)ctu*re de /01/
$ernando VseacatW !elo
seacat.areaXgmail.com
1sta AuHa se distri*u,e con licencia
>tt&GOOcreativecommons.orgOlicensesO*,(saO.0O
Conven%iones !ipogr'#i%as
A lo largo de todo el te<to se usan estas convenciones ti&ogr0@icasG
Ejemplos de cdigo
:otasI advertencias , otras cuestiones de im&ortancia
Rutas ; %lases< appli%ation%on#igroutes.p=p
>un%iones< ?t=is@Aagent@AisB"roCser+,
Varia"les ; %onstantes< ?s;ste$B#older
Constru%%iones del lenguaDe< E=3A
E1presiones desta%adas
Gua del Usuario de CodeIgniter Versin 2.1.3 9
Instala%in
Gua del Usuario de CodeIgniter Versin 2.1.3 10
Fes%argar CodeIgniter
6a :ltima versin de CodeIgniter se &uede descargar de la &0gina =e* >tt&GOO===.codeigniter.com.
Gua del Usuario de CodeIgniter Versin 2.1.3 11
Instru%%iones de Instala%in
CodeIgniter se instala en cuatro &asosG
Descom&rima el &a-uete.
2u*a las car&etas , arc>ivos de CodeIgniter al servidor. 3ormalmente el arc>ivo inde1.p=p ser0 la raH".
A*ra el arc>ivo appli%ation%on#ig%on#ig.p=p con un editor de te<to , esta*le"ca su 786 *ase. 2i
tiene intencin de usar encri&tacin o sesionesI esta*le"ca su clave de encri&tacin.
2i tiene intencin de usar una *ase de datosI a*ra el arc>ivo appli%ation%on#igdata"ase.p=p con un
editor de te<to , esta*le"ca los &ar0metros de la *ase de datos.
2i desea incrementar la seguridad ocultando la u*icacin de sus arc>ivos de CodeIgniterI &uede renom*rar las
car&etas s;ste$ , appli%ation a algo m0s &rivado. 2i los renom*raI tendr0 -ue a*rir su arc>ivo inde1.p=p
&rinci&al , con@igurar las varia*les ?s;ste$B#older , ?appli%ationB#older con los nuevos nom*res -ue >a,a
elegido.
Para ma,or seguridadI las car&etas s;ste$ , cual-uier appli%ation se tendr0n -ue u*icar &or encima de la raH"
=e* &ara -ue no sean accesi*les directamente mediante el navegador. Por de@ecto se inclu,en en cada car&eta un
arc>ivo .=ta%%ess &ara a,udar a evitar el acceso directoI &ero es me%or sacarlos del acceso &:*lico com&letamente
en caso de cam*iar la con@iguracin del servidor =e* o no so&ortar los arc>ivos .=ta%%ess.
Des&us de moverlosI a*ra su arc>ivo inde1.p=p &rinci&al , con@igure las varia*les ?s;ste$B#older ,
?appli%ationB#older &re@eri*lemente con la ruta com&letaI &or e%em&lo YCCC$iBusuarios;ste$Y.
7na medida adicional &ara tomar en los entornos de &roduccin es des>a*ilitar el re&orte de error de P9P ,
cual-uier otra @uncionalidad de&endiente e<clusivamente del desarrollo. 1n CodeIgniterI esto se &uede >acer
con@igurando la constante E:VIRG:HE:!I -ue se descri*e me%or en la &0gina de 2eguridad.
Z1so es todo[
2i 7d es nuevo en CodeIgniterI &or @avor lea la seccin Primeros Pasos de la AuHa del 7suario &ara comen"ar a
a&render como construir a&licaciones P9P din0micas. ZDis@r:telo[
Resolu%in de 3ro"le$as
2i encuentra -ue no im&orta lo -ue &onga en su 786 solamente se carga la &0gina &or de@ectoI es &osi*le -ue su
servidor no so&orte la varia*le 30!.BI:>G necesaria &ara entregar las 786s amiga*les con los motores de
*:s-ueda. Como &rimer &asoI a*ra el arc>ivo appli%ation%on#ig%on#ig.p=p , *us-ue la in@ormacin URI
3roto%ol. 2e recomienda -ue &rue*e un &ar de &ar0metros alternativos. 2i a:n no @unciona des&us de >a*erlo
intentadoI necesitar0 @or"ar a CodeIgniter a agregar un signo de &regunta en sus 786s. Para >acer estoI a*ra el
arc>ivo appli%ation%on#ig%on#ig.p=p , cam*ie estoG
$config['index_page'] = "index.php";
Por estoG
$config['index_page'] = "index.php?";
Gua del Usuario de CodeIgniter Versin 2.1.3 12
Introdu%%in
Gua del Usuario de CodeIgniter Versin 2.1.3 13
3ri$eros 3asos %on CodeIgniter
Cual-uier so@t=are re-uiere de alg:n es@uer"o de a&rendi"a%e. 9emos >ec>o todo lo &osi*le &ara minimi"ar la
curva de a&rendi"a%eI mientras -ue el &roceso sea lo m0s agrada*le &osi*le.
1l &rimer &aso es instalar CodeIgniterI , luego leer todos los temas de la seccin Introdu%%in de la Ca*la de
Contenido.
6o siguiente es leer cada una de las &0ginas de !e$as Generales en orden. Cada tema se *asa en el anterior e
inclu,e e%em&los de cdigo -ue se le anima a &ro*ar.
7na ve" -ue com&rendi lo *0sicoI estar0 listo &ara e<&lorar las &0ginas Re#eren%ia de Clases , Re#eren%ia de
.elpers &ara a&render a usar las *i*liotecas nativas , los arc>ivos de >el&ers.
2intase li*re de a&rovec>ar nuestros $oros de la Comunidad si tiene &reguntas o &ro*lemas , nuestra ?i;i &ara
ver e%em&los de cdigo &u*licados &or otros usuarios.
Gua del Usuario de CodeIgniter Versin 2.1.3 14
CodeIgniter de un Vista8o
CodeIgniter es un >ra$eCorI para 0pli%a%iones
CodeIgniter es un con%unto de >erramientas &ara gente -ue constru,en a&licaciones =e* usando P9P. 2u o*%etivo
es &ermitirle desarrollar &ro,ectos muc>o m0s r0&ido -ue lo -ue &odrHa >acer si escri*iera cdigo desde ceroI al
&roveer un rico con%unto de *i*liotecas &ara tareas com:nmente necesariasI tanto como una inter@a" sencilla , una
estructura lgica &ara acceder a esas *i*liotecas. CodeIgniter le &ermite en@ocarse creativamente en su &ro,ecto al
minimi"ar la cantidad de cdigo necesario &ara una tarea dada.
CodeIgniter es 7i"re
CodeIgniter est0 li*erado *a%o licencias o&en source del estilo A&ac>eOB2DI asH -ue &uede usarlo donde desee.
Para ma,or in@ormacin lea el acuerdo de licencia.
CodeIgniter es 7iviano
1s realmente liviano. 1l n:cleo del sistema slo re-uiere algunas *i*liotecas mu, &e-ue+as. 1sto est0 en marcado
contraste con muc>os @rame=or;s -ue re-uieren muc>os m0s recursos. 6as *i*liotecas adicionales se cargan
din0micamente *a%o &edidoI *asado en sus necesidades &ara un &roceso dadoI &or lo -ue el sistema *ase es mu,
ligero , *astante r0&ido.
CodeIgniter es R'pido
1s verdaderamente r0&ido. 6o desa@iamos a -ue encuentre un @rame=or; -ue tenga me%or desem&e+o -ue
CodeIgniter.
CodeIgniter Usa H@V@C
CodeIgniter usa el en@o-ue 'odelo(!ista(ControladorI -ue &ermite una gran se&aracin entre la lgica , la
&resentacin. 1s &articularmente *ueno &ara &ro,ectos en los -ue los dise+adores tra*a%an en sus arc>ivos de
&lantillasI ,a -ue el cdigo en estos arc>ivos ser0 mHnimo. Descri*imos '!C en m0s detalle en su &ro&ia &0gina.
CodeIgniter Genera UR7s Claras
6as 786s generadas &or CodeIgniter son claras , amiga*les con los motores de *:s-ueda. 1n lugar de usar el
en@o-ue est0ndar N-uer, stringN caracterHstico de sistemas din0micosI CodeIgniter usa el en@o-ue *asado en
segmentosG
ejemplo.com/noticias/articulo/345
:ota< Por de@ecto el arc>ivo inde1.p=p est0 incluido en la 786 &ero se &uede -uitarlo usando un sencillo arc>ivo
.=ta%%ess.
CodeIgniter !rae un Hontn de 3a4uetes
CodeIgniter viene con una gama com&leta de *i*liotecas -ue @acilitan las tareas de desarrollo =e* m0s
com:nmente usadasI como acceso a *ase de datosI envHo de correo electrnicoI validacin de datos de
@ormulariosI mane%o de sesionesI mani&ulacin de im0genesI tra*a%o con datos E'6(8PC , muc>o m0s.
CodeIgniter es E1tensi"le
1l sistema se &uede e<tender @0cilmente a travs de sus &ro&ias *i*liotecasI >el&ersI e<tensiones de clases o
Gua del Usuario de CodeIgniter Versin 2.1.3 15
sistema de >oo;s.
CodeIgniter :o :e%esita un Hotor de 3lantillas
Aun-ue CodeIgniter viene con un sencillo motor de &lantillas -ue se &uede usar o&cionalmenteI 7d no est0 @or"ado
a usar uno. 6os 'otores de Plantillas sim&lemente no &ueden igualar el desem&e+o del P9P nativoI , la sinta<is
-ue >a, -ue a&render &ara usar un motor de &lantillas normalmente es solo marginalmente m0s @0cil -ue a&render
los @undamentos de P9P. Considere este *lo-ue de cdigo P9PG
<ul>
<?php foreach ($addressbook as $name):?>
<li><?=$name?></li>
<?php endforeach; ?>
</ul>
Com&0relo con el seudo(cdigo usado &or un motor de &lantillasG
<ul>
{foreach from=$addressbook item="name"}
<li>{$name}</li>
{/foreach}
</ul>
2HI el e%em&lo del motor de &lantillas es un &oco m0s claroI &ero viene con el &recio del desem&e+o ,a -ue >a, -ue
convertir el seudo(cdigo de vuelta en P9P &ara e%ecutarlo. Como uno de nuestros o*%etivos es m0<imo
desem&e+oI o&tamos &or no o*ligar a usar un motor de &lantillas.
CodeIgniter est' Co$pleta$ente Fo%u$entado
6os &rogramadores aman &rogramar , odian escri*ir documentacin. 3o somos di@erentesI &or su&uestoI &ero
como la documentacin es tan i$portante como el cdigo en sH mismoI estamos com&rometidos a >acerlo.
3uestro cdigo @uente es e<tremadamente claro , *ien comentado tam*in.
CodeIgniter tiene una 0$iga"le Co$unidad de Usuarios
Puede encontrar a nuestra creciente comunidad de usuarios &artici&ando de nuestros $oros de la Comunidad.
Gua del Usuario de CodeIgniter Versin 2.1.3 16
>un%ionalidades de CodeIgniter
6as @uncionalidades &or sH mismas son una @orma mu, &o*re de %u"gar a una a&licacinI ,a -ue no dicen nada
acerca de la e<&eriencia del usuarioI o si est0 dise+ada intuitiva e inteligentemente. 6as @uncionalidades no revelan
nada acerca de la calidad del cdigo o su rendimientoI atencin a los detalles o las &r0cticas de seguridad. 6a :nica
@orma real de %u"gar una a&licacin es &ro*arla , llegar a conocer su cdigo. Instalar CodeIgniter es un %uego de
ni+osI &or lo -ue lo animamos a >acerlo. Por el momentoI esta es la lista de @uncionalidades &rinci&ales de
CodeIgniter.
2istema *asado en 'odelo(!ista(Controlador
1<tremadamente liviano
Clases de *ase de datos con so&orte &ara varias &lata@ormas
2o&orte &ara *ase de datos con Active 8ecord
!alidacin de datos , @ormularios
2eguridad , @iltrado E22
Administracin de sesiones
Clase &ara enviar 1mail. 2o&orta ad%untosI 1mail de 9C'6OCe<toI varios &rotocolos JsendmailI 2'CPI ,
'ailK , m0s.
Bi*lioteca de mani&ulacin de im0genes JrecorteI redimensinI rotacinI etcK. 2o&orta ADI Image'agic;I ,
3etPB'
Clase &ara su*ir arc>ivos
Clase &ara $CP
6ocali"acin
Paginacin
1ncri&tacin de datos
1valuacin de rendimiento
Cac> de &0gina com&leta
9istorial de errores
Per@ilado de la a&licacin
Clase &ara Calendarios
Clase &ara Agente del 7suario
Clase &ara codi@icacin Fi&
Clase de motor de &lantillas
Clase &ara Crac;*ac;
Bi*lioteca E'6(8PC
Clase &ara &rue*as de unidad
786s amiga*les &ara los motores de *:s-ueda
8uteo 78I @le<i*le
2o&orte &ara >oo;s , e<tensiones de clase
Am&lia *i*lioteca de @unciones N>el&erN
Gua del Usuario de CodeIgniter Versin 2.1.3 17
Fiagra$a de >luDo de la 0pli%a%in
1l siguiente gr0@ico ilustra como los datos @lu,en a travs del sistemaG
1. 1l inde1.p=p sirve como el controlador @rontalI iniciali"ando los recursos *0sicos -ue necesita CodeIgniter
&ara e%ecutar.
/. 1l 8uteador e<amina la solicitud 9CCP &ara determinar -ue de*erHa >acer con ella.
. 2i e<iste el arc>ivo de cac>I se lo envHa directamente al navegadorI sin &asar &or la e%ecucin normal del
sistema.
#. 2eguridad. Antes -ue se cargue el controlador de la a&licacinI &or ra"ones de seguridad se @iltran la
solicitud 9CCP , cual-uier otro dato enviado &or el usuarios.
4. 1l controlador carga el modeloI las *i*liotecas del n:cleoI >el&ersI , cual-uier otro recurso re-uerido &ara
&rocesar una solicitud es&ecH@ica.
6. 6a !ista terminada se &rocesa , se envHa al navegador &ara -ue se &ueda ver. 2i el cac> est0 >a*ilitadoI
la vista se cac>ea &rimero &ara -ue las siguientes solicitudes -ue la necesiten &uedan ser servidas.
Gua del Usuario de CodeIgniter Versin 2.1.3 18
Hodelo@Vista@Controlador
CodeIgniter est0 *asado en el &atrn de desarrollo 'odelo(!ista(Controlador. '!C es un en@o-ue de so@t=are -ue
se&ara la lgica de la a&licacin de la &resentacin. 1n la &r0cticaI le &ermite a sus &0ginas =e* contener mHnimo
cdigo ,a -ue la &resentacin est0 se&arada del cdigo P9P.
1l Hodelo re&resenta sus estructuras de datos. Ci&icamente sus clases del modelo contendr0n @unciones
-ue los a,udar0n a devolverI insertar , actuali"ar in@ormacin de su *ase de datos.
6a Vista es la in@ormacin -ue se &resenta al usuario. 7na vista ser0 normalmente una &0gina =e*I &ero
en CodeIgniterI una vista tam*in &uede ser un @ragmento de &0gina como el enca*e"ado o &ie de &0gina.
Cam*in &uede ser una &0gina 822I o cual-uier otro ti&o de N&0ginaN.
1l Controlador sirve como un intermediario entre el 'odeloI la !ista , cual-uier otro recurso necesario
&ara &rocesar la solicitud 9CCP , generar una &0gina =e*.
CodeIgniter tiene un en@o-ue *astante &oco estricto de '!CI ,a -ue los 'odelos no son o*ligatorios. 2i no
necesita la se&aracin a+adida o encuentra -ue mantener modelos re-uiere m0s com&le%idad de la -ue -uiereI
&uede ignorarlos , construir su a&licacin mHnimamente usando Controladores , !istas. CodeIgniter tam*in le
&ermite incor&orar sus &ro&ios scri&tsI o inclusive desarrollar *i*liotecas del n:cleo &ara el sistemaI &ermitindole
tra*a%ar en una @orma -ue tenga m0s sentido &ara 7d.
Gua del Usuario de CodeIgniter Versin 2.1.3 19
G"Detivos de Fiseo ; 0r4uite%tura
3uestro o*%etivo &ara CodeIgniter es $'1i$o dese$peoJ %apa%idad ; #le1i"ilidad en el pa4uete $'s
pe4ueo ; ligero posi"le.
Para alcan"ar esta meta nos com&rometemos a usar evaluaciones de desem&e+oI a re@actori"ar , sim&li@icar cada
&aso del &roceso de desarrollo rec>a"ando cual-uier cosa -ue nos ale%e del o*%etivo esta*lecido.
Desde el &unto de vista tcnico , ar-uitectnicoI CodeIgniter se cre con los siguientes o*%etivosG
Insta%ia%in Fin'$i%a. 1n CodeIgniterI los com&onentes se cargan , las rutinas se e%ecutan solamente
cuando se necesitaI en lugar de >acerlo glo*almente. 3o se >acen su&osiciones &ara el sistema res&ecto a
lo -ue &uede ser necesario m0s all0 de los mHnimos recursos del n:cleoI &or lo -ue el sistema es mu,
liviano &or de@ecto. 6os eventosI dis&arados &or la solicitud 9CCPI los controladores , las vistas -ue 7d
dise+e determinar0n lo -ue se invo-ue.
3o%o 0%opla$iento. 1l aco&lamiento es el grado en -ue los com&onentes de un sistema de&enden unos
de otros. 'ientras menos com&onentes de&endan unos de otrosI m0s reusa*le , @le<i*le ser0 el sistema.
3uestro o*%etivo @ue un sistema mu, &oco aco&lado.
6ingularidad de Co$ponentes. 6a singularidad es el grado en -ue los com&onentes tienen un
&ro&sito mu, es&ecH@ico. 1n CodeIgniterI cada clase , sus @unciones son mu, autnomas a @in de &ermitir
la m0<ima utilidad.
CodeIgniter es un sistema instanciado din0micamenteI &oco aco&lado con alta singularidad de com&onentes. 2e
es@uer"a &or ser sim&leI @le<i*le , tener alto desem&e+o en un &a-uete de tama+o reducido.
Gua del Usuario de CodeIgniter Versin 2.1.3 20
!utorial
Gua del Usuario de CodeIgniter Versin 2.1.3 21
Introdu%%in
1ste tutorial est0 &ensado &ara &resentarle el @rame=or; CodeIgniter , los &rinci&ios *0sicos de la ar-uitectura
'!C. 6e mostrar0 cmo se constru,e &aso a &aso una a&licacin CodeIgniter *0sica.
1n este tutorial 7d crear0 una apli%a%in "'si%a de noti%ias. Comen"ar0 escri*iendo el cdigo -ue carga
&0ginas est0ticas. 6uego crear0 una seccin de noticias -ue lee Htems de noticias desde una *ase de datos.
$inalmenteI agregar0 un @ormulario &ara crear Htems de noticias a la *ase de datos.
1ste tutorial se en@ocar0 &rinci&almente enG
$undamentos de 'odelo(!ista(Controlador
$undamentos del 8uteo
!alidacin de @ormularios
1%ecucin de consultas *0sica de *ase de datos usando el NActive 8ecordN
1l tutorial com&leto est0 se&arado en varias &0ginasI cada una e<&licando una &arte &e-ue+a del @rame=or;
CodeIgniter. !isitar0 las siguientes &0ginasG
IntroduccinI esta &0ginaI -ue le da un vista"o general de lo -ue viene.
P0ginas 1st0ticasI -ue le ense+a lo *0sico de los controladoresI vistas , ruteo.
2eccin de 3oticiasI donde em&e"ar0 a usar los modelos , >ar0 algunas o&eraciones *0sicas de *ase de
datos.
Crear 5tems de 3oticiasI -ue le mostrar0 o&eraciones m0s avan"adas de *ase de datos , validacin de
@ormularios.
ConclusinI -ue le dar0 algunas indicaciones de lecturas &osteriores , otros recursos.
Dis@rute la e<&licacin del @rame=or; CodeIgniter.
Gua del Usuario de CodeIgniter Versin 2.1.3 22
3'ginas Est'ti%as
:ote< 1ste tutorial asume -ue ,a descarg e instal el @rame=or; CodeIgniter en su entorno de desarrollo.
6a &rimera cosa -ue >ar0 es con@igurar un controlador &ara mane%ar &0ginas est0ticas. 7n controlador es
sim&lemente una clase -ue a,uda a delegar tra*a%o. 1s el n:cleo de su a&licacin =e*.
Por e%em&loI cuando se >ace una llamada aG
http://ejemplo.com/noticias/ultimas/10
Podemos imaginar -ue >a, un controlador llamado noti%ias. 1l mtodo -ue se llama en noti%ias serHa ulti$as.
1l tra*a%o del mtodo de noti%ias &odrHa ser tomar 10 Htems de noticias , mostrarlos en la &0gina. 'u, a menudo
en '!CI ver0 &atrones de 786 -ue con coincidan conG
http://ejemplo.com/[clase-controlador]/[mtodo-controlador]/[argumentos]
Cuando el es-uema de 786 se >ace m0s com&le%oI esto &uede cam*iar. Pero &or a>oraI esto es todo lo -ue
necesitamos sa*er.
Crear un arc>ivo en appli%ation%ontrollerspages.p=p con el siguiente cdigoG

<?php
class Pages extends CI_Controller {
public function view($page = 'home')
{
}
}
2e cre una clase llamada 3agesI con un mtodo vieC -ue ace&ta un solo argumento llamado ?page. 6a clase
3ages se e<tiende de la clase CIBController. 1sto signi@ica -ue la nueva clase 3ages &uede acceder a los
mtodos , varia*les de@inidos en la clase CIBController (s;ste$%oreController.p=p).
El %ontrolador es lo 4ue se %onvertir' en el %entro de %ada soli%itud de su a&licacin =e*. 1n discusiones
mu, tcnicas de CodeIgniterI esto &uede re@erirse como el su&er o*%eto. Como cual-uier otra clase de P9PI se
re@erir0 a ella dentro de sus controladores como ?t=is. 8e@erirse a ?t=is es como cargar0 *i*liotecasI vistas ,
como generalmente utili"ar0 el @rame=or;.
A>ora -ue >a creado su &rimer mtodoI es momento de >acer alguna &lantilla *0sica de &0gina. Crearemos dos
VvistasW J&lantillas de &0ginasK -ue act:an como su enca*e"ado , &ie de &0gina.
Cree el enca*e"ado en appli%ationvieCste$plates=eader.p=p , agregarle este cdigoG

<html>
<head>
<title><?php echo $title ?> - Tutorial de CodeIgniter 2</title>
</head>
<body>
<h1>Tutorial de CodeIgniter 2</h1>
Gua del Usuario de CodeIgniter Versin 2.1.3 23
1l enca*e"ado contiene cdigo 9C'6 *0sico -ue mostrar0 antes de cargar la vista &rinci&alI %unto al enca*e"ado.
Cam*in mostrar0 la varia*le ?titleI -ue de@iniremos luego en el controlador. A>oraI cree el &ie de &0gina en
appli%ationvieCste$plates#ooter.p=p e inclu,a este cdigoG

<strong>&copy; 2012</strong>
</body>
</html>
0gregar lgi%a al %ontrolador
Con anterioridadI esta*lecimos un controlador con el mtodo vieC+,. 1l mtodo ace&ta un &ar0metroI -ue es el
nom*re de la &0gina a cargar. 6as &lantillas de &0ginas est0ticas se locali"ar0n en el directorio
appli%ationvieCspages.
1n ese directorioI cree dos arc>ivos llamados =o$e.p=p , a"out.p=p. Dentro de ellos escri*a alg:n te<to \ lo
-ue -uiera \ , gu0rdelos. 2i no -uiere ser &articularmente originalI escri*a N9ola 'undo[N.
Para cargar esas &0ginasI tiene -ue veri@icar si la &0gina solicitada realmente e<isteG
public function view($page = 'home')
{
if ( ! file_exists('application/views/pages/'.$page.'.php'))
{
// Oh, oh... no tenemos una pagina para esto!
show_404();
}
$data['title'] = ucfirst($page); // Capitaliza la primera letra
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
A>oraI cuando la &0gina e<istaI se la cargar0 inclu,endo el enca*e"ado , el &ie , se la mostrar0 al usuario. 2i la
&0gina no e<isteI se mostrar0 el error N#0# Page not @oundN J&0gina no encontradaK.
6a &rimera lHnea de este mtodo veri@ica si la &0gina e<iste realmente. 2e usa la @uncin nativa de P9P
#ileBe1ists+, &ara veri@icar si el arc>ivo est0 donde se es&era -ue est. s=oCB-0-+, es una @uncin interna de
CodeIgniter -ue &resenta la &0gina de error &or de@ecto.
1n la &lantilla del enca*e"adoI la varia*le ?title se usa &ara &ersonali"ar el tHtulo de la &0gina. 1l valor de ?title se
de@ine en el mtodoI &ero en lugar de asignarle el valor a una varia*leI se asigna al elemento title en el arra,
?data.
6a :ltima cosa -ue tiene -ue >acer es cargar las vistas en el orden en -ue se mostrar0n. 1l segundo &ar0metro en
el mtodo vieC+, se usa &ara &asar valores a la vista. Cada valor en el arra, ?data se asigna a una varia*le con
el nom*re de su clave. Por lo tantoI el valor de ?dataKLtitleLM en el controlador es e-uivalente a ?title en la vista.
Ruteo
Z1l controlador a>ora est0 @uncionando[ A&unte su navegador a Kurl@de@su@sitioMinde1.p=ppagesvieC &ara
ver la &0gina. Al visitar inde1.p=ppagesvieCa"out ver0 la &0gina acercaI inclu,endo el enca*e"ado , el &ie
de &0gina.
Gua del Usuario de CodeIgniter Versin 2.1.3 24
Al usar reglas de ruteo &ersonali"adasI 7d tiene el &oder de ma&ear cual-uier 78I a cual-uier controlador ,
mtodoI li*er0ndose de la convencin normalG
http://ejemplo.com/[clase-controlador]/[mtodo-controlador]/[argumentos]
9agamos eso. A*ra el arc>ivo de ruteo locali"ado en appli%ation%on#igroutes.p=p , agregue las siguientes
dos lHneas. Luite el resto del cdigo , esta*le"ca cual-uier elemento en el arra, ?route.
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
CodeIgniter lee sus reglas de ruteo de arri*a >acia a*a%o , rutea las solicitudes a la &rimer regla -ue coincide.
Cada regla es una e<&resin regular Jlado i"-uierdoK ma&eada al nom*re de controlador , mtodo se&arados &or
*arras Jlado derec>oK. Cuando ingresa una solicitudI CodeIgniter *usca la &rimer coincidenciaI , llama al
controlador , mtodos adecuadosI &osi*lemente con argumentos.
Puede encontrar m0s in@ormacin acerca del ruteo en la documentacin del 8uteo 78I.
A-uHI la segunda regla en el arra, ?routes coincide con cual-uier solicitud -ue use el comodHn JGan,K , &asa el
&ar0metro al mtodo vieC+, de la clase 3ages.
A>ora visite inde1.p=pa"out. ]2e rute correctamente al mtodo vieC+, en el controlador de &0ginas^
Z'aravilloso[

Gua del Usuario de CodeIgniter Versin 2.1.3 25
6e%%in de noti%ias
1n la :ltima seccinI vimos algunos conce&tos *0sicos del @rame=or; &ara escri*ir una clase -ue incluHa &0ginas
est0ticas. Cam*in re@ormamos la 78I al agregar reglas de ruteo &ersonali"adas. A>ora es momento de introducir
contenido din0mico , comen"ar a usar la *ase de datos.
Con#igurar su $odelo
1n lugar de escri*ir o&eraciones de *ase de datos directamente en el controladorI las consultas de*erHan u*icarse
en un modeloI &ara -ue se &uedan reusar m0s tarde con @acilidad. 6os modelos son el lugar donde se devuelveI
inserta , actuali"a la in@ormacin de la *ase de datos u otros almacenamientos. 1llos re&resentan sus datos.
A*ra el directorio appli%ation$odelsI cree un arc>ivo nuevo llamado neCsB$odel.p=p , agregue el siguiente
cdigo. Aseg:rese de >a*er con@igurado adecuadamente su *ase de datos como se descri*e en la seccin
Con@iguracin de la Base de Datos.
<?php
class News_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
}
1ste cdigo se ve similar al cdigo del controlador -ue usamos antes. Crea un nuevo modelo al e<tender
CIBHodel , carga la *i*lioteca data*ase. 1sto >ace -ue la clase Fata"ase est dis&oni*le mediante el o*%eto
?t=is@Ad".
Antes de consultar la *ase de datosI se tiene -ue crear un es-uema de *ase de datos. Conecte a su *ase de datos
, e%ecute los comandos 2L6 siguientes. Agregue tam*in algunos registros.
CREATE TABLE news (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(128) NOT NULL,
slug varchar(128) NOT NULL,
text text NOT NULL,
PRIMARY KEY (id),
KEY slug (slug)
);
A>ora -ue se con@iguraron la *ase de datos , el modeloI necesitar0 un mtodo &ara o*tener todos los mensa%es
desde la *ase de datos. Para >acer esto se usa la ca&a de a*straccin de *ase de datos -ue se inclu,e con
CodeIgniter _ el Active 8ecord. Uste >ace &osi*le escri*ir sus VconsultasW una ve" , usarlas luego en todos los
sistemas so&ortados de *ases de datos. Agregue este cdigo a su modelo.
public function get_news($slug = FALSE)
{
if ($slug === FALSE)
{
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
Gua del Usuario de CodeIgniter Versin 2.1.3 26
return $query->row_array();
}
Con este cdigo &uede reali"ar dos consultas di@erentes. Puede o*tener todos los registros de noticiasI o *ien
o*tener un Htem de noticias mediante su identi@icador. Ciene -ue advertir -ue la varia*le ?slug no se descontamin
antes de e%ecutar la consulta` el Active 8ecord >ace esto &or 7d.
Hostrar las noti%ias
A>ora -ue se escri*ieron las consultasI el modelo de*erHa vincularse a las vistas -ue van a mostrar los Htems de
noticias al usuario. 1sto se &uede >acer en su controlador de &0ginas creado anteriormenteI &ero en aras de la
claridadI de@inimos un nuevo controlador neCs. Cree el nuevo controlador en
appli%ation%ontrollersneCs.p=p.
<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
}
public function index()
{
$data['news'] = $this->news_model->get_news();
}
public function view($slug)
{
$data['news'] = $this->news_model->get_news($slug);
}
}
'irando el cdigoI &uede verse alguna similitud con los arc>ivos -ue creamos anteriormente. PrimeroI el mtodo
BB%onstru%tG llama al constructor de su clase &adre JCIBControllerK , carga el modeloI &or lo -ue se lo &uede
usar en todos los dem0s mtodos de este controlador.
6o siguiente son los dos mtodos &ara ver todos los Htems de noticias , uno &ara ver un Htem es&ecH@ico. Puede ver
-ue la varia*le ?slug se &asa al mtodo del modelo en el segundo mtodo. 1l modelo est0 usando esta varia*le
&ara identi@icar el Htem de noticias a devolver.
A>oraI el controlador devuelve los datos mediante el modeloI &ero todavHa no se muestra nada. 6a siguiente cosa a
>acer es &asar estos datos a las vistas.
public function index()
{
$data['news'] = $this->news_model->get_news();
$data['title'] = 'Archivo de noticias';
$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
}
1l cdigo anterior o*tiene todos los registros de noticias desde el modelo , lo asigna a una varia*le. 1l valor &ara el
Gua del Usuario de CodeIgniter Versin 2.1.3 27
tHtulo tam*in se asigna al elemento ?dataKLtitleLM , todos los datos se &asan a las vistas. A>ora necesita crear
una vista &ara &resentar los Htems de noticias. Cree appli%ationvieCsneCsinde1.p=p , agregue la siguiente
&orcin de cdigo.
<?php foreach ($news as $news_item): ?>
<h2><?php echo $news_item['title'] ?></h2>
<div id="main">
<?php echo $news_item['text'] ?>
</div>
<p><a href="news/<?php echo $news_item['slug'] ?>">Ver artculo</a></p>
<?php endforeach ?>
A-uHI cada Htem de noticias se cicla , muestra al usuario. Puede ver -ue escri*imos nuestra &lantilla en una me"cla
de P9P , 9C'6. 2i &re@iere usar un lengua%e de &lantillasI &uede usar la clase del Anali"ador de Plantillas de
CodeIgniter o un anali"ador de terceras &artes.
Ra est0 >ec>a la &0gina -ue muestra las noticias en generalI &ero todavHa @alta una &0gina &ara mostrar Htems de
noticias individuales. 1l modelo creado anteriormente se >i"o de tal @orma -ue se &uede usar @0cilmente &ara esta
@uncionalidad. 2olo tiene -ue agregar algo de cdigo al controlador , crear una nueva vista. 8egrese al controlador
de noticias , agregue estas lHneas de cdigo al arc>ivo.
public function view($slug)
{
$data['news_item'] = $this->news_model->get_news($slug);
if (empty($data['news_item']))
{
show_404();
}
$data['title'] = $data['news_item']['title'];
$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}
1n lugar de llamar al mtodo getBneCs+, sin &ar0metrosI se &asa la varia*le ?slug &ara -ue devuelva un Htem
de noticias es&ecH@ico. 6a :nica cosa -ue -ueda &or >acer es crear la vista corres&ondiente en
appli%ationvieCsneCsvieC.p=p. Ponga el siguiente cdigo en un arc>ivo.
<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];
Ruteo
De*ido a la regla de ruteo con comodHn creada anteriormenteI se necesita una ruta adicional &ara ver el
controlador -ue aca*amos de >acer. 'odi@i-ue el arc>ivo de ruteo Jappli%ation%on#igroutes.p=pK &ara -ue se
vea como se muestra a continuacin. 1sto asegura -ue las solicitudes alcancen al controlador de noticiasI en lugar
de ir directamente al controlador de &0ginas. 6as &rimera lHnea rutea las 78IYs con un slug al mtodo vieC+, en el
controlador neCs.
Gua del Usuario de CodeIgniter Versin 2.1.3 28
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
A&unte su navegador a la raH" de documentos seguido de inde1.p=pneCs , vea sus &0ginas de noticias.
Gua del Usuario de CodeIgniter Versin 2.1.3 29
Crear te$s de noti%ias
A>ora 7d sa*e como leer datos desde una *ase de datos usando CodeIgniterI &ero todavHa no escri*i ninguna
in@ormacin en ella. 1n esta seccin e<&andiremos nuestros controlador de noticias , modelo creados
anteriormente &ara incluir esta @uncionalidad.
Crear un #or$ulario
Para ingresar datos en la *ase de datosI necesita crear un @ormulario donde &ueda ingresar la in@ormacin a
almacenarse. 1sto signi@ica -ue necesitaremos un @ormulario con dos cam&osI uno &ara el tHtulo , otro &ara el
te<to. Derivaremos el identi@icador de nuestro tHtulo en el modelo. Cree la nueva vista en
appli%ationvieCsneCs%reate.p=p.
<h2>Create a news item</h2>
<?php echo validation_errors(); ?>
<?php echo form_open('news/create') ?>
<label for="title">Ttulo</label>
<input type="input" name="title" /><br />
<label for="text">Texto</label>
<textarea name="text"></textarea><br />
<input type="submit" name="submit" value="Crear tem de noticias" />
</form>
6as :nicas dos cosas a-uH -ue &ro*a*lemente no se vean @amiliares sonG las @unciones #or$Bopen+, ,
validationBerrors+,.
6a &rimera @uncin la &rovee el >el&er @orm , &resenta el elemento @orm , agrega @uncionalidad adicionalI como un
cam&o oculto &ara evitar la C6R> Jdel ingls Cross(2ite 8e-uest $orger, o @alsi@icacin de solicitud de sitios
cru"adosK. 6a :ltima se usa &ara in@ormar errores relacionados a la validacin del @ormulario.
!uelva atr0s a su controlador de noticias. !amos a >acer dos cosas a-uHI veri@icar si el @ormulario @ue enviado , si
los datos enviados &asaron las reglas de validacin. 7saremos la *i*lioteca de validacin de @ormularios &ara >acer
esto.
public function create()
{
$this->load->helper('form');
$this->load->library('form_validation');
$data['title'] = 'Crear un tem de noticias';
$this->form_validation->set_rules('title', 'Ttulo', 'required');
$this->form_validation->set_rules('text', 'Texto', 'required');
if ($this->form_validation->run() === FALSE)
{
$this->load->view('templates/header', $data);
$this->load->view('news/create');
$this->load->view('templates/footer');
}
Gua del Usuario de CodeIgniter Versin 2.1.3 30
else
{
$this->news_model->set_news();
$this->load->view('news/success');
}
}
1l cdigo anterior agrega un montn de @uncionalidad. 6as &rimeras lHneas cargan el >el&er @orm , la *i*lioteca de
validacin de @ormularios. Des&us de esoI se esta*lecen las reglas &ara la validacin del @ormulario. 1l mtodo
setBrules+, toma tres argumentosG el nom*re del cam&o de entradaI el nom*re a usarse en los mensa%es de error
, la regla. 1n este casoI los cam&os tHtulo , te<to son o*ligatorios.
CodeIgniter tiene una &oderosa *i*lioteca de validacin de @ormularios como se demostr antes. Puede leer m0s
acerca de esta *i*lioteca en la seccin corres&ondiente a la clase >or$Bvalidation.
'0s a*a%oI se &uede ver una condicin -ue veri@ica si la validacin del @ormulario se e%ecut correctamente. 2i noI
se muestra el @ormularioI si se envi , se &asaron todas las reglasI se llama al modelo. Des&us de estoI se carga
una vista &ara mostrar el mensa%e de <ito. Cree una vista en appli%ationvieCneCssu%%ess.p=p , escri*a
un mensa%e de <ito.
Hodelo
6a :nica cosa -ue -ueda es escri*ir un mtodo -ue escri*a los datos en la *ase de datos. 7saremos la clase
0%tive Re%ord &ara insertar la in@ormacin , usaremos la *i*lioteca Input &ara o*tener los datos &u*licados.
A*ra el modelo creado anteriormente , agregue lo siguienteG
public function set_news()
{
$this->load->helper('url');
$slug = url_title($this->input->post('title'), 'dash', TRUE);
$data = array(
'title' => $this->input->post('title'),
'slug' => $slug,
'text' => $this->input->post('text')
);
return $this->db->insert('news', $data);
}
1ste nuevo mtodo se encarga de insertar el Htem de noticias en la *ase de datos. 6a tercera lHnea contiene una
nueva @uncinI urlBtitle+,. 1sta @uncin \ &rovista &or el >el&er 786 \ desarma la cadena -ue se le &asaI
reem&la"ando todos los es&acios &or guiones J(K , asegurando -ue todos los caracteres estn min:sculas. 1sto le
de%a un *onito identi@icadorI &er@ecto &ara crear 78Is.
Continuemos con la &re&aracin del registro -ue se insertar0 luegoI dentro del arra, ?data. Cada elemento
corres&onde con una columna en la ta*la de la *ase de datos creada anteriormente. A-uH &uede advertir un nuevo
mtodo llamado post+, de la *i*lioteca Input. 1ste mtodo se asegura -ue los datos se descontaminenI
&rotegindolo a 7d de desagrada*les ata-ues de terceros. 6a *i*lioteca Input se carga &or de@ecto. Por :ltimoI
insertamos nuestro arra, ?data en la *ase de datos.
Ruteo
Antes -ue &ueda comen"ar a agregar Htems de noticias en su a&licacin CodeIgniterI 7d tiene -ue agregar una
regla adicional en el arc>ivo %on#igroutes.p=p. Aseg:rese -ue el arc>ivo contenga lo siguiente. 1sto asegura
Gua del Usuario de CodeIgniter Versin 2.1.3 31
-ue CodeIgniter vea a YcreateY como un mtodoI en lugar de un slug de Htem de noticias.
$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
A>ora a&unte su navegador a su entorno de desarrollo local donde instal CodeIgniter , agregue
inde1.p=pneCs%reate a la 786. Z$elicitacionesI aca*a de crear su &rimera a&licacin CodeIgniter[ Agregue
alguna noticia , consulte las distintas &0ginas -ue cre.

Gua del Usuario de CodeIgniter Versin 2.1.3 32
Con%lusin
1ste tutorial no cu*re todas las cosas -ue &uede es&erar de un sistema de administracin de contenidos
com&letamente desarrolladoI &ero le &resenta los t&icos m0s im&ortantes de ruteoI escritura de controladores ,
modelos. 1s&eramos -ue este tutorial le >a,a dado una idea de algunos de los &atrones de dise+o *0sicos de
CodeIgniterI los cuales &uede am&liar.
A>ora -ue com&let este tutorialI le recomendamos -ue consulte el resto de la documentacin. CodeIgniter es a
menudo elogiado &or su am&lia documentacin. 7se esto como una venta%a , lea a @ondo las secciones
NIntroduccinN , NCemas AeneralesN. De*erHa leer las re@erencias de clases , >el&ers cuando las necesite.
Cual-uier &rogramador P9P intermedio de*erHa ser ca&a" de encontrarle la vuelta a CodeIgniter en &ocos dHas.
2i todavHa tiene &reguntas acerca del @rame=or; o de su &ro&io cdigo CodeIgniterI &uedeG
Consultar nuestro @oro
!isitar nuestra sala de c>at I8C
1<&lorar nuestra ?i;i
Gua del Usuario de CodeIgniter Versin 2.1.3 33
!e$as Generales
Gua del Usuario de CodeIgniter Versin 2.1.3 34
7as UR7s de CodeIgniter
Por de@ectoI las 786s en CodeIgniter se dise+an &ara ser amiga*les con los motores de *:s-ueda , las &ersonas.
1n lugar de usar el en@o-ue est0ndar de las N-uer, stringN &ara las 786s -ue es sinnimo de sistemas din0micosI
CodeIgniter usa el en@o-ue "asado en seg$entosG
ejemplo.com/noticias/articulo/mi_articulo
:ota< Como se ver0 m0s adelanteI o&cionalmente se &ueden >a*ilitar las -uer, strings de 786s.
6eg$entos URI
2iguiendo el en@o-ue 'odelo(!ista(ControladorI los segmentos en la 786 normalmente re&resentanG
ejemplo.com/clase/funcin/ID
1. 1l &rimer segmento re&resenta la %lase del controlador -ue se de*erHa invocar.
/. 1l segundo segmento re&resenta la #un%in de la claseI o mtodo -ue se de*erHa llamar.
. 1l tercer , cual-uier otro segmentos adicionalesI re&resenta el ID , cual-uier varia*le -ue se &asar0 al
controlador.
6a Clase 78I , el 9el&er de 786 contienen @unciones -ue >acen @0cil tra*a%ar con datos de 78I. Adem0s &ara
ma,or @le<i*ilidadI sus 786s se &ueden rema&ear usando la @uncionalidad de 8uteo de 78I.
Nuitar el ar%=ivo inde1.p=p
Por de@ectoI el arc>ivo inde1.p=p estar0 incluido en sus 786sG
ejemplo.com/index.pp/noticias/articulo/mi_articulo
2e &uede -uitar @0cilmente este arc>ivo usando un arc>ivo .=ta%%ess con algunas reglas sim&les. A-uH >a, un
e%em&lo de tal arc>ivoI usando el mtodo NnegativoN donde todo se redirecciona e<ce&to los Htems es&eci@icadosG
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
1n el e%em&lo anteriorI cual-uier solicitud 9CCP distinta de inde1.p=pI im0genesI , ro"ots.t1t se trata como una
solicitud a su arc>ivo inde1.p=p.
0gregar un 6u#iDo a una UR7
1n su arc>ivo appli%ation%on#ig%on#ig.p=p &uede es&eci@icar un su@i%o -ue se agregar0 a todas las 786s
generadas &or CodeIgniter. Por e%em&loI si tiene esta 786G
ejemplo.com/index.php/productos/ver/zapatos
Puede agregar o&cionalmente un su@i%oI tal como .=t$lI >aciendo -ue la &0gina &are"ca ser de un cierto ti&oG
Gua del Usuario de CodeIgniter Versin 2.1.3 35
ejemplo.com/index.php/productos/ver/zapatos.html
.a"ilitar las Nuer; 6trings
1n algunos casos &uede &re@erir usar las 786s con -uer, stringsG
index.php?c=productos&m=ver&id=345
CodeIgniter so&orta o&cionalmente esta ca&acidadI -ue se &uede >a*ilitar en su arc>ivo
appli%ation%on#ig%on#ig.p=p. 2i a*re su arc>ivo de con@iguracin ver0 estos HtemsG
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
2i cam*ia Nena*leB-uer,BstringsN a !RUE esta @uncionalidad se activar0. 1ntoncesI sus controladores , @unciones
estar0n accesi*les usando la &ala*ra NtriggerN -ue 7d esta*leci &ara invocar a sus controladores , mtodosG
index.php?c=controlador&m=metodo
3or #avor advierta< 2i est0 usando -uer, strings tendr0 -ue armar sus &ro&ias 786sI en lugar de utili"ar los
>el&ers de 786 J, otros >el&ers -ue generan 786sI como algunos >el&ers de @ormularioK ,a -ue est0n
dise+ados &ara tra*a%ar con segmentos *asados en 786s.
Gua del Usuario de CodeIgniter Versin 2.1.3 36
Controladores
6os controladores son el cora"n de su a&licacinI ,a -ue determinan como se mane%an las solicitudes 9CCP.
2Nu9 es un Controlador5
Un Controlador es si$ple$ente un ar%=ivo de %lase 4ue se no$"ra de una #or$a en la 4ue se puede
aso%iar %on una URI.
Considere esta 78IG
ejemplo.com/index.php/!log/
1n el e%em&lo anteriorI CodeIgniter intentarHa encontrar un controlador llamado "log.p=p , cargarlo.
Cuando el no$"re de un Controlador %oin%ide %on el pri$er seg$ento de una URIJ se lo %arga.
3ro"9$oslo< .ola HundoO
!amos a crear un controlador sim&le &ara -ue &ueda verlo en accin. 7sando un editor de te<toI cree un arc>ivo
llamado "log.p=p , escri*a el siguiente cdigoG
<?php
class Blog extends CI_Controller {
public function index()
{
echo 'Hola Mundo!';
}
}
?>
6uego guarde el arc>ivo en su car&eta appli%ation%ontrollers. A>ora visite su sitio usando una 786 similar a
estaG
example.com/index.php/blog/
2i >i"o todo *ienI de*erHa ver .ola HundoO.
:ota< 6os nom*res de clases tienen -ue comen"ar con una letra ma,:scula. 1n otras &ala*rasI esto es v0lidoG
<?php
class "log extends CI_Controller {
}
?>
1sto no es v0lidoG
<?php
class !log extends CI_Controller {
Gua del Usuario de CodeIgniter Versin 2.1.3 37
}
?>
Cam*inI siem&re aseg:rese -ue su controlador e1tienda a la clase del controlador &adre &ara -ue &ueda >eredar
todas sus @unciones.
>un%iones
1n el e%em&lo anteriorI el nom*re de la @uncin es inde1+,. 6a @uncin Ninde<N se carga siem&re &or de@ecto si el
segundo seg$ento de la 78I est0 vacHo. )tra @orma de mostrar su mensa%e N9ola 'undoN serHa esteG
ejemplo.com/index.php/!log/index/
El segundo seg$ento de la URI deter$ina 4u9 #un%in del %ontrolador se lla$a.
Pro*moslo. Agregue una nueva @uncin a su controladorG
<?php
class Blog extends CI_Controller {
public function index()
{
echo 'Hola Mundo!';
}
public function comentarios()
{
echo 'Mire esto!';
}
}
?>
A>ora cargue la siguiente 786 &ara ver la @uncin %o$entariosG
ejemplo.com/index.php/!log/comentarios/
De*erHa ver su nuevo mensa%e.
3asar 6eg$entos URI a sus >un%iones
2i su 78I contiene m0s de dos segmentosI ellos se &asar0n a la @uncin como &ar0metros.
Por e%em&loI digamos -ue tiene una 78I como estaG
ejemplo.com/index.php/productos/#apatos/sandalias/1$3
6os segmentos 78I , # JNsandaliasN , N1/NK se &asar0n a su @uncinG
<?php
class Productos extends CI_Controller {
public function zapatos($sandalias, $id)
Gua del Usuario de CodeIgniter Versin 2.1.3 38
{
echo $sandalias;
echo $id;
}
}
?>
I$portante< 2i est0 usando 8uteo de 78II los segmentos &asados a su @uncin ser0n redirigidos.
Fe#inir un Controlador por Fe#e%to
2e le &uede decir a CodeIgniter -ue cargue un controlador &or de@ecto cuando una 78I no est0 &resenteI como
ser0n los casos en los -ue se solicite solamente la 786 raH" de su sitio. Para es&eci@icar el controlador &or de@ectoI
a*ra su arc>ivo appli%ation%on#igroutes.p=p , esta*le"ca esta varia*leG
$route['default_controller'] = '"log';
Donde &log es el nom*re de la clase controlador -ue -uiere usar. 2i a>ora carga su arc>ivo inde1.p=p &rinci&al
sin es&eci@icar ning:n segmento 78II ver0 &or de@ecto el mensa%e .ola Hundo.
Re$apear las 7la$adas de >un%in
Como se se+al anteriormenteI el segundo &ar0metro de la 78I normalmente determina -u @uncin se llama en el
controlador. CodeIgniter le &ermite anular este com&ortamiento mediante el uso de la @uncin Bre$ap+,G
public function _remap()
{
// Algn cdigo aqu...
}
I$portante< 2i su controlador contiene una @uncin llamada Bre$ap+,I se la llamar0 siem&re
inde&endientemente de lo -ue la 78I contenga. 2e reem&la"a el com&ortamiento normal en el -ue la 78I
determina -ue @uncin se llamaI &ermitindole de@inir sus &ro&ias reglas de ruteo.
Para anular la llamada a la @uncin Jnormalmente el segundo segmento de la 78IK se &asar0 como &ar0metro a la
@uncin Bre$ap+,G
public function _remap(%metod)
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
$this->default_method();
}
}
Cual-uier segmento adicional des&us del nom*re del mtodo se &asa a Bre$ap+, como segundo &ar0metro
o&cional. 1ste arra, se &uede usar en com*inacin con %allBuserB#un%Barra; de P9P &ara emular el
com&ortamiento &or de@ecto de CodeIgniter.
Gua del Usuario de CodeIgniter Versin 2.1.3 39
public function _remap($method, $params = array())
{
$method = 'process_'.$method;
if (method_exists($this, $method))
{
return call_user_func_array(array($this, $method), $params);
}
show_404();
}
3ro%esar la 6alida
CodeIgniter tiene una clase &ara salidas -ue se encarga de enviar autom0ticamente sus datos @inales al navegador
=e*. 2e &uede encontrar m0s in@ormacin so*re esto en las &0ginas !istas , Clase Gutput. 1n algunos casosI sin
em*argoI &uede desear &os(&rocesar los datos terminados en alguna @orma , enviarlos 7d mismo al navegador.
CodeIgniter le &ermite agregar una @uncin llamada Boutput+, a su controlador -ue reci*ir0 los datos terminados
de salida.
I$portante< 2i su controlador contiene una @uncin llamada Boutput+,I la clase Gutput siem&re la llamar0 en
lugar de im&rimir los datos terminados directamente. 1l &rimer &ar0metro de la @uncin contendr0 la salida
terminada.
A-uH >a, un e%em&loG
public function _output($output)
{
echo $output;
}
Por @avorI advierta -ue su @uncin Boutput+, reci*ir0 los datos en su estado @inali"ado. Antes -ue se &asen a la
@uncin Boutput+,I se &resentar0n los datos de evaluacin de desem&e+o , uso de memoriaI se escri*ir0n los
arc>ivos de cac> Jsi tiene el cac> >a*ilitadoKI , se enviar0n los enca*e"ados Jsi usa esta @uncionalidadK.
Para tener la salida de su controlador adecuadamente cac>eadaI su mtodo Boutput+, &uede usarG
if ($this->output->cache_expiration > 0)
{
$this->output->_write_cache($output);
}
2i est0 usando esta @uncionalidadI las estadHsticas del tem&ori"ador de e%ecucin de la &0gina , uso de memoria
&ueden no ser &er@ectamente e<actasI ,a -ue no tendr0n en cuenta cual-uier &roceso &osterior -ue >aga. Para
conocer una @orma alternativa de controlar la salida antes -ue se >aga cual-uier &rocesamiento @inalI &or @avor
ver los mtodos dis&oni*les en la Clase Gutput.
>un%iones 3rivadas
1n algunos casosI &uede desear -ue ciertas @unciones estn ocultas del acceso &:*lico. Para >acer una @uncin
&rivadaI sim&lemente agregue un guin de su*ra,ado como &re@i%o del nom*re , la @uncin no ser0 servida
mediante una solicitud de 786. Por e%em&loI si @uera a tener una @uncin como estaG
Gua del Usuario de CodeIgniter Versin 2.1.3 40
private function _hacer()
{
// algo de cdigo
}
3o @uncionar0 tratar de accederla mediante la 786G
ejemplo.com/index.pp/!log/_acer/
Grgani8ar sus Controladores en 6u"%arpetas
2i est0 armando una a&licacin grandeI &uede encontrar conveniente organi"ar sus controladores en su*car&etas.
CodeIgniter le &ermite >acer esto.
2im&lemente cree car&etas dentro de su directorio appli%ation%ontrollers , u*i-ue sus clases controlador
dentro de ellas.
:ota< Al usar esta @uncionalidadI el &rimer segmento de la 78I tiene -ue es&eci@icar la car&eta. Por e%em&loI
digamos -ue tiene un controlador u*icado a-uHG
application/controllers/productos/zapatos.php
Para llamar al controlador anteriorI su 78I lucir0 como estoG
ejemplo.com/index.php/productos/zapatos/mostrar/123
Cada una de sus su*car&etas &uede contener un controlador &or de@ecto -ue ser0 llamado si la 786 contiene solo
la su*car&eta. 2im&lemente nom*re a su controlador &or de@ecto como se es&eci@ica en su arc>ivo
appli%ation%on#igroutes.p=p.
CodeIgniter tam*in le &ermite rema&ear sus 78Is usando su @uncionalidad 8uteo de 78I.
Constru%tores de Clase
2i tiene la intencin de usar un constructor en alguno de sus controladoresI !IE:E -ue colocar la siguiente lHnea
de cdigo en lG
parent::__construct();
6a ra"n de &or-u esta lHnea es necesaria se de*e a -ue su constructor local anular0 al de su clase &adreI &or lo
-ue necesitamos llamarlo manualmente.
<?php
class "log extends CI_Controller {
public function __construct&'
{
parent((__construct&';
// Su propio cdigo de constructor
}
}
?>
Gua del Usuario de CodeIgniter Versin 2.1.3 41
6os constructores son :tiles si necesita esta*lecer algunos valores &or de@ectoI o e%ecutar &rocesos &or de@ecto
cuando se instancia su clase. 6os constructores no &ueden devolver un valorI &ero &ueden >acer alg:n tra*a%o &or
de@ecto.
:o$"res Reservados de >un%in
Como sus clases controlador e<tender0n al controlador &rinci&al de la a&licacinI tiene -ue ser cuidadoso de no
nom*rar a sus @unciones del mismo modo -ue a-uellas usadas &or esa claseI sino sus @unciones locales las
anular0n. Para conocer la lista com&letaI vea 3om*res 8eservados.
Gua del Usuario de CodeIgniter Versin 2.1.3 42
:o$"res Reservados
CodeIgniter usa una serie de @unciones , nom*res en su o&eracin. De*ido a estoI el desarrollador no &uede usar
algunos nom*res. 6a siguiente es la lista de nom*res reservados -ue no se &ueden usar.
:o$"res de Controlador
Como sus clases de controlador e<tender0n al controlador &rinci&al de la a&licacinI tiene -ue ser cuidadoso de no
nom*rar a sus @unciones del mismo modo -ue las usadas &or otras clasesI sino sus clases las anular0n. 6a
siguiente es la lista de nom*res reservados. 3o use ninguno de estos nom*res &ara llamar a su controladorG
Controller
CIBBase
BciBinitiali"e
De@ault
inde<
>un%iones
isBreall,B=rita*leJK
loadBclassJK
getBcon@igJK
con@igBitemJK
s>o=BerrorJK
s>o=B#0#JK
logBmessageJK
Be<ce&tionB>andlerJK
getBinstanceJK
Varia"les
acon@ig
amimes
alang
Constantes
13!I8)3'13C
1EC
$CPAC9
216$
BA21PAC9
APPPAC9
CIB!182I)3
$I61B81ADB')D1
$I61B?8IC1B')D1
DI8B81ADB')D1
DI8B?8IC1B')D1
$)P13B81AD
$)P13B81ADB?8IC1
$)P13B?8IC1BC81AC1BD12C87CCI!1
$)P13B81ADB?8IC1BC81AC1BD12C87CCI!1
$)P13B?8IC1BC81AC1
$)P13B81ADB?8IC1BC81AC1
$)P13B?8IC1BC81AC1B2C8ICC
$)P13B81ADB?8IC1BC81AC1B2C8ICC
Gua del Usuario de CodeIgniter Versin 2.1.3 43
Vistas
7na vista es sim&lemente una &0gina =e* o un @ragmento de &0ginaI tal como un enca*e"adoI &ie de &0ginaI una
*arra lateralI etc. De >ec>oI las vistas se &ueden em*e*er @le<i*lemente dentro de otras vistas Jdentro de otras
vistasI etc.I etc.K si necesita este ti&o de %erar-uHa.
3unca se &uede llamar directamente a las vistasI las tiene -ue cargar un controlador. 8ecuerde -ue en un
@rame=or; '!CI el Controlador act:a como el &olicHa de tr0nsitoI &or lo -ue es res&onsa*le de traer una vista en
&articular. 2i no le, la &0gina Controladores de*erHa >acerlo antes de continuar.
7sando el e%em&lo creado en la &0gina ControladoresI agregaremos una vista a l.
Crear una Vista
7sando su editor de te<toI cree un arc>ivo llamado "logBvieC.p=p , escri*a esto en lG
<html>
<head>
<title>Mi Blog</title>
</head>
<body>
<h1>Bienvenido a mi Blog!</h1>
</body>
</html>
6uego guarde el arc>ivo en la car&eta appli%ationvieCs.
Cargar una Vista
Para cargar un arc>ivo de vista en &articularI usar0 la siguiente @uncinG
$this->load->view('nom!re');
Donde no$"re es el nom*re de su arc>ivo de vista.
:ota< 3o se necesitar es&eci@icar la e<tensin de arc>ivo .p=pI a menos -ue use otra distinta a .p=p.
A>oraI a*ra el arc>ivo del controlador -ue >i"o antes llamado "log.p=p , reem&lace la sentencia e%=o con la
@uncin de carga de la vistaG
<?php
class Blog extends CI_Controller {
function index()
{
$this->load->view('blogview');
}
}
?>
2i visita su sitio usando la 786 -ue arm antesI de*erHa ver su nueva vista. 6a 786 era similar a estoG
ejemplo.com/index.php/!log/
Gua del Usuario de CodeIgniter Versin 2.1.3 44
Cargar Varias Vistas
CodeIgniter mane%ar0 inteligentemente las llamadas a ?t=is@Aload@AvieC desde dentro de un controlador. 2i
ocurre m0s de una llamadaI se agregar0n %untas. Por e%em&loI &uede -ue desee tener una vista de enca*e"adoI
una vista de men:I una vista de contenidoI , una vista de &ie de &0gina. 1so &odrHa ser algo como estoG
<?php
class Page extends CI_Controller {
function index()
{
$data['page_title'] = 'Su titulo';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}
}
?>
1n el e%em&lo anteriorI estamos usando Ndatos agregados din0micamenteNI lo -ue ver0 m0s a*a%o.
0l$a%enar Vistas dentro de 6u"%arpetas
2us arc>ivos de vista tam*in se &ueden almacenar dentro de su*car&etas si &re@iere ese ti&o de organi"acin. Al
>acer esoI necesitar0 incluir el nom*re de la car&eta -ue carga la vista. 1%em&loG
$this->load->view('nom!re_de_carpeta)nom!re_de_arci*o');
0gregar Fatos Fin'$i%os a la Vista
6os datos se &asan del controlador a la vista &or medio de un arra; o un o"Deto en el segundo &ar0metro en la
@uncin de carga de la vista. 1ste es un e%em&lo usando un arra,G
%data = array(
'title' => 'Mi Titulo',
'heading' => 'Mi Encabezado',
'message' => 'Mi Mensaje'
);
$this->load->view('blogview', %data);
R este es un e%em&lo usando un o*%etoG
%data = new Alguna_clase();
$this->load->view('blog_view', %data);
:ota< 2i usa un o*%etoI las varia*les de clase se convertir0n en elementos del arra,.
Pro*moslo con su arc>ivo controlador. P*ralo , agregue este cdigoG
Gua del Usuario de CodeIgniter Versin 2.1.3 45
<?php
class Blog extends CI_Controller {
function index()
{
$data['title'] = "Mi Titulo Real";
$data['heading'] = "Mi Encabezado Real";
$this->load->view('blogview', $data);
}
}
?>
A>ora a*ra su arc>ivo de vista , cam*ie el te<to &ara varia*les -ue corres&onden a las claves del arra, en sus
datosG
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
</body>
</html>
1ntonces cargue la &0gina en el 786 -ue us , de*erHa ver las varia*les reem&la"adas.
Crear &u%les
1l arra, de datos -ue &asa a su vista no se limita a varia*les sim&les. Puede &asar arra,s multidimensionalesI los
-ue se &ueden ciclar &ara generar varias @ilas. Por e%em&loI si e<trae los datos de su *ase de datosI ser0 en la
@orma de un arra, multidimensional.
1ste es un e%em&lo sim&le. Agregue esto a su controladorG
<?php
class Blog extends CI_Controller {
function index()
{
$data['todo_list'] = array('Limpiar la casa', 'Llamar a mam',
'Hacer los mandados');
$data['title'] = "Mi Titulo Real";
$data['heading'] = "Mi Encabezado Real";
$this->load->view('blogview', $data);
}
}
?>
A>ora a*ra su arc>ivo de vista , cree un *ucleG
Gua del Usuario de CodeIgniter Versin 2.1.3 46
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
<h3>Mi Lista de Pendientes</h3>
<ul>
<?php foreach ($todo_list as $item):?>
<li><?php echo $item;?></li>
<?php endforeach;?>
</ul>
</body>
</html>
:ota< Advertir0 -ue en el e%em&lo anterior estamos usando la sinta<is alternativa de P9P. 2i no est0
@amiliari"ado con ellaI &uede leer acerca su,o en V2inta<is Alternativa de P9P &ara Arc>ivos de !istasW.
Fevolver Vistas %o$o Fatos
9a, un tercer &ar0metro op%ional -ue le &ermite cam*iar el com&ortamiento de la @uncin &ara -ue devuelva
datos como una cadena en lugar de enviarla al navegador. 1sto &uede ser :til si desea &rocesar los datos en
alguna @orma. 2i esta*lece el &ar0metro a !RUE J*ooleanoKI devolver0 datos. 1l com&ortamiento &or de@ecto
>076EI -ue la enviar0 al navegador. 8ecuerde asignarla a una varia*le si -uiere -ue devuelva datosG
$string = $this->load->view('mi_arci*o', '', +,-.);
Gua del Usuario de CodeIgniter Versin 2.1.3 47
Hodelos
6os modelos est0n dis&oni*les op%ional$ente &ara a-uellos -ue -uieren usar un en@o-ue '!C m0s tradicional.
2Nu9 es un Hodelo5
6os modelos son clases de P9P -ue se dise+an &ara tra*a%ar con in@ormacin en su *ase de datos. Por e%em&loI
digamos -ue usa CodeIgniter &ara administrar un *log. PodrHa tener una clase de modelo -ue contenga @unciones
&ara insertarI actuali"ar , devolver los datos de su *log. A-uH >a, un e%em&lo de cmo lucirHa tal clase de modeloG
class Blog_model extends CI_Model {
var $title = '';
var $content = '';
var $date = '';
function __construct()
{
// Llamar al constructor de CI_Model
parent::__construct();
}

function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
function insert_entry()
{
$this->title = $_POST['title']; // por favor leer la nota de abajo
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id' => $_POST['id']));
}
}
:ota< 6as @unciones en el e%em&lo anterior usan las @unciones de *ase de datos del 0%tive Re%ord.
:ota< 1n aras de la sim&licidadI en este e%em&lo usamos ?B3G6! directamente. 1sto es generalmente una
mala &r0cticaI , el en@o-ue m0s com:n serHa usar la Clase Input ?t=is@Ainput@Apost+LtitleL,
0nato$a de un Hodelo
6as clases de modelos se almacenan en su car&eta appli%ation$odels. Pueden estar anidadas dentro de
su*car&etas si -uiere este ti&o de organi"acin.
Gua del Usuario de CodeIgniter Versin 2.1.3 48
1l &rototi&o *0sico &ara la clase de un modelo es esteG
class /om!re_modelo extends CI_Model {
function __construct&'
{
parent::__construct();
}
}
Donde :o$"reB$odelo es el nom*re de su clase. 6os nom*res de clases !IE:E: NUE !E:ER la &rimera letra
en ma,:scula con el resto del nom*re en min:sculas. Aseg:rese -ue su clase e<tiende a la clase *ase CIBHodel.
1l nom*re de arc>ivo ser0 la versin en min:sculas del nom*re de clase. Por e%em&lo si su clase es estaG
class -ser_model extends CI_Model {
function __construct&'
{
parent::__construct();
}
}
2u arc>ivo ser0 esteG
application/models/user_model.pp
Cargar un Hodelo
2us modelos normalmente se cargar0n , llamar0n desde dentro de sus @unciones controlador. Para cargar un
modeloI usar0 la siguiente @uncinG
$this->load->model('/om!re_modelo');
2i su modelo est0 u*icado en una su*car&etaI incluir la ruta relativa de su car&eta de modelos. Por e%em&loI si
tiene un modelo u*icado en appli%ation$odels"log%onsultas.p=p lo llamar0 usandoG
$this->load->model('!log)consultas');
7na ve" cargadoI acceder0 a las @unciones de su modelo usando un o*%eto con el mismo nom*re -ue su claseG
$this->load->model('/om!re_modelo');
$this->/om!re_modelo->function();
2i -uisiera -ue su modelo se asigne a un nom*re de o*%eto di@erenteI &uede es&eci@icarlo mediante el segundo
&ar0metro de la @uncin de cargaG
$this->load->model('/om!re_modelo', 'fu!ar');
$this->fu!ar->function();
Gua del Usuario de CodeIgniter Versin 2.1.3 49
A-uH >a, un e%em&lo de un controlador -ue carga un modelo , luego sirve a una vistaG
class Blog_controller extends CI_Controller {
function blog()
{
$this->load->model('Blog');
$data['query'] = $this->Blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
Cargar un Hodelo 0uto$'ti%a$ente
2i encuentra -ue necesita tener un modelo dis&oni*le glo*almente a lo largo de su a&licacinI &uede decirle a
CodeIgniter -ue lo cargue autom0ticamente durante la iniciali"acin del sistema. 1sto se >ace al a*rir el arc>ivo
appli%ation%on#igautoload.p=p , agregando el modelo al arra, ?autoload.
Cone%tar a su &ase de Fatos
Cuando se carga un modeloI :G conecta autom0ticamente a la *ase de datos. 1st0n dis&oni*les las siguientes
o&ciones de cone<inG
Puede conectar usando los mtodos est0ndar de *ase de datos descri&tos a-uHI tanto desde su clase
controlador como desde cual-uier clase modelo.
Puede decirle a la @uncin de carga del modelo -ue conecte autom0ticamente &as0ndole !RUE J*ooleanoK
mediante el tercer &ar0metroI , valores de conectividadI como se de@ine en su arc>ivo de con@iguracin de
*ase de datosG
$this->load->model('Nombre_modelo', '', +,-.);
Puede &asar manualmente los valores de conectividad de *ase de datos mediante el tercer &ar0metroG
$config['hostname'] = "localhost";
$config['username'] = "mi_usuario";
$config['password'] = "mi_contrasea";
$config['database'] = "mi_base_de_datos";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('Nombre_modelo', '', %config);
Gua del Usuario de CodeIgniter Versin 2.1.3 50
>un%iones .elper
6os >el&ersI como su nom*re sugiereI lo a,udan con las tareas. Cada arc>ivo de >el&er es sim&lemente una
coleccin de @unciones en una categorHa &articular. 9a, 9el&ers de 786 -ue a,udan en la creacin de enlacesI
9el&ers de $ormulario -ue lo a,udan a crear elementos de @ormularioI 9el&ers de Ce<to -ue e%ecutan varias rutinas
de @ormateo de te<toI 9el&ers de Coo;ie -ue escri*en , leen coo;iesI 9el&ers de Arc>ivo -ue a,udan a tra*a%ar
con arc>ivosI etc.
A di@erencia de la ma,orHa de otros sistemas de CodeIgniterI los 9el&ers no se escri*en en @ormato )rientado a
)*%etos. 2on sim&les @unciones &rocedimentales. Cada @uncin >el&er e%ecuta una tarea es&ecH@icaI sin
de&endencia con otras @unciones.
CodeIgniter no carga &or de@ecto los Arc>ivos 9el&erI &or lo tanto el &rimer &aso &ara usar un 9el&er es cargarlo.
7na ve" cargadoI se >ace dis&oni*le glo*almente en su controlador , vista.
6os >el&ers se almacenan normalmente en su directorio s;ste$=elpers o appli%ation=elpers. CodeIgniter
*uscar0 &rimero en su directorio appli%ation=elpers. 2i el directorio no e<iste o el >el&er indicado no est0
u*icado allHI en su lugarI CodeIgniter *uscar0 en la car&eta glo*al s;ste$=elpers.
Cargar un .elper
Cargar un arc>ivo 9el&er es *astante sencillo usando la siguiente @uncinG
$this->load->helper('nom!re');
Donde no$"re es el nom*re del arc>ivo >el&erI sin la e<tensin .p=p o la &arte N=elperN.
Por e%em&loI &ara cargar el arc>ivo 9el&er de 786 -ue se llama urlB=elper.p=pI de*erHa >acer estoG
$this->load->helper('url');
2e &uede cargar un >el&er en cual-uier lugar dentro de las @unciones controlador Jo a:n dentro de los arc>ivos de
vistasI aun-ue esto no es una *uena &r0cticaKI siem&re , cuando se lo cargue antes de usarlo. Puede cargar sus
>el&ers en el constructor de un controladorI &or lo -ue estar0n dis&oni*les autom0ticamente en cual-uier @uncinI
o &uede cargar un >el&er en una @uncin es&ecH@ica -ue lo necesite.
:ota< 6a @uncin de carga de 9el&ers anteriorI no devuelve un valor. Por lo tanto no intente asignarla a una
varia*le. 2im&lemente :sela como se muestra.
Cargar Varios .elpers
2i necesita cargar m0s de un >el&erI &uede es&eci@icarlos en un arra,I de este modoG
$this->load->helper( array('elper1', 'elper$', 'elper3') );
Carga 0uto$'ti%a de .elpers
2i tiene la necesidad de dis&oner glo*almente de un >el&er a lo largo de su a&licacinI &uede decirle a CodeIgniter
-ue lo cargue autom0ticamente durante la iniciali"acin del sistema. 1sto se >ace agregando el >el&er al arra, de
carga autom0tica del arc>ivo appli%ation%on#igautoload.p=p.
Gua del Usuario de CodeIgniter Versin 2.1.3 51
Usar un .elper
7na ve" -ue se carg el arc>ivo 9el&er conteniendo la @uncin -ue tiene la intencin usarI la llamar0 de la @orma
-ue lo >arHa con una @uncin est0ndar de P9P.
Por e%em&loI &ara crear un enlace usando la @uncin an%=or+, en uno de los arc>ivos de vistaI de*erHa >acer estoG
<?php echo anchor('blog/comentarios', 'Clic aqu');?>
Donde NClic a-uHN es el nom*re del enlaceI , N*logOcomentariosN es la 78I al controladorO@uncin -ue desea
enla"ar.
PE1tenderP .elpers
Para Ne<tenderN 9el&ersI cree un arc>ivo en su car&eta appli%ation=elpers con el mismo nom*re -ue el 9el&er
e<istenteI &ero &re@i%ado con HQB Jeste Htem es con@igura*le. !er m0s a*a%oK.
2i todo lo -ue necesita es agregar alguna @uncionalidad a un >el&er e<istente ( -ui"0s agregar una o dos @uncionesI
o cam*iar como una @uncin o&era ( entonces es e<agerado reem&la"ar el >el&er entero con su versin. 1n este
caso es me%or sim&lemente Ne<tenderN el 9el&er. 1l trmino Ne<tenderN se usa ligeramenteI ,a -ue las $unciones
9el&ers son &rocedimentales , discretas , no se &ueden e<tender en el sentido tradicional de la &rogramacin.
InternamenteI le da la &osi*ilidad de agregar @unciones a las -ue &rovee el 9el&er o modi@icar cmo o&era en
@orma nativa la $uncin 9el&er.
Por e%em&loI &ara e<tender el 9el&er Arra, nativo crear0 un arc>ivo llamado
appli%ation=elpersHQBarra;B=elper.p=pI , agregar0 o anular0 @uncionesG
// any_in_array() no est en el Helper Array, por lo que define una nueva funcin
function any_in_array($needle, $haystack)
{
$needle = (is_array($needle)) ? $needle : array($needle);
foreach ($needle as $item)
{
if (in_array($item, $haystack))
{
return TRUE;
}
}
return FALSE;
}
// random_element() est incluido en el Helper Array,
// por lo que anula la funcin nativa
function random_element($array)
{
shuffle($array);
return array_pop($array);
}
Esta"le%er su 3ropio 3re#iDo
6os &re@i%os de arc>ivo &ara Ne<tenderN los 9el&ers son los mismos usados &ara e<tender *i*liotecas , clases del
n:cleo. Para esta*lecer su &ro&io &re@i%oI a*ra su arc>ivo appli%ation%on#ig%on#ig.p=p , *us-ue este HtemG
Gua del Usuario de CodeIgniter Versin 2.1.3 52
$config['subclass_prefix'] = 'MY_';
Por @avor advierta -ue todas las *i*liotecas nativas de CodeIgniter est0n &re@i%adas con CIBI &or lo tanto 3) use
ese &re@i%o.
2Q 0=ora Nu95
1n la ta*la de contenido encontrar0 la lista de todos los arc>ivos de >el&er dis&oni*les. Ins&eccione cada uno &ara
ver -ue >acen.
Gua del Usuario de CodeIgniter Versin 2.1.3 53
Usar las &i"liote%as de CodeIgniter
Codas las *i*liotecas dis&oni*les se u*ican en la car&eta s;ste$li"raries. 1n la ma,orHa de los casosI el uso de
una de esas clases involucra iniciali"arla dentro de un controlador usando la siguiente @uncin de iniciali"acinG
$this->load->library('nom!re_de_clase');
Donde no$"reBdeB%lase es el nom*re de la clase -ue desea invocar. Por e%em&loI &ara cargar la clase de
validacin de @ormularios de*erHa >acer estoG
$this->load->library('form_*alidation');
7na ve" iniciali"ada &uede usarla como se indica en la &0gina corres&ondiente a esa clase en la guHa del usuario.
Adem0sI se &ueden cargar varias *i*liotecas al mismo tiem&o al &asar un arra, de *i*liotecas a la @uncin de
carga.
$this->load->library(array('email', 'ta!la'));
Crear sus 3ropias &i"liote%as
Por @avor lea la seccin de la guHa del usuario -ue discute cmo crear sus &ro&ias *i*liotecas.
Gua del Usuario de CodeIgniter Versin 2.1.3 54
Crear sus 3ropias &i"liote%as
Cuando usamos el trmino NBi*liotecasN nos re@erimos normalmente a las clases -ue est0n locali"adas en el
directorio li"raries , se descri*en en la 8e@erencia de Clases de esta guHa del usuario. 1n este casoI sin em*argoI
descri*iremos en su lugar como &uede crear sus &ro&ias *i*liotecas dentro del directorio appli%ationli"raries
&ara mantener la se&aracin entre sus recursos locales , los recursos glo*ales del @rame=or;.
Adem0sI CodeIgniter &ermite -ue sus *i*liotecas e<tiendan a las clases nativas si sim&lemente necesita agregar
alguna @uncionalidad a una *i*lioteca e<istente. ) incluso &uede reem&la"ar *i*liotecas nativas con solamente
colocar versiones con el mismo nom*re en su car&eta appli%ationli"raries.
1n resumenG
Puede crear *i*liotecas com&letamente nuevas.
Puede e<tender *i*liotecas nativas.
Puede reem&la"ar *i*liotecas nativas.
6a siguiente &0gina e<&lica estos tres conce&tos en detalle.
:ota< 6as clases de *ase de datos no se &ueden e<tender o reem&la"ar con sus &ro&ias clases. Codas las otras
clases se &ueden reem&la"arOe<tender.
0l$a%ena$iento
2us clases de *i*lioteca se de*erHan u*icar dentro de la car&eta appli%ationli"rariesI ,a -ue este es el lugar
donde CodeIgniter las *uscar0 &ara iniciali"arlas.
Conven%iones de :o$"res
6os nom*res de arc>ivos tienen -ue comen"ar con ma,:scula. Por e%em&loG HiB%lase.p=p
6as declaraciones de clase tiene -ue comen"ar con ma,:scula. Por e%em&loG %lass HiB%lase
6os nom*res de clase , los nom*res de arc>ivo tiene -ue coincidir.
El 0r%=ivo de Clase
6as clases de*erHan tener este &rototi&o *0sico J:ota< 1stamos usando el nom*re 0lgunaB%lase &uramente
como e%em&loKG
<?php if ( ! defined('BASEPATH')) exit('No se permite acceso directo al script');
class Alguna_clase {
public function alguna_funcion()
{
}
}
/* Fin del archivo Alguna_clase.php */
Gua del Usuario de CodeIgniter Versin 2.1.3 55
Usar su Clase
Puede iniciali"ar su clase desde dentro de cual-uier @uncin controladorI usando el est0ndarG
$this->load->library('alguna_clase');
Donde algunaB%lase es el nom*re del arc>ivoI sin la e<tensin N.p=pN. Puede enviar el nom*re del arc>ivo
iniciando en ma,:sculas o todo en min:sculas. A CodeIgniter no le im&orta.
7na ve" cargada &uede acceder a su clase usando la versin en $inRs%ulasG
$this->alguna_clase->alguna_funcion(); // las instancias del objeto siempre
// estarn en minsculas
3asar 3ar'$etros al Ini%iali8ar su Clase
1n la @uncin de carga de *i*liotecasI &uede &asar din0micamente datos como un arra, mediante el segundo
&ar0metroI el cual se &asar0 al constructor de su claseG
$params = array('tipo' => 'grande', 'color' => 'rojo');
$this->load->library('Alguna_clase', %params);
2i utili"a esta @uncionalidadI tiene -ue con@igurar al constructor de su clase &ara -ue ace&te datosG
<?php if ( ! defined('BASEPATH')) exit('No se permite acceso directo al script');
class Alguna_clase {
public function __construct($params)
{
// Hacer algo con $params
}
}
?>
Cam*in &uede &asar &ar0metros almacenados en un arc>ivo de con@iguracin. 2im&lemente cree un arc>ivo de
con@iguracin llamado igual -ue el no$"re del ar%=ivo de la clase , gu0rdelo en su car&eta
appli%ation%on#ig. Advierta -ue si &asa din0micamente un &ar0metro como se descri*e arri*aI la o&cin
del arc>ivo de con@iguracin no estar0 dis&oni*le.
Utili8ar Re%ursos de CodeIgniter dentro de sus &i"liote%as
Para acceder a los recursos nativos de CodeIgniter dentro de sus *i*liotecasI use la @uncin getBinstan%e+,. 1sta
@uncin devuelve el su&er o*%eto de CodeIgniter.
3ormalmenteI desde dentro de las @unciones de controlador llamar0 a cual-uier @uncin de CodeIgniter dis&oni*le
usando la construccin ?t=isG
Gua del Usuario de CodeIgniter Versin 2.1.3 56
%tis->load->helper('url');
%tis->load->library('session');
%tis->config->item('base_url');
etc.
2in em*argoI ?t=is solamente @unciona directamente dentro de sus controladoresI sus modelos o sus vistas. 2i
-uisiera usar las clases de CodeIgniter desde dentro de sus &ro&ias clasesI &uede >acer lo siguienteG
PrimeroI asignar el o*%eto CodeIgniter a una varia*leG
$CI =& get_instance();
7na ve" -ue asign el o*%eto a una varia*leI usar0 esa varia*le en lugar de ?t=isG
$CI =& get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
etc.
:ota< Advertir0 -ue la @uncin anterior getBinstan%e+, se &asa &or re@erenciaG
?CI ST getBinstan%e+,U
Esto es $u; i$portante. 6a asignacin &or re@erencia le &ermite usar el o*%eto CodeIgniter original en lugar
de >acer una co&ia de l.
Ree$pla8ar &i"liote%as :ativas %on sus Versiones
2im&lemente al nom*rar su clase igual -ue a una *i*lioteca nativaI &rovocar0 -ue CodeIgniter la use en lugar de la
nativa. Para usar esta @uncionalidadI tiene -ue nom*rar al arc>ivo , la declaracin de clase e<actamente igual -ue
la *i*lioteca nativa. Por e%em&loI &ara reem&la"ar la *i*lioteca nativa E$ailI crear0 un arc>ivo llamado
appli%ationli"rariesE$ail.p=p , declarar0 su clase conG
class CI_Email {
}
Advierta -ue la ma,orHa de las clases nativas est0n &re@i%adas con CIB.
Para cargar su *i*lioteca ver0 la @uncin de carga est0ndarG
$this->load->library('email');
:ota< Por el momentoI las clases de *ase de datos no se &ueden reem&la"ar con sus &ro&ias versiones.
Gua del Usuario de CodeIgniter Versin 2.1.3 57
E1tender &i"liote%as :ativas
2i todo lo -ue necesita >acer es agregar alguna @uncionalidad a una *i*lioteca e<istente ( -ui"0s agregar una o dos
@unciones ( entonces es e<agerado reem&la"ar toda la *i*lioteca con su versin. 1n este caso es me%or
sim&lemente e<tender la clase. 1<tender una clase es casi lo mismo -ue reem&la"ar una claseI con un &ar de
e<ce&cionesG
6a declaracin de clase tiene -ue e<tender la clase &adre.
1l nuevo nom*re de clase , nom*re de arc>ivo se tiene -ue &re@i%ar con HQB Jeste Htem es con@igura*le.
!er m0s a*a%oK.
Por e%em&loI &ara e<tender la clase nativa E$ailI crear0 un arc>ivo llamado
appli%ationli"rariesHQBE$ail.p=pI , declarar0 su clase conG
class MY_Email extends CI_Email {
}
:ota< 2i necesita usar un constructor en su claseI aseg:rese -ue e<tiende el constructor &adreG
class MY_Email extends CI_Email {
public function __construct()
{
parent::__construct();
}
}
Cargar sus 6u"%lases
Para cargar sus su*clasesI usar0 la sinta<is est0ndar usada normalmente. :G inclu,a su &re@i%o. Por e%em&loI &ara
cargar el e%em&lo anterior -ue e<tiende la clase E$ailI usar0G
$this->load->library('email');
7na ve" cargadaI usar0 la varia*le de clase como lo >arHa normalmente &ara la clase -ue est0 e<tendiendo. 1n el
caso de la clase E$ailI todas las llamadas usar0nG
$this->email->alguna_funcion();
Esta"le%er su 3ropio 3re#iDo
Para esta*lecer su &ro&io &re@i%o de su*claseI a*ra su arc>ivo appli%ation%on#ig%on#ig.p=p , *us-ue este
HtemG
$config['subclass_prefix'] = 'MY_';
Por @avor advierta -ue todas las *i*liotecas nativas de CodeIgniter est0n &re@i%adas con CIBI &or lo tantoI :G use
ese &re@i%o.
Gua del Usuario de CodeIgniter Versin 2.1.3 58
Usar Frivers de CodeIgniter
6os Drivers son un ti&o es&ecial de Bi*lioteca -ue tienen una clase &adre , cual-uier cantidad clases >i%as
&otenciales. 6as clases >i%as tienen acceso a la clase &adreI &ero no a sus >ermanas. 6os drivers &roveen una
sinta<is elegante a sus controladores &ara *i*liotecas -ue se *ene@ician o necesitan dividirse en clases discretas.
6os Drivers est0n u*icados en la car&eta s;ste$li"rariesI en su &ro&ia car&eta -ue se llama igual -ue la clase
de la *i*lioteca &adre. Cam*in dentro de esa car&eta >a, una su*car&eta llamada driversI -ue contiene todos los
&osi*les arc>ivos de clases >i%as.
Para usar un driverI lo iniciali"ar0 dentro de un controlador usando la siguiente @uncin de iniciali"acinG
$this->load->driver('nom!re de clase');
Donde no$"re de %lase es el nom*re de la clase driver -ue desea invocar. Por e%em&loI &ara cargar un driver
llamado NalgunB&adreN de*erHa >acer estoG
$this->load->driver('algun_padre');
6os mtodos de las clases se &ueden invocar conG
$this->algun_padre->algun_metodo();
6as clases >i%as , los drivers en sH mismosI se &ueden llamar directamente a travs de la clase &adreI sin
iniciali"arlosG
$this->algun_padre->hija_uno->algun_metodo();
$this->algun_padre->hija_dos->otro_metodo();
Crear sus 3ropios Frivers
Por @avor lea la seccin de la guHa del usuario -ue discute cmo crear sus &ro&ios drivers.
Gua del Usuario de CodeIgniter Versin 2.1.3 59
Crear Frivers
Fire%torio del Friver ; Estru%tura de 0r%=ivos
'uestra del directorio del driver , dise+o de la estructura de arc>ivosG
Oa&&licationOli*rariesO3om*reBdeBdriver
3om*reBdeBdriver.&>&
drivers
3om*reBdeBdriverBsu*claseB1.&>&
3om*reBdeBdriverBsu*claseB/.&>&
3om*reBdeBdriverBsu*claseB.&>&
:ota< Para mantener la com&ati*ilidad en sistemas de arc>ivo sensi*les a la ma,:sculaI a&licarle u%#irst+, al
directorio :o$"reBdeBdriver.
Gua del Usuario de CodeIgniter Versin 2.1.3 60
Crear Clases del :R%leo
Cada ve" -ue CodeIgniter se e%ecuta >a, varias clases *ase -ue se iniciali"an autom0ticamente como &arte del
n:cleo del @rame=or;. 2in em*argoI es &osi*le cam*iar cual-uiera de las clases del n:cleo del sistema con sus
&ro&ias versiones o a:n e<tender las versiones del n:cleo.
7a $a;ora de los usuarios nun%a tendr'n la ne%esidad de =a%er estoJ pero e1iste la posi"ilidad de
ree$pla8arlas o e1tenderlasJ para a4uellos 4ue 4uisieran alterar signi#i%ativa$ente el nR%leo de
CodeIgniter.
:ota< Dugar con una clase del n:cleo del sistema tiene muc>as im&licacionesI asH -ue aseg:rese -ue sa*e lo
-ue va a >acer antes de intentarlo.
7ista de Clases del 6iste$a
6a siguiente es la lista de los arc>ivos del n:cleo del sistema -ue se invocan cada ve" -ue se e%ecuta CodeIgniterG
&en%=$arI
Con#ig
Controller
E1%eptions
.ooIs
Input
7anguage
7oader
7og
Gutput
Router
URI
Ut#V
Ree$pla8ar Clases del :R%leo
Para usar una de sus &ro&ias clases del sistema en lugar de una &or de@ectoI sim&lemente u*i-ue su versin
dentro de su directorio appli%ation%ore localG
application/core/alguna-clase.pp
2i este directorio no e<isteI &uede crearlo.
Cual-uier arc>ivo nom*rado del mismo modo -ue uno de la lista anteriorI se usar0 en lugar del original.
Por @avor advierta -ue su clase tiene -ue usar el &re@i%o CI. Por e%em&loI si su arc>ivo se llama Input.p=p la clase
se llamar0G
class CI_Input {
}
Gua del Usuario de CodeIgniter Versin 2.1.3 61
E1tender las Clases del :R%leo
2i todo lo -ue necesita >acer es agregar alguna @uncionalidad a una *i*lioteca e<istente ( -ui"0s agregar una o dos
@unciones ( entonces es e<agerado reem&la"ar la *i*lioteca entera con su &ro&ia versin. 1n este caso es me%or
sim&lemente e<tender la clase. 1<tender una clase es casi lo mismo -ue reem&la"ar una claseI solo -ue con un &ar
de e<ce&cionesG
6a declaracin de la clase tiene -ue e<tender a la clase &adre.
2u nuevo nom*re de clase , nom*re de arc>ivo tienen -ue estar &re@i%ados con HQB Jeste Htem es
con@igura*le. !er m0s a*a%oK.
Por e%em&loI &ara e<tender la clase nativa InputI crear0 un arc>ivo llamado appli%ation%oreHQBInput.p=pI
, declarar0 su clase conG
class MY_Input extends CI_Input {
}
:ota< 2i necesita usar un constructor en su claseI aseg:rese -ue e<tiende el constructor &adreG
class MY_Input extends CI_Input {
function __construct()
{
parent::__construct();
}
}
!ip< Cual-uier @uncin en su clase -ue se llame del mismo modo -ue alguna @uncin en la clase &adre se usar0
en lugar de la nativa Jesto se conoce como Nanulacin de mtodoNK. 1sto le &ermite alterar sustancialmente el
n:cleo de CodeIgniter.
2i est0 e<tendiendo la clase Controller del n:cleoI entonces aseg:rese de e<tender su nueva clase en los
constructores de sus controladores de la a&licacin.
class Welcome extends MY_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view('welcome_message');
}
}
Esta"le%er su 3ropio 3re#iDo
Para esta*lecer su &ro&io &re@i%o de su*claseI a*ra su arc>ivo appli%ation%on#ig%on#ig.p=p , *us-ue este
HtemG
Gua del Usuario de CodeIgniter Versin 2.1.3 62
$config['subclass_prefix'] = 'MY_';
Por @avor advierta -ue todas las *i*liotecas nativas de CodeIgniter est0n &re@i%adas con CIBI &or lo tantoI :G use
ese &re@i%o.
Gua del Usuario de CodeIgniter Versin 2.1.3 63
.ooIs @ E1tender el :R%leo del >ra$eCorI
6a @uncionalidad de 9oo;s de CodeIgniter &rovee un medio &ara a&rovec>ar , modi@icar el @uncionamiento interno
del @rame=or; sin alterar los arc>ivos del n:cleo. Cuando CodeIgniter correI sigue un &roceso de e%ecucin
es&ecH@icoI diagramado en la &0gina $lu%o de la A&licacin. Puede >a*er casosI sin em*argoI en -ue le gustarHa
>acer alg:n ti&o de accin -ue tenga lugar en una eta&a &articular del &roceso de e%ecucin. Por e%em&loI es
&osi*le -ue desee e%ecutar un scri&t antes -ue se carguen sus controladoresI o e<actamente des&usI o es &osi*le
-ue desee activar uno de sus &ro&ios scri&ts en alg:n otro lugar.
.a"ilitar .ooIs
6a @uncionalidad de >oo;s se &uede >a*ilitarOdes>a*ilitar glo*almente al esta*lecer el siguiente Htem en el arc>ivo
appli%ation%on#ig%on#ig.p=pG
$config['enable_hooks'] = +,-.;
Fe#inir un .ooI
6os >oo;s est0n de@inidos en el arc>ivo appli%ation%on#ig=ooIs.p=p. Cada >oo; est0 es&eci@icado como un
arra, con este &rototi&oG
$hook['pre_controller'] = array(
'class' => 'Mi_clase',
'function' => 'Mi_funcion',
'filename' => 'Mi_clase.php',
'filepath' => 'hooks',
'params' => array('cerveza', 'vino', 'soda')
);
:otas<
1l Hndice del arra, se corres&onde con el nom*re del &unto de enganc>e en &articular -ue desea usar. 1n el
e%em&lo anteriorI el &unto de enganc>e es preB%ontroller. A*a%o >a, una lista de &untos de enganc>e. 6os
siguientes Htems se de*erHan de@inir en su arra, asociativo de >oo;sG
%lass< 3om*re de la clase -ue desea invocar. 2i &re@iere usar una @uncin &rocedimental en lugar de una
claseI de%e este Htem en *lanco.
#un%tion< 3om*re de la @uncin -ue desea llamar.
#ilena$e< 3om*re del arc>ivo -ue contiene su clase o @uncin.
#ilepat=< 3om*re del directorio -ue contiene su scri&t. :ota< 2u scri&t tiene -ue estar locali"ado en un
directorio D13C8) de su car&eta appli%ationI &or lo -ue su ruta de arc>ivo es relativa a esa car&eta. Por
e%em&loI si su scri&t est0 locali"ado en appli%ation=ooIsI sim&lemente usar0 =ooIs como su ruta de
arc>ivo. 2i su scri&t est0 locali"ado en appli%ation=ooIsutilities usar0 =ooIsutilities como su ruta
de arc>ivo. 2in *arra al @inal.
para$s< Cual-uier &ar0metro -ue desee &asarle al scri&t. 1ste Htem es o&cional.
Varias 7la$adas al His$o .ooI
2i -uiere usar el mismo &unto de enganc>e con m0s de un scri&tI sim&lemente >aga multidimensional su
declaracin de arra,I asHG
$hook['pre_controller'][] = array(
'class' => 'Mi_clase',
'function' => 'Mi_funcion',
'filename' => 'Mi_clase.php',
Gua del Usuario de CodeIgniter Versin 2.1.3 64
'filepath' => 'hooks',
'params' => array('cerveza', 'vino', 'soda')
);
$hook['pre_controller'][] = array(
'class' => 'Mi_otra_clase',
'function' => 'Mi_otra_funcion',
'filename' => 'Mi_otra_clase.php',
'filepath' => 'hooks',
'params' => array('rojo', 'amarillo', 'azul')
);
Advierta los corc>etes des&us de cada Hndice de arra,G
$hook['pre_controller'][]
1sto le &ermite tener el mismo &unto de enganc>e con varios scri&ts. 1l orden -ue de@ine su arra, ser0 el orden de
e%ecucin.
3untos de Engan%=e
6a siguiente es la lista de &untos de enganc>e dis&oni*les.
preBs;ste$
6lamado mu, &ronto durante la e%ecucin del sistema. 1n este &untoI solamente se cargaron las clases de
>oo;s , *enc>mar;. 3o ocurri ning:n ruteo u otro &roceso.
preB%ontroller
6lamado inmediatamente antes de -ue cual-uiera de sus controladores >a,a sido llamado. 2e >icieron
todas las clases *aseI ruteo , veri@icaciones de seguridad.
postB%ontrollerB%onstru%tor
6lamado inmediatamente des&us -ue su controlador se instanciI &ero antes -ue >a,a ocurrido cual-uier
llamada a un mtodo.
postB%ontroller
6lamado inmediatamente des&us -ue su controlador se e%ecut com&letamente.
displa;Boverride
Anula la @uncin Bdispla;+,I usada &ara enviar la &0gina @inali"ada al navegador =e* al @inal de la
e%ecucin del sistema. 1sto le &ermite usar su &ro&ia metodologHa de im&resin. Advierta -ue necesitar0
re@erenciar al su&ero*%eto CI con ?t=is@ACI ST getBinstan%e+, , luego los datos @inali"ados estar0n
dis&oni*les llamando a ?t=is@ACI@Aoutput@AgetBoutput+,
%a%=eBoverride
6e &ermite llamar a su &ro&ia @uncin en lugar de la @uncin Bdispla;B%a%=e+, en la clase Gutput. 1sto
le &ermite usar su &ro&io mecanismo de visuali"acin del cac>.
postBs;ste$
6lamado des&us -ue la &0gina @inal renderi"ada se envHe al navegadorI en el @inal de la e%ecucin del
sistema , des&us -ue los datos @inali"ados se envHan al navegador.
Gua del Usuario de CodeIgniter Versin 2.1.3 65
Carga 0uto$'ti%a de Re%ursos
CodeIgniter viene con una @uncionalidad de Ncarga autom0ticaN -ue &ermite cargar *i*liotecasI >el&ersI , modelos
&ara iniciali"arlos autom0ticamente cada ve" -ue se e%ecuta el sistema. 2i necesita glo*almente ciertos recursos a
travs de su a&licacinI &or comodidad de*erHa considerar cargarlos autom0ticamente.
6os siguientes elementos se cargan autom0ticamenteG
Clases del 3:cleo encontradas en la car&eta Nli"rariesN
Arc>ivos 9el&er encontrados en la car&eta N=elpersN
Arc>ivos &ersonali"ados de con@iguracin encontrados en la car&eta N%on#igN
Arc>ivos de idioma encontrados en la car&eta Ns;ste$languageN
'odelos encontrados en la car&eta N$odelsN
Para cargar autom0ticamente los recursosI a*ra el arc>ivo appli%ation%on#igautoload.p=p , agregue el Htem
-ue -uiere -ue se cargue al arra, aautoload. 1ncontrar0 instrucciones en ese arc>ivo corres&ondientes a cada
ti&o de Htem.
:ota< 3o inclu,a la e<tensin del arc>ivo J.p=pK al agregar elementos al arra, aautoload.
Gua del Usuario de CodeIgniter Versin 2.1.3 66
>un%iones Co$unes
CodeIgniter usa unas &ocas @unciones &ara su o&eracin -ue se de@inen glo*almente , est0n dis&oni*les en
cual-uier lugar. 1stas @unciones no re-uieren cargar ninguna *i*lioteca o >el&er.
isBp=p+Lnu$eroBdeBversionL,
isBp=p+, determina si la versin de P9P usada es ma,or o igual -ue el nu$eroBdeBversion suministrado.
if (is_php('5.3.0'))
{
$str = quoted_printable_encode($str);
}
Devuelve el *ooleano !RUE si la versin instalada de P9P es ma,or o igual -ue el n:mero de versin
suministrado. Devuelve >076E si la versin instalada de P9P es menor -ue el n:mero de versin suministrado.
isBreall;BCrita"le+Lrutaalar%=ivoL,
isBCrita"le+, devuelve !RUE en servidores ?indo=s cuando realmente no se &uede escri*ir en el arc>ivoI ,a
-ue el sistema o&erativo le in@orma >076E a P9P solamente si el atri*uto de solo lectura est0 marcado. 1sta
@uncin determina si un arc>ivo es escri*i*le realmente al intentar escri*ir &rimero en l. Por lo general slo se
recomienda en las &lata@ormas donde esta in@ormacin &uede no ser @ia*le.
if (is_really_writable('file.txt'))
{
echo "Podra escribir lo que quiera";
}
else
{
echo "No se puede escribir en el archivo";
}
%on#igBite$+L%laveBdeBite$L,
6a @orma &re@erida &ara acceder a la in@ormacin de con@iguracin es la Clase Con#ig. 2in em*argoI
%on#igBite$+, se &uede usar &ara recu&erar claves sim&les. Para m0s in@ormacinI lea la documentacin de la
Clase Con#ig.
s=oCBerror+L$ensaDeL,J s=oCB-0-+LpaginaL,J logB$essage+LnivelLJ L$ensaDeL,
Cada uno de estos se descri*e en la &0gina 'ane%o de 1rrores.
setBstatusB=eader+%odigoJ Lte1toL,
6e &ermite esta*lecer manualmente el enca*e"ado de estado del servidor. 1%em&loG
set_status_header(401);
// Establece el encabezado como: No autorizado
!ea a-uH la lista com&leta de enca*e"ados.
Gua del Usuario de CodeIgniter Versin 2.1.3 67
re$oveBinvisi"leB%=ara%ters+?str,
1sta @uncin evita la insercin de caracteres nulos entre caracteres A2CII como Davab0scri&t.
=t$lBes%ape+?$i1ed,
1sta @uncin &ro&orciona un acceso directo a la @uncin =t$lspe%ial%=ars+,. Ace&ta cadenas , arra,s. 1s mu, :til
&ara evitar Cross 2ite 2cri&ting JE22K.
Gua del Usuario de CodeIgniter Versin 2.1.3 68
Ruteo URI
3ormalmente >a, una relacin de uno a uno entre una cadena de 786 , su corres&ondiente claseOmtodo
controlador. 6os segmentos en una 78I usualmente siguen este &atrnG
ejemplo.com/clase/funcion/id/
2in em*argo en algunos casosI se &uede rema&ear esta relacin &ara -ueI en su lugarI se llame a una
claseO@uncin di@erente de la corres&ondiente a la 786.
Por e%em&loI digamos -ue -uiere -ue sus 786s tengan este &rototi&oG
e%em&lo.comO&roductoO1O
e%em&lo.comO&roductoO/O
e%em&lo.comO&roductoOO
e%em&lo.comO&roductoO#O
7sualmente el segundo segmento de la 786 se reserva &ara el nom*re de la @uncinI &ero en el e%em&lo anterior
est0 el ID del &roducto. Para su&erar estoI CodeIgniter te &ermite rema&ear el gestor de 78I.
Esta"le%er sus 3ropias Reglas de Ruteo
6as reglas de ruteo est0n de@inidas en su arc>ivo appli%ation%on#igroutes.p=p. 1n l ver0 un arra, llamado
?route -ue le &ermite es&eci@icar sus &ro&ios criterios de ruteo. 6as rutas se &ueden es&eci@icar sea usando
Co$odines como E1presiones Regulares.
Co$odines
7n comodHn tH&ico &uede lucir asHG
$route['producto/:num'] = "catalogo/producto_lookup";
1n una rutaI la clave del arra, contiene la 78I -ue de*e coincidirI mientras -ue el valor del arra, contiene el
destino al -ue se de*e redirigir. 1n el e%em&lo anteriorI si se encuentra la &ala*ra literal N&roductoN en el &rimer
segmento de la 786I , un n:mero en el segundo segmentoI la clase NcatalogoN , el mtodo N&roductoBloo;u&N se
usan en su lugar.
Puede *uscar coincidir los valores literales o &uede usar dos ti&os de comodinesG
+<nu$, *uscar0 la coincidencia en un segmento -ue contiene n:meros solamente.
+<an;, *uscar0 la coincidencia en un segmento -ue contiene cual-uier caracter.
:ota< 6as rutas se e%ecutar0n en el orden -ue est0n de@inidas. 6as rutas m0s altas siem&re tendr0n
&recedencia so*re las m0s *a%as.
EDe$plos
A-uH >a, algunos e%em&los de ruteoG
$route['diarios'] = "blogs";
7na 786 -ue contiene la &ala*ra NdiariosN en el &rimer segmentoI se rema&ear0 a la clase N*logsN.
Gua del Usuario de CodeIgniter Versin 2.1.3 69
$route['blog/jose'] = "blogs/usuarios/34";
7na 786 -ue contiene los segmentos *logO%ose se rema&ear0 a la clase N*logsN , al mtodo NusuariosN. 1l ID se
esta*lecer0 como N#N.
$route['producto/(:any)'] = "catalogo/producto_buscar";
7na 786 con N&roductoN como &rimer segmento , cual-uier cosa en el segundoI se rema&ear0 a la clase NcatalogoN
, al mtodo N&roductoB*uscarN.
$route['producto/(:num)'] = "catalogo/producto_buscar_por_id/$1";
7na 786 con N&roductoN como &rimer segmento , un n:mero en el segundoI se rema&ear0 a la clase NcatalogoN ,
al mtodo N&roductoB*uscarB&orBidN &as0ndole una varia*le a la @uncin.
I$portante< 3o use *arras al comien"o o al @inal.
E1presiones Regulares
2i lo &re@iereI &uede usar e<&resiones regulares &ara de@inir sus reglas de ruteo. 2e &ermite cual-uier e<&resin
regular v0lidaI como son las *ac;(re@erences.
:ota< 2i usa *ac;(re@erences tiene -ue usar la sinta<is de dlar en lugar de la sinta<is de *arras invertidas
do*les.
7na regla 8eg1< tH&ica lucirHa asHG
$route['productos/([a-z]+)/(\d+)'] = "$1/id_$2";
1n el e%em&lo anteriorI una 78I similar a produ%tos%a$isetas123 llamarHa en su lugar a la clase controlador
camisetas , a la @uncin idB1/.
Cam*in &uede me"clar comodines con e<&resiones regulares.
Rutas Reservadas
9a, dos rutas reservadasG
$route['default_controller'] = 'bienvenida';
1sta ruta indica -ue la clase controlador se de*erHa cargar si la 78I no contiene datosI lo -ue ser0 el caso de
cuando la gente carga la 786 raH". 1n el e%em&lo anteriorI se cargarHa la clase N*ienvenidaN. 2e le recomienda -ue
siem&re tenga una ruta &or de@ectoI ,a -ue de lo contrarioI a&arecer0 una &0gina #0# &or de@ecto.
$route['404_override '] = '';
1sta ruta indica la clase de controlador se de*erHa cargar si no se encuentra al controlador solicitado. 1sto anular0
a la &0gina &or de@ecto del error #0#. 1sto no a@ectar0 a la @uncin s=oCB-0-+,I -ue continuar0 cargando el
Gua del Usuario de CodeIgniter Versin 2.1.3 70
arc>ivo errorB-0-.p=p &or de@ecto en appli%ationerrorserrorB-0-.p=p.
I$portante< 6as rutas reservadas tienen -ue estar antes -ue cual-uier ruta con comodines o e<&resiones
regulares.
Gua del Usuario de CodeIgniter Versin 2.1.3 71
HaneDo de Errores
CodeIgniter le &ermite armar un re&orte de errores en sus a&licaciones usando las @unciones descri&tas de*a%o.
Adem0sI tiene una clase de registro de errores -ue &ermite -ue los mensa%es de error , de&uracin se guarden
como arc>ivos de te<to.
:ota< Por de@ectoI CodeIgniter muestra todos los errores de P9P. PodrHa desear cam*iar este com&ortamiento
una ve" -ue el desarrollo se com&lete. 1ncontrar0 la @uncin errorBreporting+, u*icada en la &arte su&erior
del arc>ivo inde1.p=p &rinci&al. Des>a*ilitar el re&orte de errores 3) evitar0 -ue los arc>ivos de registro se
escri*an si >a, errores.
A di@erencia de la ma,orHa de los sistemas en CodeIgniterI las @unciones de error son inter@aces sim&les de
&rocedimientos -ue est0n dis&oni*les glo*almente a lo largo de la a&licacin. 1ste en@o-ue le &ermite a los
mensa%es de error dis&ararse sin tener -ue &reocu&arse acerca del 0m*ito de clasesO@unciones.
6as siguiente @unciones le &ermiten generar erroresG
s=oCBerror+L$ensaDeL KJ int ?%odigoBestadoS )00 M ,
1sta @uncin mostrar0 el mensa%e de error suministrado a ellaI usando la siguiente &lantilla de errorG
appli%ationerrorserrorBgeneral.p=p
1l &ar0metro o&cional ?%odigoBestado determina -ue cdigo de estado de 9CCP se de*erHa enviar con el error.
s=oCB-0-+Lp'ginaL KJ LlogBerrorLM,
1sta @uncin mostrar0 el mensa%e del error #0# &ro&orcionado a ella usando la siguiente &lantilla de errorG
appli%ationerrorserrorB-0-.p=p
6a @uncin es&era -ue la cadena &asada a ella sea la ruta de arc>ivo a la &0gina -ue no se encuentra. Advierta -ue
CodeIgniter autom0ticamente muestra mensa%es #0# si no se encuentran los controladores.
CodeIgniter registra autom0ticamente cual-uier llamada a s=oCB-0-+,. 1l registro se detiene cuando se
esta*lece el segundo &ar0metro o&cional a >076E.
logB$essage+LlevelL J L$essageL,
1sta @uncin le &ermite escri*ir mensa%es en sus arc>ivos de registro. Ciene -ue suministrar uno de los tres
NnivelesN en el &rimer &ar0metroI indicando -ue ti&o de mensa%e es Jde*ugI errorI in@oKI , el mensa%e en el
segundo &ar0metro. 1%em&loG
if ($alguna_variable == "")
{
log_message('error', 'alguna_variable no contena valor.');
}
else
{
log_message('debug', 'alguna_variable est bien establecida');
}
log_message('info', 'El propsito de alguna_variable es proveer algn valor.');
Gua del Usuario de CodeIgniter Versin 2.1.3 72
9a, tres ti&os de mensa%esG
1. HensaDes de Error. 1stos son errores realesI tales como errores de P9P o errores del usuario.
/. HensaDes de Fepura%in. 1stos son mensa%es -ue lo asisten en la de&uracin. Por e%em&loI si una clase
@ue iniciali"adaI &odrHa registrar esto como in@ormacin de de&uracin.
. HensaDes In#or$ativos. 1stos son los mensa%es de menor &rioridadI -ue sim&lemente dan in@ormacin
acerca de alg:n &roceso. CodeIgniter no genera nativamente ning:n mensa%e de in@ormacinI &ero &uede
-uerer >acerlo en su a&licacin.
:ota< Para -ue realmente se escri*a el arc>ivo de registroI la car&eta NlogsN tiene -ue ser escri*i*le. Adem0sI
tiene -ue esta*lecerse NlogBt>res>oldN en appli%ation%on#ig%on#ig.p=p. Por e%em&loI &odrHa desear -ue se
registren solamente los mensa%es de errorI , no los otros dos ti&os. 2i lo esta*lece a ceroI el registro estar0
des>a*ilitado.
Gua del Usuario de CodeIgniter Versin 2.1.3 73
0l$a%ena$iento en Ca%=9 de 3'ginas We"
CodeIgniter le &ermite cac>ear sus &0ginas con el @in de lograr el m0<imo rendimiento.
Aun-ue CodeIgniter es *astante r0&idoI la cantidad de in@ormacin din0mica -ue muestra en sus &0ginas se
correlacionar0n directamente con los recursos del servidorI memoria , ciclos de &rocesamiento utili"adosI -ue
a@ectan la velocidad de carga de sus &0ginas. Al cac>ear sus &0ginasI como se guardan en su estado
com&letamente renderi"adasI se &uede alcan"ar un rendimiento -ue se a&ro<ima al de las &0ginas =e* est0ticas.
2C$o >un%iona el 0l$a%ena$iento en Ca%=95
1l almacenamiento en cac> se &uede >a*ilitar &or &0ginaI , se &uede esta*lecer la cantidad de tiem&o -ue una
&0gina de*erHa &ermanecer cac>eada antes -ue sea re@rescada. Cuando se carga una &0gina &or &rimera ve"I se
escri*ir0 el arc>ivo de cac> a su car&eta appli%ation%a%=e. 1n las siguientes cargas de la &0ginaI se
recu&erar0 el arc>ivo de cac> , se lo enviar0 al navegador del usuario -ue la solicite. 2i caducI se *orrar0 ,
re@rescar0 antes de ser enviada al navegador.
:ota< 6a eti-ueta Benc>mar; no se cac>eaI &or lo -ue todavHa &uede ver la velocidad de carga de su &0gina
cuando el almacenamiento en cac> est0 >a*ilitado.
.a"ilitar el 0l$a%ena$iento en Ca%=9
Para >a*ilitar el almacenamiento en cac>I &oner la siguiente eti-ueta en cual-uiera de sus @unciones controladorG
$this->output->cache(n);
Donde n es la cantidad de minutos -ue desea -ue la &0gina &ermane"ca cac>eada entre re@rescos.
6a anterior eti-ueta &uede ir en cual-uier &arte dentro de una @uncin. 3o se ve a@ectada &or el orden en -ue
a&areceI &or lo -ue u*H-uela donde sea m0s lgico &ara 7d. 7na ve" -ue la eti-ueta est0 en su lugarI las &0ginas
comien"an a cac>earse.
0ten%in< De*ido a la @orma en -ue CodeIgniter almacena el contenido &ara la im&resinI el almacenamiento
en cac> @uncionar0 solamente si se est0 generando salida &ara su controlador con una vista.
:ota< Antes -ue se &uedan escri*ir los arc>ivos de cac>I se tienen -ue esta*lecer los &ermisos de arc>ivo en
su car&eta appli%ation%a%=e &ara -ue se &ueda escri*ir.
&orrar Ca%=9s
2i no desea m0s cac>ear un arc>ivoI &uede -uitar la eti-ueta de almacenamiento en cac> , no se re@rescar0 m0s
cuando cadu-ue. :ota< 1l cac> no se *orrar0 inmediatamente &or-ue se -uite la eti-ueta. Cendr0 -ue caducar
normalmente. 2i necesita -uitarlo antesI de*er0 *orrarlo manualmente de la car&eta de cac>.
Gua del Usuario de CodeIgniter Versin 2.1.3 74
3er#ilar su 0pli%a%in
6a Clase 3ro#iler mostrar0 los resultados de la evaluacin de desem&e+oI consultas -ue e%ecuteI , los datos
?B3G6! al @inal de sus &0ginas. 1sta in@ormacin &uede ser :til durante el desarrollo &ara a,udar con la
de&uracin , la o&timi"acin.
Ini%iali8ar la Clase
I$portante< 1sta clase :G necesita inciali"arse. 6a Clase Gutput la carga autom0ticamente si el &er@ilado
est0 >a*ilitado como se muestra m0s a*a%o.
0%tivar el 3er#ilador
Para >a*ilitar el &er@ilador u*icar la siguiente @uncin en cual-uier &arte dentro de sus @unciones del controladorG
$this->output->enable_profiler(TRUE);
Al >a*ilitarseI se genera un re&orte , se lo inserta al @inal de sus &0ginas.
Para des>a*ilitar el &er@iladorI usar0G
$this->output->enable_profiler(FALSE);
Esta"le%er 3untos de Evalua%in de Fese$peo
Para -ue el Per@ilador com&ile , muestre sus datos de evaluacin de desem&e+oI tiene -ue marcar &untos usando
una sinta<is es&ecH@ica.
Por @avor lea la in@ormacin so*re cmo esta*lecer &untos de evaluacin de desem&e+o en la &0gina de la Clase
&en%=$arI.
.a"ilitando ; Fes=a"ilitando 6e%%iones del 3er#ilador
Cada seccin de los datos del Per@ilador se &uede >a*ilitar o des>a*ilitar esta*leciendo la corres&ondiente varia*le
de con@iguracin a !RUE o >076E. 1sto se &uede >acer de una de dos @ormas. PrimeroI &uede esta*lecer los
valores m0s am&lios &or de@ecto de la a&licacin con el arc>ivo de con@iguracin
appli%ation%on#igpro#iler.p=p.
$config['config'] = FALSE;
$config['queries'] = FALSE;
1n sus controladoresI &uede anular los valores &or de@ecto , valores del arc>ivo de con@iguracin llamando al
mtodo setBpro#ilerBse%tions+, de la Clase GutputG
$sections = array(
'config' => TRUE,
'queries' => TRUE
);
$this->output->set_profiler_sections($sections);
Gua del Usuario de CodeIgniter Versin 2.1.3 75
1n la siguiente ta*la se descri*en las secciones dis&oni*les , el arra, usado &ara accederlas.
Clave Fes%rip%in
3or
Fe#e%to
"en%=$arIs
Ciem&o transcurrido de los &untos de 1valuacin de Desem&e+o , tiem&o total de
e%ecucin
C871
%on#ig !aria*les de Con@iguracin de CodeIgniter C871
%ontrollerBin#o Clase Controller , mtodos re-ueridos C871
get Cual-uier dato A1C &asado en la solicitud C871
=ttpB=eaders 1nca*e"ados 9CCP &ara la solicitud actual C871
$e$or;Busage Cantidad de memoria consumida &or la solicitud actualI en *,tes C871
post Cual-uier dato P)2C &asado en la solicitud C871
4ueries
6istado de todas las consultas de *ase de datos e%ecutadasI inclu,endo el tiem&o
de e%ecucin
C871
uriBstring 6a 78I de la solicitud actual C871
Gua del Usuario de CodeIgniter Versin 2.1.3 76
0d$inistrar 0pli%a%iones
Por de@ecto se asume -ue tiene la intencin de usar CodeIgniter &ara administrar una sola a&licacinI la -ue
armar0 en su directorio appli%ation. 2in em*argo es &osi*le tener varios con%untos de a&licaciones -ue
com&arten una sola instalacin de CodeIgniterI o incluso renom*rar o relocali"ar su car&eta appli%ation.
Reno$"rar la Carpeta de la 0pli%a%in
2i -uisiera renom*rar su car&eta appli%ationI &uede >acerlo siem&re , cuando a*ra su arc>ivo inde1.p=p
&rinci&al , esta*le"ca su nom*re usando la varia*le ?appli%ationB#olderG
$application_folder = "application";
Reu"i%ar la Carpeta de la 0pli%a%in
1s &osi*le mover su car&eta appli%ation a una u*icacin di@erente en su servidor -ue la car&eta s;ste$. Para
>acer estoI a*ra su arc>ivo inde1.p=p &rinci&al , esta*le"ca una ruta com&leta de servidor en la varia*le
?appli%ationB#older.
$application_folder = "/ruta/a/su/aplicacion";
EDe%utar Varias 0pli%a%iones %on una Instala%in de CodeIgniter
2i -uisiera com&artir una instalacin com:n de CodeIgniter &ara administrar varias a&licaciones di@erentesI
sim&lemente &onga todos los directorios locali"ados dentro de su car&eta appli%ation dentro de su &ro&ia
su*car&eta.
Por e%em&loI digamos -ue -uiere crear dos a&licacionesI N@ooN , N*arN. PodrHa estructurar sus car&etas de a&licacin
de este modoG
application/foo/
application/foo/config/
application/foo/controllers/
application/foo/errors/
application/foo/libraries/
application/foo/models/
application/foo/views/
application/!ar/
application/!ar/config/
application/!ar/controllers/
application/!ar/errors/
application/!ar/libraries/
application/!ar/models/
application/!ar/views/
Para seleccionar una a&licacin en &articular &ara su usoI se necesita -ue a*ra su arc>ivo inde1.p=p &rinci&al ,
esta*le"ca varia*le ?appli%ationB#older. Por e%em&loI &ara seleccionar la a&licacin N@ooN &ara su usoI de*erHa
>acer estoG
$application_folder = "application/foo";
Gua del Usuario de CodeIgniter Versin 2.1.3 77
:ota< Cada una de sus a&licaciones necesitar0 su &ro&io arc>ivo inde1.p=p -ue llama la a&licacin deseada.
1l arc>ivo inde1.p=p &uede llamarse de la manera -ue desee.
Gua del Usuario de CodeIgniter Versin 2.1.3 78
6inta1is 0lternativa de 3.3 para 0r%=ivos de Vistas
2i no utili"a el motor de &lantillas de CodeIgniterI estar0 usando P9P &uro en sus arc>ivos de vistas. Para minimi"ar
el cdigo P9P en esos arc>ivosI , &ara >acerlo m0s @0cil &ara identi@icar *lo-ues de cdigoI se recomienda -ue use
la sinta<is alternativa de P9P &ara estructuras de control , sentencias de eco con eti-uetas cortas. 2i no est0
@amiliari"ado con esta sinta<isI sta le &ermite eliminar las llaves de su cdigoI , eliminar las sentencias Nec>oN.
6oporte 0uto$'ti%o para Eti4uetas Cortas
:ota< 2i encuentra -ue la sinta<is descri&ta en esta &0gina no @unciona en su servidor esto &uede de*erse a
-ue Ns>ort tagsN est0 des>a*ilitado en su arc>ivo ini de P9P. CodeIgniter rescri*ir0 o&cionalmente las eti-uetas
cortas al vueloI &ermitindole usar esa sinta<is a:n si su servidor no la so&orta. 1sta @uncionalidad se &uede
>a*ilitar en su arc>ivo appli%ation%on#ig%on#ig.p=p.
Por @avor advierta -ue si usa esta @uncionalidadI si se encuentran errores de P9P en sus arc>ivos de vistasI el
n:mero de lHnea , mensa%e de error no se mostrar0n con &recisin. 1n cam*ioI todos los errores se mostrar0n
como errores de eval+,.
E%os 0lternativos
3ormalmente &ara >acer eco o im&rimir una varia*le >arHa estoG
<?php echo $variable; ?>
Con la sinta<is alternativa &odrHa >acer eso de esta otra @ormaG
<?=$variable?>
Estru%turas de Control 0lternativas
6as estructuras de controlI como i#I #orI #orea%=I , C=ile se &ueden escri*ir tam*in de @orma sim&li@icada. A-uH
>a, un e%em&lo usando #orea%=G
<ul>
12pp foreac &%todo as %item'( 23
<li>124%item23</li>
12pp endforeac5 23
</ul>
Advierta -ue no >a, llaves. 1n cam*ioI la llave @inal se reem&la" con end#orea%=. Cada una de las estructuras de
control listadas anteriormente tiene una sinta<is similar de cierreG endi#I end#orI end#orea%=I , endC=ile.
Cam*in advierta -ue en lugar de usar un &unto , coma des&us de cada estructura Je<ce&to en la :ltimaKI >a,
dos &untos. Z1sto es im&ortante[
A-uH >a, otro e%em&lo usando i#Oelsei#Oelse. Advierta los dos &untosG
Gua del Usuario de CodeIgniter Versin 2.1.3 79
12pp if &%usuario 44 6sara6'( 23
<h3>Hola Sara</h3>
12pp elseif &%usuario 44 67ose6'( 23
<h3>Hola Jose</h3>
12pp else( 23
<h3>Hola usuario desconocido</h3>
12pp endif5 23
Gua del Usuario de CodeIgniter Versin 2.1.3 80
6eguridad
1sta &0gina descri*e algunas N*uenas &r0cticasN en materia de seguridad =e* , detalles de caracterHsticas de la
seguridad interna de CodeIgniter.
6eguridad URI
CodeIgniter es *astante restrictivo en cuanto a los caracteres -ue &ermite en las cadenas 78I &ara a,udar a
minimi"ar las &osi*ilidades -ue datos maliciosos se &uedan &asar a la a&licacin. 6as 78Is solamente &ueden
contener lo siguienteG
Ce<to al@anumrico
CildeG c
PuntoG .
Dos &untosG G
Auin de su*ra,adoG B
AuinG (
RegisterBglo"als
Durante la iniciali"acin del sistema todas las varia*les glo*ales se destru,enI e<ce&to a-uellas -ue se encuentran
en los arra,s ?B3G6! , ?BCGGXIE. 6a rutina de destruccin es lo mismo -ue >acer registerBglo"als S o##.
errorBreporting
1n entornos de &roduccinI es normalmente desea*le des>a*ilitar el re&orte de errores de P9P esta*leciendo la
*andera interna errorBreporting al valor 0. 1sto des>a*ilita los errores nativos de P9P evitando -ue se &resenten
&or &antallaI los -ue &ueden contener in@ormacin sensi*le.
1sta*lecer la constante E:VIRG:HE:! de CodeIgniter en el arc>ivo inde1.p=p al valor Yprodu%tionYI
desconectar0 esos errores. 1n el modo de desarrolloI se recomienda -ue se use el valor Y develop$entY. 2e &uede
encontrar m0s in@ormacin acerca de la di@erencia entre entornos en la &0gina 'ane%ar !arios 1ntornos.
$agi%B4uotesBrunti$e
6a directiva $agi%B4uotesBrunti$e se desactiva durante la iniciali"acin del sistemaI &or lo -ue no tiene -ue
-uitar las *arras cuando recu&ere datos desde la *ase de datos.
&uenas 3r'%ti%as
Antes de ace&tar cual-uier datos en su a&licacinI ,a sean datos 3G6! desde el envHo de un @ormularioI datos de
CGGXIEI datos de 78II datos E'6(8PC dataI o a:n datos desde el arra, 6ERVERI se le recomienda &racticar este
en@o-ue de tres &asosG
$iltrar los datos como si estuvieran contaminados.
!alidar los Datos &ara asegurar -ue cum&len con el ti&o correctoI longitudI tama+oI etc. Ja veces este &aso
&uede reem&la"ar al anteriorK.
1sca&ar los datos antes de meterlos en la *ase de datos.
CodeIgniter &rovee las siguientes @unciones &ara asistirlo en este &rocesoG
>iltrado Y66
CodeIgniter viene con un @iltro contra E22 JCross 2ite 2cri&tingK. 1ste @iltro *usca tcnicas com:nmente
Gua del Usuario de CodeIgniter Versin 2.1.3 81
usadas &ara em*e*er cdigo Davascri&t malicioso en sus datos u otro ti&o de cdigo -ue intente secuestrar
coo;ies o >acer otras cosas maliciosas. 1l $iltro de E22 se descri*e a-uH.
Validar los Fatos
CodeIgniter tiene una Clase &ara !alidacin de $ormularios -ue lo a,uda en la validacinI @iltrado ,
&re&aracin de sus datos.
Es%apar !odos los Fatos 0ntes de Insertarlos en la &ase de Fatos
3unca inserte in@ormacin en su *ase de datos sin esca&arla. Para m0s in@ormacinI &or @avorI lea la
seccin -ue discute las consultas.
Gua del Usuario de CodeIgniter Versin 2.1.3 82
Estilo ; 6inta1is Generales
6a siguiente &0gina descri*e el uso de reglas de codi@icacin usadas al desarrollar CodeIgniter.
>or$ato de 0r%=ivo
6os arc>ivos de*erHan guardarse con codi@icacin 7nicode J7C$(8K. :o de*erHa usarse el B)'. A di@erencia de 7C$(
16 , 7C$(/I no >a, un *it de orden &ara indicar en un arc>ivo codi@icado con 7C$(8I , el B)' &uede tener
e@ectos colaterales negativos en P9P en el envHo de la salidaI evitando -ue la a&licacin sea ca&a" de esta*lecer
sus enca*e"ados. 2e de*erHan usar las terminaciones de lHnea de 7ni< J6$K.
1sta es la @orma de a&licar esas con@iguraciones en los editores de te<to m0s comunes. 6as instrucciones &ara su
editor de te<to &ueden variar` lea la documentacin de su editor.
!e1tHate
1. A*ra las Pre@erencias de la A&licacin
/. 9acer clic en Avan"adoI , luego en la sola&a NAuardarN
. 1n NCodi@icacin de Arc>ivoNI seleccione N7C$(8 JrecomendadoKN
#. 1n NCerminacin de 6HneaNI seleccione N6$ JrecomendadoKN
4. )&cionalG 'ar-ue NCam*in usar &ara los arc>ivos e<istentesN si desea modi@icar las terminaciones de lHnea
de arc>ivos -ue a*re &ara las nuevas &re@erencias.
&&Edit
1. A*ra las Pre@erencias de la A&licacin
/. 2eleccione NCodi@icaciones del Ce<toN en la i"-uierda.
. 1n NCodi@icacin del te<to &ara nuevos documentosNI seleccione N7nicode J7C$(8I sin B)'KN
#. )&cionalG 1n N2i no se &uede determinar la codi@icacin del arc>ivoI usarNI seleccione N7nicode J7C$(8I sin
B)'KN
4. 2elecciones NArc>ivos de Ce<toN en la i"-uierda.
6. 1n N2altos de 6Hnea &or De@ectoNI seleccione N'ac )2 E , 7ni< J6$KN
Eti4ueta de Cierre de 3.3
6a eti-ueta de cierre de P9P en un documento P9P 5A es o&cional &ara el anali"ador de P9P. 2in em*argoI si se
usaI cual-uier es&acios en *lanco -ue siga a la eti-ueta de cierreI sea introducida &or el desarrolladorI el usuario o
una a&licacin $CPI &uede causar una salida no deseadaI errores de P9PI o si la :ltima se su&rimeI &0ginas en
*lanco. Por esta ra"nI todos los arc>ivos de P9P de*erHan GHI!IR la eti-ueta de cierre de P9PI , en su lugar
usar un *lo-ue de comentario &ara marcar el @in del arc>ivo , su u*icacin relativa a la raH" de la a&licacin. 1sto le
&ermite a:n identi@icar al arc>ivo como com&leto , no trunco.
I/89,,.8+9(
<?php
echo "Este es mi cdigo!";
?>
89,,.8+9(
<?php
echo "Este es mi cdigo";
/* Fin del archivo mi_archivo.php */
Gua del Usuario de CodeIgniter Versin 2.1.3 83
/* Ubicacin: ./system/modules/mi_modulo/mi_archivo.php */
:o$en%latura de Clases ; H9todos
6os nom*res de clases siem&re de*erHan comen"ar con una letra ma,:scula. !arias &ala*ras se de*erHan se&arar
con un guin de su*ra,ado , no usar CamelCase. Codos los otros mtodos de clase se de*erHan escri*ir
com&letamente en min:sculas , su nom*re de*erHa indicar claramente su @uncinI inclu,endo &re@eri*lemente un
ver*o. Crate de evitar los nom*res demasiado largos , detallados.
I/89,,.8+9(
class superclass
class SuperClass
89,,.8+9(
class Super_class
class Super_class {
function __construct()
{

}
}
1%em&los de una nomenclatura de mtodos adecuada e inadecuadaG
I/89,,.8+9(
function fileproperties() // no es descriptivo y necesita un guin de
// subrayado de separacin
function fileProperties() // no es descriptivo y usa CamelCase
function getfileproperties() // Mejor! Pero todava le falta el guin de
// subrayado de separacin
function getFileProperties() // usa CamelCase
function get_the_file_properties_from_the_file() // demasiada palabrera
89,,.8+9(
function get_file_properties() // descriptivo, guin de subrayado de separacin y
// todas la letras son minsculas
:o$"res de Varia"le
6a directri" &ara el nom*ramiento de varia*les es mu, similar al usado &ara mtodos de clase. ConcretamenteI las
varia*les de*erHan contener solamente letras min:sculasI usar guiones de su*ra,ado como se&aradores , tener un
nom*re -ue ra"ona*lemente indi-ue su &ro&sito , contenido. !aria*les de nom*re mu, corto o sin &ala*ras se
de*erHan usar solamente como iteradores en ciclos #or+,.
I/89,,.8+9(
$j = 'foo'; // las variables de una sola letra se deberan usar solamente en
// ciclos for()
$Str // contiene letras maysculas
$bufferedText // usas CamelCase y podra acortarse sin perder sentido semntico
$groupid // varias palabras, necesita un separador de guin de subrayado
$name_of_last_city_used // demasiado largo
Gua del Usuario de CodeIgniter Versin 2.1.3 84
89,,.8+9(
for ($j = 0; $j < 10; $j++)
$str
$buffer
$group_id
$last_city
Co$entarios
1n generalI el cdigo de*e ser comentado de @orma &rolH@ica. 3o slo a,uda a descri*ir el @lu%o , la intencin del
cdigo &ara los &rogramadores con menos e<&erienciaI sino -ue &uede resultar mu, valiosa al regresar a su &ro&io
cdigo meses des&us en lHnea. 3o >a, un @ormato esta*lecido &ara comentariosI &ero se recomienda lo siguiente.
1stilo de comentarios DocBloc; -ue &recede declaraciones de clases , mtodosI -ue &uede ser levantado &or los
ID1sG
/**
* Super Clase
*
* @package Nombre del paquete
* @subpackage Subpaquete
* @category Categora
* @author Nombre del autor
* @link http://ejemplo.com
*/
class Super_clase {
/**
* Codifica una cadena para usarla en XML
*
* @access public
* @param string
* @return string
*/
function xml_encode($str)
7sar comentarios en lHnea sim&le dentro del cdigoI de%ando una lHnea en *lanco entre un *lo-ue largo de
comentarios , el cdigo.
// rompe las cadenas mediante caracteres de nueva lnea
$parts = explode("\n", $str);
// Un comentario ms grande de lo que necesita para dar un gran detalle de lo que
// est ocurriendo y porque puede usar varios comentarios de lnea simple. Trate
// de mantener un ancho razonable, alrededor de 70 caracteres es ms fcil para
// leer. No dude en vincular recursos externos que pueden proveer grandes
// detalles:
//
// http://ejemplo.com/informacion_acerca_de_algo/en_particular/
$parts = $this->foo($parts);
Gua del Usuario de CodeIgniter Versin 2.1.3 85
Constantes
6as constantes siguen las mismas directrices -ue las varia*lesI e<ce&to -ue las constantes siem&re de*erHan
escri*irse com&letamente en ma,:sculas. 2iem&re usar constantes de CodeIgniter cuando sea adecuadoI &or
e%em&loI 26A29I 6DI 8DI PAC9BCAC91I etc.
I/89,,.8+9(
myConstant // falta el guin de subrayado y no est completamente en maysculas
N // no hay constantes de una sola letra
S_C_VER // no es descriptivo
$str = str_replace('{foo}', 'bar', $str); // debera usar las constantes LD y RD
89,,.8+9(
MY_CONSTANT
NEWLINE
SUPER_CLASS_VERSION
$str = str_replace(LD.'foo'.RD, 'bar', $str);
!RUEJ >076E ; :U77
6as &ala*ras clave !RUEI >076E , :U77 siem&re de*erHan escri*irse com&letamente en ma,:sculas.
I/89,,.8+9(
if ($foo == true)
$bar = false;
function foo($bar = null)
89,,.8+9(
if ($foo == TRUE)
$bar = FALSE;
function foo($bar = NULL)
Gperadores 7gi%os
2e desaconse%a el uso de ZZ dado -ue la claridad de algunos dis&ositivos de salida es *a%a J&or e%em&loI &odrHa
verse como el n:mero 11K. 1s &re@eri*le TT en lugar de 0:F &ero am*os son ace&ta*les , un es&acio siem&re
de*erHa &receder , seguir a [.
I/89,,.8+9(
if ($foo || $bar)
if ($foo AND $bar) // ok, pero no se recomienda para las aplicaciones comunes de
// resaltado de sintaxis
if (!$foo)
if (! is_array($foo))
89,,.8+9(
if ($foo OR $bar)
if ($foo && $bar) // recomendado
if ( ! $foo)
if ( ! is_array($foo))
Co$parar Valores de Retorno ; !;pe%asting
Algunas @unciones de P9P devuelven >076E en caso de @allaI &ero tam*in &uede >a*er un valor de retorno v0lido
de NN o 0I lo -ue se evaluarHa como >076E en com&araciones &oco &recisas. 2ea e<&lHcito al com&arar el ti&o de
Gua del Usuario de CodeIgniter Versin 2.1.3 86
varia*le al usar esos valores de retorno en condicionales &ara asegurar -ue el valor de retorno es en realidad lo
-ue es&eraI , no un valor -ue tiene un e-uivalente de evaluacin de ti&o rela%ado.
7se el mismo rigor cuando en el retorno , veri@icacin de sus &ro&ias varia*les. 7se SSS , OSS seg:n sea
necesario.
I/89,,.8+9(
// Si 'foo' est al inicio de la cadena, strpos devolver un 0,
// resultando esta evaluacin condicional como TRUE
if (strpos($str, 'foo') == FALSE)
89,,.8+9(
if (strpos($str, 'foo') === FALSE)
I/89,,.8+9(
function build_string($str = "")
{
if ($str == "") // oh-oh! Qu ocurre si se pasa como argumento FALSE o el
// entero 0?
{
}
}
89,,.8+9(
function build_string($str = "")
{
if ($str === "")
{
}
}
!ea tam*in acerca del t,&ecastingI lo -ue &uede ser mu, :til. 1l t,&ecasting tiene un e@ecto ligeramente distinto
-ue &uede ser desea*le. Al convertir una varia*le a una cadenaI &or e%em&loI las varia*les :U77 , >076E se
convierten en cadenas vacHasI 0 J, otros n:merosK se convierten en cadenas de dHgitosI , el *ooleano !RUE se
convierte en N1NG
$str = (string) $str; // trata a $str como una cadena
Cdigo de Fepura%in
3o se &uede de%ar cdigo de de&uracin en el lugar a menos -ue se lo comenteI &or e%em&loI ninguna llamada a
varBdu$p+,I printBr+,I die+,I o e1it+, usada durante la creacin de un com&lemento.
// print_r($foo);
Espa%ios en &lan%o en 0r%=ivos
6os es&acios en *lanco no &ueden &receder a la eti-ueta de a&ertura de P9P o seguir a la eti-ueta de cierre de
P9P. 6a salida se almacena en *:@erI &or lo tanto los es&acios en *lanco en sus arc>ivos &ueden &rovocar -ue la
salida comience antes -ue CodeIgniter im&rima su contenidoI conduciendo a errores , a la inca&acidad de
CodeIgniter de enviar los enca*e"ados adecuados. 1n el siguiente e%em&loI seleccione el te<to con el ratn &ara
revelar los es&acios en *lanco I3C)881CC)2.
Gua del Usuario de CodeIgniter Versin 2.1.3 87
I:CGRREC!G<
<?php
// ...hay un espacio en blanco y un salto de lnea antes de la etiqueta de
// apertura de PHP
// as como un espacio en blanco despus de la etiqueta de cierre de PHP
?>
CGRREC!G<
<?php
// este ejemplo no tiene espacios en blanco antes o despus de las etiquetas
// de apertura y cierre de PHP
?>
Co$pati"ilidad
A menos -ue sea mencionado es&ecH@icamente en la documentacin de su com&lementoI todo cdigo tiene -ue ser
com&ati*le con P9P versin 4.1 o su&erior. Adem0sI no usar @unciones de P9P -ue necesiten instalar de *i*liotecas
no est0ndaresI a menos -ue su cdigo contenga un mtodo alternativo cuando la @uncin no est dis&oni*leI o
im&lHcitamente documente -ue su com&lemento necesita dic>as *i*liotecas de P9P.
:o$"res de Clases ; 0r%=ivos usando 3ala"ras Co$unes
Cuando su clase o nom*re de arc>ivo son una &ala*ra com:nI o &uede ser *astante &ro*a*le -ue nom*re igual en
otro scri&t de P9PI &roveer un &re@i%o :nico &ara a,udar a im&edir esa colisin. 2iem&re darse cuenta -ue sus
usuarios @inales &ueden e%ecutar otros com&lementos o scri&ts de P9P o de terceras &artes. 1li%a un &re@i%o -ue sea
:nico &ara identi@icarlo como desarrollador o com&a+Ha.
I/89,,.8+9(
class Email pi.email.php
class Xml ext.xml.php
class Import mod.import.php
89,,.8+9(
class Pre_email pi.pre_email.php
class Pre_xml ext.pre_xml.php
class Pre_import mod.pre_import.php
:o$"res de !a"las de &ase de Fatos
Cual-uier ta*la -ue su com&lemento &ueda usar tiene -ue tener el &re@i%o Ye1pBYI seguido &or un &re@i%o de
unicidad -ue lo identi@i-ue a 7d como desarrollador o com&a+HaI , luego un *reve nom*re descri&tivo de ta*la. 3o
necesita &reocu&arse acerca del &re@i%o de *ase de datos -ue se usa en la instalacin del usuarioI ,a -ue la clase
data*ase de CodeIgniter convertir0 autom0ticamente Ye1pBY a lo -ue realmente se usa.
I/89,,.8+9(
email_addresses // faltan ambos prefijos
pre_email_addresses // falta el prefijo exp_
exp_email_addresses // falta el prefijo nico
89,,.8+9(
exp_pre_email_addresses
Gua del Usuario de CodeIgniter Versin 2.1.3 88
:ota< Cenga en cuenta -ue ',2L6 tiene un lHmite de 6# caracteres &ara los nom*res de ta*las. 1sto no
de*erHa ser un &ro*lemaI ,a -ue los nom*res de ta*las -ue su&eran esa cantidad &ro*a*lemente no tengan
nom*res ra"ona*les. Por e%em&loI el siguiente nom*re de ta*la e<cede esta limitacin &or un caracter. Conto
]no^ e1pBpreBe$ailBaddressesBo#BregisteredBusersBinBseattleBCas=ington
Un 0r%=ivo por Clase
7sar arc>ivos se&arados &ara cada clase -ue su com&lemento useI a menos -ue las clases estn estrec>amente
relacionadas. 7n e%em&lo de arc>ivos de CodeIgniter -ue contienen varias clases es el arc>ivo de la clase
Fata"aseI -ue contiene tanto a la clase F& como a la clase F&BCa%=eI , el com&lemento HagpieI -ue contiene
tanto a la clase Hagpie como a 6noop;.
Espa%ios en &lan%o
7sar ta*uladores en lugar de es&acios en *lanco en su cdigo. 1sto &uede &arecer una &e-ue+e"I &ero usando
ta*uladores en lugar de es&acios en *lanco le &ermite al desarrollador -ue mira su cdigo &ara tener indentacin
en los niveles -ue &re@iera , &ersonali"ar en cual-uier a&licacin -ue use. R como *ene@icio colateralI resulta en
arc>ivos Jun &ocoK m0s com&actosI almacenando un caracter de ta*ulador contraI digamosI cuatro caracteres de
es&acio.
6altos de 7nea
6os arc>ivos se tienen -ue guardar con saltos de lHnea de 7ni<. 1sto es m0s un &ro*lema &ara los desarrolladores
-ue tra*a%an en ?indo=sI &ero en cual-uier casoI aseg:rese de -ue su editor de te<to est0 con@igurado &ara
guardar los arc>ivos con saltos de lHnea de 7ni<.
Indenta%in de Cdigo
7sar el estilo de indentacin de Allman. Con e<ce&cin de las declaraciones de claseI las llaves siem&re se u*ican
en lHnea con ellas mismasI e indentadas al mismo nivel -ue las sentencias de control -ue las N&oseenN.
I/89,,.8+9(
function foo($bar) {
// ...
}
foreach ($arr as $key => $val) {
// ...
}
if ($foo == $bar) {
// ...
} else {
// ...
}
for ($i = 0; $i < 10; $i++)
{
for ($j = 0; $j < 10; $j++)
{
// ...
}
}
89,,.8+9(
function foo($bar)
Gua del Usuario de CodeIgniter Versin 2.1.3 89
{
// ...
}
foreach ($arr as $key => $val)
{
// ...
}
if ($foo == $bar)
{
// ...
}
else
{
// ...
}
for ($i = 0; $i < 10; $i++)
{
for ($j = 0; $j < 10; $j++)
{
// ...
}
}
Espa%iado de 3ar9ntesis ; 7laves
1n generalI los &arntesis , las llaves no de*erHan usar es&acios adicionales. 6a e<ce&cin es -ue un es&acio
siem&re de*erHa seguir a las estructuras de control de P9P -ue ace&ten argumentos entre &arntesis Jde%lareI
do@C=ileI elsei#I #orI #orea%=I i#I sCit%=I C=ileKI &ara a,udar a distinguirlas de las @unciones e incrementar la
legi*ilidad.
I/89,,.8+9(
$arr[ $foo ] = 'foo';
89,,.8+9(
$arr[$foo] = 'foo'; // no hay espacios alrededor de la clave del array
I/89,,.8+9(
function foo ( $bar )
{
}
89,,.8+9(
function foo($bar) // no hay espacios alrededor de los parntesis en declaraciones
// de funciones
{
}
I/89,,.8+9(
foreach( $query->result() as $row )
89,,.8+9(
foreach ($query->result() as $row) // un solo espacio siguiendo las estructuras de
// control de PHP, pero no en parntesis
Gua del Usuario de CodeIgniter Versin 2.1.3 90
// interiores
!e1to 7o%ali8ado
Cual-uier te<to -ue se muestre en el &anel de controlI de*erHa usar varia*les de idioma en su arc>ivo de idioma
&ara &ermitir la locali"acin.
I/89,,.8+9(
return "Seleccin invlida";
89,,.8+9(
return $this->lang->line('seleccion_invalida');
H9todos 3rivados ; Varia"les
2e de*erHan &re@i%ar con un guin de su*ra,ado los mtodos , varia*les -ue solamente son accedidos
internamente &or su claseI tales como utilidades , >el&ers de @unciones usan &ara a*straccin del cdigo.
convert_text() // mtodo publico
_convert_text() // mtodo privado
Errores de 3.3
1l cdigo tiene -ue e%ecutar li*re de errores , no de&ender -ue las advertencias , avisos estn ocultos &ara
cum&lir con este re-uisito. Por e%em&loI nunca acceder una varia*le -ue no esta*leci &or si mismo Jtal como
claves del arra, ?B3G6!KI sin &rimero veri@icar si est0n esta*lecidas con isset+,.
Asegurarse -ue durante el desarrollo de su com&lementoI el re&orte de errores est >a*ilitado &ara C)D)2 los
usuarios , -ue displa;Berrors est0 >a*ilitado en el entorno de P9P. Puede veri@icar esto conG
if (ini_get('display_errors') == 1)
{
exit "Habilitado";
}
1n algunos servidores donde displa;Berrors est0 des>a*ilitadoI , no tiene la &osi*ilidad de cam*iar esto en el
p=p.iniI a menudo se &uede >a*ilitar conG
ini_set('display_errors', 1);
:ota< 1sta*lecer el &ar0metro displa;Berrors con iniBset+, en tiem&o de e%ecucinI no es lo mismo -ue
tenerlo >a*ilitado en el entorno de P9P. 1s decirI no tendr0 ning:n e@ecto si el scri&t contiene errores @atales.
Eti4uetas de 0pertura Cortas
7sar siem&re eti-uetas de a&ertura de P9P com&letasI en caso -ue el servidor no tenga >a*ilitada la directiva
s=ortBopenBtag.
I/89,,.8+9(
Gua del Usuario de CodeIgniter Versin 2.1.3 91
<? echo $foo; ?>
<?=$foo?>
89,,.8+9(
<?php echo $foo; ?>
Una 6enten%ia por 7nea
3unca com*inar sentencias en una sola lHnea.
I/89,,.8+9(
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
89,,.8+9(
$foo = 'this';
$bar = 'that';
$bat = str_replace($foo, $bar, $bag);
Cadenas
2iem&re use cadenas de comillas sim&les a menos -ue necesite varia*les anali"adasI , en casos donde necesite
varia*les anali"adasI use llaves &ara im&edir 0vidos an0lisis sint0cticos de elementos. Cam*in &uede usar cadenas
de comillas do*les si la cadena contiene comillas sim&lesI &or lo tanto no >a, necesidad de esca&ar caracteres.
I/89,,.8+9(
"Mi cadena" // no hay anlisis de variables, por
// lo tanto no use comillas dobles
"Mi cadena $foo" // se necesitan llaves
'SELECT foo FROM bar WHERE baz = \'bag\'' // repugnante
89,,.8+9(
'Mi cadena'
"Mi cadena {$foo}"
"SELECT foo FROM bar WHERE baz = 'bag'"
Consultas 6N7
6as &ala*ras clave de ',2L6 se &onen siem&re en ma,:sculasG 2161CCI I3218CI 7PDAC1I ?9181I A2I D)I3I )3I
I3I etc.
Dividir las consultar largas en varias lHneas &ara darles legi*ilidadI &re@eri*lemente cortando en cada cl0usula.
I/89,,.8+9(
// las palabras clave estn en minsculas y las consultas son demasiado largas
// para una lnea simple (... indica continuacin de lnea)
$query = $this->db->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz
...from exp_pre_email_addresses
...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");
Gua del Usuario de CodeIgniter Versin 2.1.3 92
89,,.8+9(
$query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
FROM exp_pre_email_addresses
WHERE foo != 'oof'
AND baz != 'zab'
ORDER BY foobaz
LIMIT 5, 100");
0rgu$entos 3or Fe#e%to de >un%iones
Cuando sea adecuadoI &roveer argumentos &or de@ecto a las @uncionesI -ue a,udan a evitar errores de P9P con
llamadas errneas , &roveen valores comunes alternativos -ue &ueden salvar unas &ocas lHneas de cdigo.
1%em&loG
function foo($bar = '', $baz = FALSE)
Gua del Usuario de CodeIgniter Versin 2.1.3 93
Es%ri"ir Fo%u$enta%in
Para a,udar a escri*ir un estilo de documentacin @0cil de leer , consistente &ara &ro,ectos CodeIgniterI 1llis6a* le
da li*remente a la Comunidad el cdigo de la AuHa del 7suario de CodeIgniter &ara su uso. Para su comodidad se
cre un arc>ivo de &lantilla -ue inclu,e *lo-ues de marcado usados con e%em&los *reves.
0r%=ivos
.oDa de Estilos
!ea el arc>ivo userBguideuserguide.%ss de su instalacin.
3lantilla de 3'gina
!ea el arc>ivo userBguidedo%Bst;lete$plate.=t$l de su instalacin.
Gua del Usuario de CodeIgniter Versin 2.1.3 94
Re#eren%ia de Clases
Gua del Usuario de CodeIgniter Versin 2.1.3 95
Clase &en%=$arI
CodeIgniter tiene una clase &ara evaluar el desem&e+o -ue est0 siem&re activaI &ermitiendo -ue se calcule la
di@erencia de tiem&o entre dos &untos cuales-uiera marcados.
:ota< 1l sistema iniciali"a autom0ticamente esta claseI &or lo -ue no >a, necesidad de >acerlo manualmente.
Adem0sI la evaluacin de desem&e+o siem&re arranca en el momento -ue se invoca al @rame=or;I , la termina la
clase GutputI %usto antes de enviar la vista @inal al navegadorI &ermitiendo mostrar una medicin de tiem&o mu,
e<acta de la e%ecucin del sistema al com&leto.
Usar la Clase &en%=$arI
6a Clase &en%=$arI se &uede usar dentro de sus controladoresI vistasI o modelos. 1l &roceso de uso esG
1. 'arcar un &unto de inicio
/. 'arcar un &unto de @in
. 1%ecutar la @uncin Nela&sed timeN &ara ver el resultado
1ste es un e%em&lo -ue usa cdigo realG
$this->benchmark->mark('codigo_inicio');
// Algn cdigo aqu
$this->benchmark->mark('codigo_fin');
echo $this->benchmark->elapsed_time('codigo_inicio', 'codigo_fin');
:ota< 6as &ala*ras NcodigoBinicioN , NcodigoB@inN son ar*itrarias. 2e usan sim&lemente &ara esta*lecer dos
marcadores. 2e &uede usar cual-uier &ala*ra , se &ueden esta*lecer varios con%untos de marcadores.
Considere este e%em&loG
$this->benchmark->mark('perro');
// Algn cdigo aqu
$this->benchmark->mark('gato');
// Ms cdigo aqu
$this->benchmark->mark('ave');
echo $this->benchmark->elapsed_time('perro', 'gato');
echo $this->benchmark->elapsed_time('gato', 'ave');
echo $this->benchmark->elapsed_time('perro', 'ave');
3er#ilar sus 3untos de Evalua%in
2i -uiere -ue sus datos de evaluacin de desem&e+o estn dis&oni*les &ara el Per@iladorI todos sus &untos
marcados se tienen -ue con@igurar de a &aresI , cada nom*re de &unto de marca tiene -ue terminar con Bstart ,
Bend. Por otra &arteI cada &ar de &untos se tiene -ue llamar igual. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 96
$this->benchmark->mark('mi_marca_start');
// Algn cdigo aqu...
$this->benchmark->mark('mi_marca_end');
$this->benchmark->mark('otra_marca_start');
// Ms cdigo aqu...
$this->benchmark->mark('otra_marca_end');
Para ma,or in@ormacinI lea la &0gina del Per@ilador.
Hostrar el !ie$po !otal de EDe%u%in
2i -uisiera mostrar el tiem&o total transcurrido desde el momento en -ue CodeIgniter arranca al momento @inal en
-ue la salida se envHa al navegadorI sim&lemente u*i-ue esto en una de las lHneas de la &lantilla de vistaG
<?php echo $this->benchmark->elapsed_time();?>
Advertir0 -ue es la misma @uncin usada en el e%em&lo anterior &ara calcular el tiem&o entre dos &untosI salvo -ue
no se usa ning:n &ar0metro. Cuando los &ar0metros est0n ausentesI CodeIgniter no detiene la evaluacin de
desem&e+o sino %usto antes cuando la salida @inal se envHa al navegador. 3o im&orta donde &onga la llamada a la
@uncinI el tem&ori"ador continuar0 corriendo >asta el @inal.
7na @orma alternativa &ara mostrar el tiem&o transcurrido en sus arc>ivos de vistaI es usar esta seudo(varia*leI si
&re@iere no usar P9P &uroG
{elapsed_time}
:ota< 2i -uiere evaluar cual-uier cosa dentro de su controladorI tiene -ue esta*lecer sus &ro&ios &untos de
inicioO@in.
Hostrar el Consu$o de He$oria
2i su instalacin de P9P est0 con@igurada con @@ena"le@$e$or;@li$itI &uede mostrar la cantidad de memoria
consumida &or el sistema entero usando el siguiente cdigo en uno de los arc>ivos de vistaG
<?php echo $this->benchmark->memory_usage();?>
:ota< 1sta @uncin solamente se &uede usar en sus arc>ivos de vista. 1l consumo re@le%ar0 el total de memoria
usada &or la a&licacin com&leta.
7na @orma alternativa &ara mostrar el uso de la memoria en sus arc>ivos de vistaI es usar esta seudo(varia*leI si
&re@iere no usar P9P &uroG
{memory_usage}
Gua del Usuario de CodeIgniter Versin 2.1.3 97
Clase Calendar
6a Clase Calendar le &ermite crear calendarios din0micamente. 2us calendarios se &uede @ormatear a travs del
uso de una &lantilla de calendarioI &ermitiendo control al 100d todos los as&ectos de su dise+o. Adem0sI &uede
&asarle datos a las celdas del calendario.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la Clase Calendar se iniciali"a en su controlador usando la @uncin
?t=is@Aload@Ali"rar;G
$this->load->library('calendar');
7na ve" cargadaI el o*%eto Calendar estar0 dis&oni*le usandoG ?t=is@A%alendar.
Hostrar un Calendario
A-uH >a, un e%em&lo sim&le -ue muestra como &uede mostrar un calendarioG
$this->load->library('calendar');
echo $this->calendar->generate();
1l cdigo anterior generar0 un calendario &ara el mesOa+o actuales *asado en la @ec>a del servidor. Para mostrar
un calendario &ara un mes , a+o es&ecH@icosI le &asar0 esa in@ormacin a la @uncin de generacin de calendariosG
$this->load->library('calendar');
echo $this->calendar->generate(2006, 6);
1l cdigo anterior generar0 un calendario -ue muestra el mes de %unio de /006. 1l &rimer &ar0metro es&eci@ica el
a+o , el segundo &ar0metro es&eci@ica el mes.
3asar Fatos a las Celdas del Calendario
Agregar datos a las celdas de su calendario im&lica crear un arra, asociativo en el -ue las claves corres&onden a
los dHas -ue desea llenar , los valores del arra, contienen los datos. 1l arra, se &asa como tercer &ar0metro de la
@uncin de generacin de calendarios. Considere este e%em&loG
$this->load->library('calendar');
$data = array(
3 => 'http://ejemplo.com/noticias/articulo/2006/03/',
7 => 'http://ejemplo.com/noticias/articulo/2006/07/',
13 => 'http://ejemplo.com/noticias/articulo/2006/13/',
26 => 'http://ejemplo.com/noticias/articulo/2006/26/'
);
echo $this->calendar->generate(2006, 6, $data);
7sando el e%em&lo anteriorI los dHas n:mero I 7I 1 , /6 se convertir0n en enlaces -ue a&untan a las 786s
&rovistas.
Gua del Usuario de CodeIgniter Versin 2.1.3 98
:ota< Por de@ecto se asume -ue su arra, contendr0 enlaces. 1n la seccin -ue e<&lica las &lantillas de
calendarioI ver0 cmo &uede &ersonali"ar la @orma en -ue se &asan los datos a las celdasI &or lo -ue &uede
&asar distinto ti&o de in@ormacin.
Esta"le%er las 3re#eren%ias de Visuali8a%in
9a, siete &re@erencias -ue &uede esta*lecer &ara controlar varios as&ectos del calendario. 6as &re@erencias se
esta*lecen al &asar un arra, de &re@erencias en el segundo &ar0metro de la @uncin de carga. A-uH >a, un
e%em&loG
$prefs = array (
'start_day' => 'saturday',
'month_type' => 'long',
'day_type' => 'short'
);
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();
1l cdigo anterior comen"arHa el calendario en s0*adoI usando el enca*e"ado de mes NlargoN , los nom*res de los
dHas NcortosN. '0s in@ormacin acerca de las &re@erenciasI m0s a*a%o.
3re#eren%ia 3or Fe#e%to Gp%iones Fes%rip%in
te$plate 3inguno 3inguno
7na cadena conteniendo la &lantilla de
calendario. !ea la seccin de &lantillas m0s
a*a%o.
lo%alBti$e timeJK 3inguno
7na marca de tiem&o de 7ni< corres&ondiente a
la >ora actual.
startBda; sunda,
Cual-uier dHa de la semana
Jsunda,I monda,I tuesda,I
etc.K
1sta*lece el dHa de la semana con el -ue el
calendario de*erHa comen"ar.
$ont=Bt;pe long longI s>ort
Determina -u versin del nom*re del mes usa el
enca*e"ado. long e Danuar,I s>ort e Dan.
da;Bt;pe a*r longI s>ortI a*r
Determina -u versin del nom*re del dHa de la
semana usan los enca*e"ados de columna. long
e 2unda,I s>ort e 2unI a*r e 2u.
s=oCBne1tBprev $A621 C871O$A621 J*ooleanoK
Determina si mostrar enlaces -ue le &ermiten
cam*iar a meses siguienteOanterior. !er
in@ormacin acerca de esta @uncionalidad m0s
a*a%o.
ne1tBprevBurl 3inguno 7na 786
1sta*lece la ruta *0sica usada en los enlaces de
calendario siguienteOanterior.
Hostrar Enla%es de Hes 6iguiente0nterior
Para &ermitirle a su calendario incrementarOdecrementar din0micamente mediante los enlaces siguienteOanteriorI se
necesita -ue con@igure el cdigo de su calendario similar a este e%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 99
$prefs = array (
'show_next_prev' => TRUE,
'next_prev_url' => 'http://ejemplo.com/index.php/calendar/show/'
);
$this->load->library('calendar', $prefs);
echo $this->calendar->generate($this->uri->segment(3), $this->uri->segment(4));
Advertir0 unas &ocas cosas acerca del e%em&lo anteriorG
Ciene -ue esta*lecer Ns>o=Bne<tB&revN a !RUE.
Ciene -ue &ro&orcionar la 786 al controlador -ue contiene su calendario en la &re@erencia Nne<tB&revBurlN.
Ciene -ue &ro&orcionar el Na+oN , NmesN a la @uncin -ue genera el calendario mediante segmentos 78I
donde a&arecen J:ota< 6a Clase Calendar autom0ticamente agrega el a+oOmes a la 786 *ase -ue 7d
&rove,K.
Crear una 3lantilla de Calendario
Al crear una &lantilla de calendarioI 7d tiene el control total so*re el dise+o del calendario. Cada com&onente de su
calendario se u*icar0 dentro de un &ar de seudo(varia*les como se muestra a-uHG
$prefs['template'] = '
:ta!le_open;<table border="0" cellpadding="0" cellspacing="0">:)ta!le_open;
:eading_ro<_start;<tr>:)eading_ro<_start;
:eading_pre*ious_cell;<th><a href="{previous_url}">&lt;&lt;</a></th>
:)eading_pre*ious_cell;
:eading_title_cell;<th colspan="{colspan}">{heading}</th>
:)eading_title_cell;
:eading_next_cell;<th><a href="{next_url}">&gt;&gt;</a></th>
:)eading_next_cell;
:eading_ro<_end;</tr>:)eading_ro<_end;
:<ee=_ro<_start;<tr>:)<ee=_ro<_start;
:<ee=_da>_cell;<td>{week_day}</td>:)<ee=_da>_cell;
:<ee=_ro<_end;</tr>:)<ee=_ro<_end;
:cal_ro<_start;<tr>:)cal_ro<_start;
:cal_cell_start;<td>:)cal_cell_start;
:cal_cell_content;<a href="{content}">{day}</a>:)cal_cell_content;
:cal_cell_content_toda>;<div class="highlight">
<a href="{content}">{day}</a></div>:)cal_cell_content_toda>;
:cal_cell_no_content;{day}:)cal_cell_no_content;
:cal_cell_no_content_toda>;<div class="highlight">{day}</div>
:)cal_cell_no_content_toda>;
:cal_cell_!lan=;&nbsp;:)cal_cell_!lan=;
:cal_cell_end;</td>:)cal_cell_end;
:cal_ro<_end;</tr>:)cal_ro<_end;
:ta!le_close;</table>:)ta!le_close;
';
Gua del Usuario de CodeIgniter Versin 2.1.3 100
$this->load->library('calendar', $prefs);
echo $this->calendar->generate();
Gua del Usuario de CodeIgniter Versin 2.1.3 101
Clase Cart
6a Clase Cart &ermite -ue los Htems se agreguen a la sesin -ue &ermanece activa mientras un usuario est0
navegando su sitio. 1stos Htems se &uede recu&erar , mostrar en un @ormato est0ndar de Ncarrito de com&rasNI
&ermitindole al usuario actuali"ar o -uitar Htems del carrito.
Por @avor advierta -ue la Clase Cart 2)6A'13C1 &rovee @uncionalidad de NcarritoN. 3o &rovee @uncionalidades de
envHoI autori"acin de tar%eta de crdito u otro &rocesamiento adicional.
Ini%iali8ar la Clase Cart
I$portante< 6a Clase Cart usa la Clase 6ession de CodeIgniter &ara guardar la in@ormacin del carrito en la
*ase de datosI &or lo tantoI antes de usar la Clase Cart tiene -ue esta*lecer una ta*la de *ase de datos como se
indica en la documentacin de la Clase 6ession , esta*lecer las &re@erencias de la sesin en su arc>ivo
appli%ation%on#ig%on#ig.p=p &ara utili"ar una *ase de datos.
Para iniciali"ar la Clase Cart en su controladorI use la @uncin ?t=is@Aload@Ali"rar;G
$this->load->library('cart');
7na ve" cargadaI el o*%eto Cart estar0 dis&oni*le usandoG ?t=is@A%art.
:ota< 6a Clase Cart cargar0 e iniciali"ar0 a la Clase 6ession autom0ticamenteI &or lo -ue a menos -ue est
usando sesiones en otra &arte de su a&licacinI no necesita cargar la Clase 6ession.
0gregar un [te$ al Carrito
Para agregar un Htem al carritoI sim&lemente &ase un arra, con la in@ormacin del &roducto a la @uncin ?t=is@
A%art@Ainsert+,I seg:n se muestra a-uHG
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
);
$this->cart->insert($data);
I$portante< 6os &rimeros cuatro Hndices del arra, anterior JidI -t,I &riceI and nameK son o*ligatorios. 2i omite
alguno de ellosI los datos no se guardar0n en el carrito. 1l -uinto Hndice Jo&tionsK es o&cional. 1st0 &ensado
&ara usarse en casos donde su &roducto tiene o&ciones asociadas con l. 7se un arra, &ara o&cionesI como se
muestra arri*a.
Gua del Usuario de CodeIgniter Versin 2.1.3 102
6os cinco Hndices reservados sonG
id ( Cada &roducto en el almacn tiene un identi@icador :nico. 3ormalmente ser0 un Ns;uN u otra
identi@icacin.
4t; ( 1s la cantidad -ue se est0 com&rando.
pri%e ( 1s el &recio del Htem.
na$e ( 1s el nom*re del Htem.
options ( Cual-uier atri*uto adicional -ue es necesario &ara identi@icar al &roducto. Cienen -ue &asarse
mediante un arra,.
Adem0s de los cinco Hndices de arri*aI >a, dos &ala*ra reservadasG roCid , su"total. 2e usan internamente en la
Clase CartI &or lo -ue :G de*e usar esas &ala*ras como Hndices al insertar datos en el carrito.
2u arra, &uede contener datos adicionales. Cual-uier cosa -ue inclu,a en el arra,I se guardar0 en la sesin. 2in
em*argoI lo me%or es la estandari"acin de los datos entre todos sus &roductos con el @in de mostrar la in@ormacin
en una ta*la m0s @0cil.
0gregar Varios [te$s al Carrito
1s &osi*le agregar en una sola accin varios &roductos al carrito al usar un arra, multidimensional. 1sto es :til en
casos donde desea &ermitirle a la gente seleccionar entre varios Htems de la misma &0gina.
$data = array(
array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
),
array(
'id' => 'sku_567ZYX',
'qty' => 1,
'price' => 9.95,
'name' => 'Coffee Mug'
),
array(
'id' => 'sku_965QRS',
'qty' => 1,
'price' => 29.95,
'name' => 'Shot Glass'
)
);
$this->cart->insert($data);
Hostrar el Carrito
Para mostrar el carrito crear0 un arc>ivo de vista con cdigo similar al mostrado a continuacin.
Por @avor advierta -ue este e%em&lo usa el >el&er @orm.
<?php echo form_open('ruta/al/controller/update/function'); ?>
<table cellpadding="6" cellspacing="1" style="width:100%" border="0">
<tr>
Gua del Usuario de CodeIgniter Versin 2.1.3 103
<th>Cantidad</th>
<th>Descripcin</th>
<th style="text-align:right">Precio</th>
<th style="text-align:right">Sub-Total</th>
</tr>
<?php $i = 1; ?>
<?php foreach ($this->cart->contents() as $items): ?>
<?php echo form_hidden($i.'[rowid]', $items['rowid']); ?>
<tr>
<td><?php echo form_input(array('name' => $i.'[qty]',
'value' => $items['qty'],
'maxlength' => '3',
'size' => '5')); ?>
</td>
<td>
<?php echo $items['name']; ?>
<?php if ($this->cart->has_options($items['rowid']) == TRUE): ?>
<p>
<?php foreach ($this->cart->product_options($items['rowid']) as
$option_name => $option_value): ?>
<strong><?php echo $option_name; ?>:</strong>
<?php echo $option_value; ?><br />
<?php endforeach; ?>
</p>
<?php endif; ?>
</td>
<td style="text-align:right">
<?php echo $this->cart->format_number($items['price']); ?>
</td>
<td style="text-align:right">
$<?php echo $this->cart->format_number($items['subtotal']); ?>
</td>
</tr>
<?php $i++; ?>
<?php endforeach; ?>
<tr>
<td colspan="2"></td>
<td class="right"><strong>Total</strong></td>
<td class="right">
$<?php echo $this->cart->format_number($this->cart->total()); ?>
</td>
</tr>
</table>
<p><?php echo form_submit('', 'Update your Cart'); ?></p>
Gua del Usuario de CodeIgniter Versin 2.1.3 104
0%tuali8ar el Carrito
Para actuali"ar la in@ormacin del carritoI tiene -ue &asar un arra, conteniendo el RoC IF , la cantidad a la
@uncin ?t=is@A%art@Aupdate+,G
:ota< 2i la cantidad se esta*lece a ceroI se eliminar0 el Htem del carrito.
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);
$this->cart->update($data);
// O un array multidimensional
$data = array(
array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
),
array(
'rowid' => 'xw82g9q3r495893iajdh473990rikw23',
'qty' => 4
),
array(
'rowid' => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
'qty' => 2
)
);
$this->cart->update($data);
2Nu9 es un RoC IF5 1l roC IF es un identi@icador :nico -ue lo genera el cdigo del carrito cuando se agrega
un Htem al carrito. 6a ra"n &or la -ue se crea un identi@icador :nico es &ara -ue los mismos &roductos con
di@erentes o&ciones &ueden ser administrados &or el carrito.
Por e%em&loI digamos -ue alguien com&ra dos camisetas iguales Jmismo ID de &roductoKI &ero di@erentes
tama+os. 1l ID de &roducto J, otros atri*utosK ser0n idnticos &ara am*os tama+os &or-ue es la misma camiseta.
6a :nica di@erencia ser0 el tama+o. 1l carrito &or lo tantoI tiene un medio &ara identi@icar esta di@erencia &ara -ue
los dos tama+os de camisetas se &uedan mane%ar inde&endientemente. 6o >ace mediante la creacin de un :nico
Nro= IDN *asado en el ID de &roducto , algunas o&ciones asociadas a l.
1n casi todos los casosI la actuali"acin del carrito ser0 algo -ue el usuario >ace mediante la &0gina Nver carritoNI
&or lo tanto como desarrolladorI es &oco &ro*a*le -ue tenga -ue &reocu&arse &or el Nro= IDNI a&arte de
asegurarse -ue su &0gina Nver carritoN contenga esta in@ormacin en un cam&o oculto de @ormulario , asegurarse
-ue se &asa a la @uncin de actuali"acin cuando se envHa el @ormulario de actuali"acin. Para ma,or in@ormacinI
e<amine m0s a*a%o la construccin de la &0gina Nver carritoN.
Re#eren%ia de >un%iones
?t=is@A%art@Ainsert+,U
6e &ermite agregar Htems al carrito de com&rasI como se indica m0s arri*a.
Gua del Usuario de CodeIgniter Versin 2.1.3 105
?t=is@A%art@Aupdate+,U
6e &ermite actuali"ar Htems en el carrito de com&rasI como se indica m0s arri*a.
?t=is@A%art@Atotal+,U
'uestra el total del carrito.
?t=is@A%art@AtotalBite$s+,U
'uestra la cantidad de total de Htems en el carrito.
?t=is@A%art@A%ontents+,U
Devuelve un arra, conteniendo todo lo del carrito.
?t=is@A%art@A=asBoptions+roCid,U
Devuelve !RUE J*ooleanoK si una @ila en &articular del carrito contiene o&ciones. 2e dise+ esta @uncin &ara
usarla dentro de un *ucle con ?t=is@A%art@A%ontents+,I ,a -ue tiene -ue &asar el roCid a esta @uncinI como
se muestra en el e%em&lo de 'ostrar el Carrito m0s arri*a.
?t=is@A%art@Aprodu%tBoptions+roCid,U
Devuelve un arra, de o&ciones &ara un &roducto en &articular. 2e dise+ esta @uncin &ara usarla dentro de un
*ucle con ?t=is@A%art@A%ontents+,I ,a -ue tiene -ue &asar el ro=id a esta @uncinI como se muestra en el
e%em&lo de 'ostrar el Carrito m0s arri*a.
?t=is@A%art@Adestro;+,U
6e &ermite destruir el carrito. 1sta @uncin &ro*a*lemente sea llamada cuando est terminando el &rocesamiento
del &edido del cliente.
Gua del Usuario de CodeIgniter Versin 2.1.3 106
Clase Con#ig
6a Clase Con#ig &rovee un medio &ara recu&erar &re@erencias de con@iguracin. 1stas &re@erencias &ueden venir
de un arc>ivo de con@iguracin &or de@ecto Jappli%ation%on#ig%on#ig.p=pK o de sus &ro&ios arc>ivos de
con@iguracin &ersonali"ados.
:ota< 1l sistema iniciali"a autom0ticamente esta claseI &or lo -ue no >a, necesidad de >acerlo manualmente.
0nato$a de un 0r%=ivo de Con#igura%in
Por de@ectoI CodeIgniter tiene un arc>ivo &rimario de con@iguracinI locali"ado en
appli%ation%on#ig%on#ig.p=p. 2i a*re el arc>ivo usando su editor de te<to ver0 -ue los Htems de con@iguracin
se almacenan en un arra, llamado ?%on#ig.
Puede agregar sus &ro&ios Htems de con@iguracin a este arc>ivoI o si &re@iere mantener sus Htems de con@iguracin
se&arados Jasumiendo -ue necesita Htems de con@iguracinKI sim&lemente cree su &ro&io arc>ivo , gu0rdelo en la
car&eta %on#ig.
:ota< 2i crea sus &ro&ios arc>ivos de con@iguracinI use el mismo @ormato -ue el del &rimarioI almacenando sus
Htems en un arra, llamado ?%on#ig. CodeIgniter administrar0 inteligentemente estos arc>ivosI &or lo -ue no >a*r0
con@licto a:n cuando el arra, tenga el mismo nom*re Jasumiendo -ue no se re&iten los Hndices del arra,K.
Cargar un 0r%=ivo de Con#igura%in
:ota< CodeIgniter carga autom0ticamente el arc>ivo &rimario de con@iguracin
Jappli%ation%on#ig%on#ig.p=pKI &or lo -ue solamente necesitar0 cargar un arc>ivo -ue >a,a creado 7d
mismo.
9a, dos @ormas de cargar un arc>ivo de con@iguracinG
Carga Hanual
Para cargar uno de sus arc>ivos de con@iguracinI usar0 la siguiente @uncin dentro del controlador -ue lo
necesiteG
$this->config->load('nom!re_de_arci*o');
Donde no$"reBdeBar%=ivo es el nom*re de su arc>ivo de con@iguracin sin la e<tensin .&>&.
2i necesita cargar varios arc>ivos de con@iguracinI normalmente se @usionar0n en un arra, de
con@iguracin maestro. 2in em*argoI &ueden ocurrir colisiones de nom*res si nom*ra del mismo modo
Hndices de arra, en arc>ivos de con@iguracin di@erentes. Para evitar colisiones &uede esta*lecer el segundo
&ar0metro a !RUE , cada arc>ivo de con@iguracin se almacenar0 en un Hndice de arra, corres&ondiente al
nom*re del arc>ivo de con@iguracin. 1%em&loG
// Almacenado en un array con este prototipo:
// $this->config['blog_settings'] = $config
$this->config->load('!log_settings', +,-.);
Por @avor vea m0s a*a%o la seccin llamada 8ecu&erar Items de Con@iguracin &ara a&render como
recu&erar los Htems de con@iguracin esta*lecidos de esta @orma.
Gua del Usuario de CodeIgniter Versin 2.1.3 107
1l tercer &ar0metro le &ermite su&rimir los errores en caso -ue no e<ista el arc>ivo de con@iguracinG
$this->config->load('!log_settings', ?@AB., +,-.);
Carga 0uto$'ti%a
2i necesita tener glo*almente un arc>ivo de con@iguracin en &articularI &uede >acrselo cargar
autom0ticamente al sistema. Para >acer estoI a*ra el arc>ivo autoload.p=p u*icado en
appli%ation%on#igautoload.p=p , agregue su arc>ivo de con@iguracin como se indica en el arc>ivo.
Re%uperar Ite$s de Con#igura%in
Para recu&erar un Htem desde su arc>ivo de con@iguracinI use la siguiente @uncinG
$this->config->item('nom!re_item');
Donde no$"reBite$ es el Hndice del arra, ?%on#ig -ue -uiere recu&erar. Por e%em&loI &ara recu&erar su eleccin
de idioma usar0 estoG
$lang = $this->config->item('language');
6a @uncin devuelve >076E J*ooleanoK si el Htem -ue est0 intentado recu&erar no e<iste.
2i est0 usando el segundo &ar0metro de la @uncin ?t=is@A%on#ig@Aload a @in de asignar sus Htems de
con@iguracin a un Hndice es&ecH@icoI &uede recu&erarlo al es&eci@icar el nom*re del Hndice en el segundo &ar0metro
de la @uncin ?t=is@A%on#ig@Aite$+,. 1%em&loG
// Carga un archivo de configuracin llamado blog_settings.php y lo asigna a un
// ndice llamado "blog_settings"
$this->config->load('blog_settings', TRUE);
// Devuelve un tem de configuracin llamado site_name contenido dentro del array
// blog_settings
$site_name = $this->config->item('site_name', 'blog_settings');
// Una manera alternativa de especificar el mismo tem:
$blog_config = $this->config->item('blog_settings');
$site_name = $blog_config['site_name'];
Esta"le%er un Ite$ de Con#igura%in
2i -uisiera esta*lecer din0micamente un Htem de con@iguracin o cam*iar uno e<istenteI &uede >acerlo usandoG
$this->config->set_item('nombre_item', 'valor_item');
Donde no$"reBite$ es el Hndice del arra, ?%on#ig -ue -uiere cam*iarI , valorBite$ su valor.
Entornos
Puede cargar distintos arc>ivos de con@iguracin en el entorno actual. 6a constante E:VIRG:HE:! est0 de@inida
en inde1.p=pI , se descri*e en detalle en la seccin 'ane%ar !arios 1ntornos.
Gua del Usuario de CodeIgniter Versin 2.1.3 108
Para crear un arc>ivo de con@iguracin es&ecH@ico de un entornoI crear una co&ia de un arc>ivo de con@iguracin en
appli%ation%on#ig\E:VIRG:HE:!]\>I7E:0HE].p=p
Por e%em&loI &ara crear %on#ig.p=p de &roduccin :nicamenteI >arHaG
1. Crear el directorio appli%ation%on#igprodu%%ion
/. Co&iar su arc>ivo %on#ig.p=p e<istente en el directorio anterior
. 1ditar appli%ation%on#igprodu%%ion%on#ig.p=p &ara -ue contenga los &ar0metros de &roduccin
Cuando esta*le"ca la constante E:VIRG:HE:! Y&roduccionYI se cargar0n los valores &ara su nuevo arc>ivo
%on#ig.p=p solamente de &roduccin.
Puede colocar los siguientes arc>ivos de con@iguracin en car&etas es&ecH@icas del entornoG
Arc>ivos de con@iguracin de CodeIgniter &or de@ecto
2us &ro&ios arc>ivos de con@iguracin &ersonali"ados
:ota< CodeIgniter siem&re intenta cargar &rimero los arc>ivos de con@iguracin &ara el entorno actual. 2i el
arc>ivo no e<isteI el arc>ivo de con@iguracin glo*al Jes decirI se carga el de appli%ation%on#igK. 1sto
signi@ica -ue no est0 o*ligado a u*icar todos sus arc>ivos de con@iguracin en una car&eta de entorno f
solamente los arc>ivos -ue cam*ian &or entorno.
>un%iones .elper
6a Clase Con#ig tiene las siguiente @unciones >el&erG
?t=is@A%on#ig@AsiteBurl+,
1sta @uncin recu&era la 786 &ara su sitioI %unto con el valor Ninde<N -ue es&eci@ic en el arc>ivo de con@iguracin.
?t=is@A%on#ig@A"aseBurl+,
1sta @uncin devuelve la 786 de su sitioI %unto con una ruta o&cional tal como la de una >o%a de estilo o imagen.
6as dos @unciones anteriores se acceden normalmente mediante las @unciones corres&ondientes en el 9el&er 786.
?t=is@A%on#ig@As;ste$Burl+,
1sta @uncin recu&era la 786 &ara su car&eta s;ste$.
Gua del Usuario de CodeIgniter Versin 2.1.3 109
Clase Fata"ase
CodeIgniter viene con una clase de *ase de datos a*stracta mu, r0&ida , com&leta -ue so&orta tanto las
estructuras tradicionales como los &atrones 0%tive Re%ord. 6as @unciones de *ase de datos o@recen una sinta<is
clara , sencilla.
Ini%io R'pido< Cdigo de EDe$plo
6a siguiente &0gina contiene cdigo de e%em&lo mostrando como se usa la clase data"ase. Para o*tener detalles
com&letosI &or @avor lea las &0ginas individuales -ue descri*en cada @uncin.
Ini%iali8ar la Clase Fata"ase
1l siguiente cdigo carga e iniciali"a la clase data*ase *asado en los valores de su con@iguracinG
$this->load->database();
7na ve" cargada la claseI est0 lista &ara usarse como se descri*e a continuacin.
:ota< 2i todas las &0ginas necesitan accesoI se &uede conectar autom0ticamente. !ea la &0gina de cone<in
&ara m0s detalles.
Consulta Est'ndar %on Resultados HRltiples +Versin G"Detos,
$query = $this->db->query('SELECT nombre, titulo, email FROM mi_tabla');
foreach ($query->result() as $row)
{
echo $row->titulo;
echo $row->nombre;
echo $row->email;
}
echo 'Resultados totales: ' . $query->num_rows();
6a @uncin result+, anterior devuelve un arra, de o*%etos. 1%em&loG ?roC@Atitulo.
Consulta Est'ndar %on Resultados HRltiples +Versin 0rra;,
$query = $this->db->query('SELECT nombre, titulo, email FROM mi_tabla');
foreach ($query->result_array() as $row)
{
echo $row['titulo'];
echo $row['nombre'];
echo $row['email'];
}
6a @uncin resultBarra;+, anterior devuelve un arra, de Hndices de arra, est0ndar. 1%em&loG ?roCKLtituloLM.
Gua del Usuario de CodeIgniter Versin 2.1.3 110
Co$pro"ar Resultados
2i e%ecuta consultas -ue &ueden no &roducir resultadosI le aconse%amos &ro*ar &rimero de usar la @uncin
nu$BroCs+,G
$query = $this->db->query("SU CONSULTA");
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
echo $row->titulo;
echo $row->nombre;
echo $row->cuerpo;
}
}
Consulta Est'ndar %on Resultado 6i$ple
$query = $this->db->query('SELECT nombre FROM mi_tabla LIMIT 1');
$row = $query->row();
echo $row->nombre;
6a @uncin roC+, anterior devuelve un o*%eto. 1%em&loG ?roC@Ano$"re.
Consulta Est'ndar %on Resultado 6i$ple +Versin 0rra;,
$query = $this->db->query('SELECT nombre FROM mi_tabla LIMIT 1');
$row = $query->row_array();
echo $row['nombre'];
6a @uncin roCBarra;+, anterior devuelve un arra,. 1%em&loG ?roCKLno$"reLM.
Inser%in Est'ndar
$sql = "INSERT INTO mi_tabla (titulo, nombre)
VALUES (".$this->db->escape($titulo).", ".$this->db->escape($nombre).")";
$this->db->query($sql);
echo $this->db->affected_rows();
Consulta 0%tive Re%ord
1l Patrn 0%tive Re%ord le da una @orma sim&li@icada de devolver los datosG
$query = $this->db->get('nombre_de_tabla');
foreach ($query->result() as $row)
{
Gua del Usuario de CodeIgniter Versin 2.1.3 111
echo $row->titulo;
}
6a @uncin get+, anterior devuelve todos los resultados desde la ta*la suministrada. 6a clase 0%tive Re%ord
contiene un com&lemento com&leto de @unciones &ara tra*a%ar con datos.
Inser%in 0%tive Re%ord
$data = array(
'titulo' => $titulo,
'nombre' => $nombre,
'fecha' => $fecha
);
$this->db->insert('mi_tabla', $data);
// Produce: INSERT INTO mi_tabla (titulo, nombre, fecha) VALUES ('{$titulo}',
// '{$nombre}', '{$fecha}')
Gua del Usuario de CodeIgniter Versin 2.1.3 112
Con#igura%in de la &ase de Fatos
CodeIgniter tiene un arc>ivo de con@iguracin -ue le &ermite almacenar los valores de cone<in de la *ase de
datos JusuarioI contrase+aI nom*re de la *ase de datosI etc.K. 1l arc>ivo de con@iguracin est0 u*icado en
appli%ation%on#igdata"ase.p=p. Cam*in &uede esta*lecer valores de cone<in de *ase de datos &ara
entornos es&ecH@icos al u*icar data"ase.p=p en la car&eta de con@iguracin del entorno res&ectivo.
6os &ar0metros de con@iguracin se almacenan en un arra, multidimensional con este &rototi&oG
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "nombre_de_base_de_datos";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
6a ra"n &or la -ue usamos un arra, multidimensional en lugar de uno m0s sim&leI es &ara &ermitirle almacenar
o&cionalmente varios con%untos de valores de cone<in. 2iI &or e%em&loI e%ecuta varios entornos JdesarrolloI
&roduccinI &rue*aI etc.K *a%o una instalacin sim&leI &uede con@igurar un gru&o de cone<in &ara cada uno ,
luego cam*iar entre gru&os seg:n se necesite. Por e%em&loI &ara con@igurar un entorno N&rue*aN &odrHa >acer
estoG
$db['prueba']['hostname'] = "localhost";
$db['prueba']['username'] = "root";
$db['prueba']['password'] = "";
$db['prueba']['database'] = "nombre_de_base_de_datos";
$db['prueba']['dbdriver'] = "mysql";
$db['prueba']['dbprefix'] = "";
$db['prueba']['pconnect'] = TRUE;
$db['prueba']['db_debug'] = FALSE;
$db['prueba']['cache_on'] = FALSE;
$db['prueba']['cachedir'] = "";
$db['prueba']['char_set'] = "utf8";
$db['prueba']['dbcollat'] = "utf8_general_ci";
$db['prueba']['swap_pre'] = "";
$db['prueba']['autoinit'] = TRUE;
$db['prueba']['stricton'] = FALSE;
1ntoncesI &ara decirle glo*almente al sistema -ue use ese gru&oI &odrHa esta*lecer esta varia*le locali"ada en el
arc>ivo de con@iguracinG
$active_group = "prueba";
:ota< 1l nom*re N&rue*aN es ar*itrario. Puede ser cual-uiera -ue desee. Por de@ecto usamos la &ala*ra
Nde@aultN &ara la cone<in &rimariaI &ero tam*in se la &uede renom*rar a algo m0s relevante en el &ro,ecto.
Gua del Usuario de CodeIgniter Versin 2.1.3 113
0%tive Re%ord
6a Clase 0%tive Re%ord se >a*ilita o des>a*ilita glo*almente esta*leciendo la varia*le ?a%tiveBre%ord en el
arc>ivo de con@iguracin de la *ase de datos a !RUE>076E J*ooleanoK. 2i no est0 usando la Clase 0%tive
Re%ordI esta*lecer el valor a >076E usar0 menos recursos cuando la Clase Fata"ase est iniciali"ada.
$active_record = TRUE;
:ota< Algunas clases de CodeIgniterI tales como 2essionsI necesitan -ue Active 8ecords est >a*ilitado &ara
acceder a ciertas @uncionalidades.
E1pli%a%in de valores<
=ostna$e ( 1l nom*re del >ost de su servidor de *ase de datos. $recuentemente es Nlocal>ostN.
userna$e ( 1l usuario utili"ado &ara conectar con la *ase de datos.
passCord ( 6a contrase+a utili"ada &ara conectar con la *ase de datos.
data"ase ( 1l nom*re de la *ase de datos con la -ue se -uiere conectar.
d"driver ( 1l ti&o de *ase de datos. Por e%em&loG m,s-lI &ostgresI od*cI etc. Ciene -ue es&eci@icarse en
min:sculas.
d"pre#i1 ( 7n &re@i%o o&cional &ara ta*las -ue se agregar0 al nom*re de las ta*las al e%ecutar consultas
del Active 8ecord. 1sto &ermite -ue varias instalaciones de CodeIgniter com&artan una sola *ase de datos.
p%onne%t ( !RUE>076E J*ooleanoK ( 2i desea usar una cone<in &ersistente.
d"Bde"ug ( !RUE>076E J*ooleanoK ( 2i se tienen -ue mostrar los errores de la *ase de datos.
%a%=eBon ( !RUE>076E J*ooleanoK ( 2i est0 >a*ilitado el cac>eo de consultasI ver tam*in el Driver
Cac>.
%a%=edir ( 6a ruta a*soluta en el servidor del directorio de cac>eo de consultas de la *ase de datos.
%=arBset ( 1l con%unto de caracteres usado en la comunicacin con la *ase de datos.
d"%ollat \ 6a codi@icacin de caracteres usada en la comunicacin con la *ase de datos.
:ota< Para *ases de datos ',2L6 , ',2L6iI este &ar0metro se usa solamente como una co&ia de res&aldo si
el servidor est0 corriendo P9P g 4./. o ',2L6 g 4.0.7 J, las consultas de creacin de ta*las se >icieron con
DB $orgeK. 9a, una incom&ati*ilidad en P9P con $;s4lBrealBes%apeBstring+, -ue &uede >acer su sitio
vulnera*le a in,ecciones de 2L6 si est0 usando un con%unto de carateres multi(*,te , se est0n corriendo
versiones menores a esas. 6os sitios -ue usan con%untos de caracteres , ordenamiento 6atin(1 o 7C$(8 no
est0n a@ectados.
sCapBpre ( 7n &re@i%o de ta*la &or de@ecto -ue se tiene -ue intercam*iar con d"pre#i1. 1sto es :til &ara
a&licaciones distri*uidas donde &uede correr consultas escritas manualmenteI , se necesita -ue el &re@i%o
siga siendo &ersonali"a*le &or el usuario.
autoinit ( 2i conectar o no autom0ticamente a la *ase de datos cuando se carga la *i*lioteca. 2i est0
esta*lecido a >076EI la cone<in tomar0 lugar antes de e%ecutar la &rimera consulta.
stri%ton ( !RUE>076E J*ooleanoK ( 2i @or"ar cone<iones en N'odo 1strictoNI *ueno &ara asegurar el
2L6 estricto mientras se desarrolla una a&licacin.
port ( 1l n:mero de &uerto de *ase de datos. Para usar este valor tiene -ue agregar una lHnea al arra, de
con@iguracin de la *ase de datos.
$db['default']['port'] = 5432;
:ota< De&endiendo de -ue &lata@orma est usando J',2L6I PostgresI etc.K no se necesitar0n todos los
valores. Por e%em&loI al usar 2L6ite no necesitar0 suministrar un usuario o contrase+aI , la *ase de datos ser0
la ruta a su arc>ivo de *ase de datos. 6a in@ormacin anterior asume -ue est0 usando ',2L6.
Gua del Usuario de CodeIgniter Versin 2.1.3 114
Cone%tar a una &ase de Fatos
9a, dos @ormas de conectar a una *ase de datosG
Cone%tar 0uto$'ti%a$ente
6a @uncin Nauto conectarN cargar0 e instanciar0 la clase data"ase con cada carga de &0gina. Para >a*ilitar la
Nauto cone<inNI agregar la &ala*ra data*ase al arra, de la *i*liotecaI como se indica en el siguiente arc>ivoG
application/config/autoload.php
Cone%tar Hanual$ente
2i solamente algunas &0ginas re-uieren de conectividad de *ase de datosI &uede conectar manualmente a la *ase
de datos agregando esta lHnea de cdigo en cual-uier @uncin donde se la necesiteI o en el constructor de la clase
&ara >acer -ue la *ase de datos sea glo*al a esa clase.
$this->load->database();
2i la @uncin anterior no contiene in@ormacin alguna en el &rimer &ar0metroI conectar0 con el gru&o es&eci@icado
en su arc>ivo de con@iguracin de *ase de datos. Para la ma,orHa de la genteI este es el mtodo &re@erido.
3ar'$etros Fisponi"les
1. 6os valores de cone<in de la *ase de datosI &asado tanto como un arra, o como una cadena D23.
/. !RUEO>076E J*ooleanoK. 2i devolver el ID de cone<in Jver m0s a*a%o Conectar a !arias Bases de DatosK.
. !RUEO>076E J*ooleanoK. 2i >a*ilitar la Clase 0%tive Re%ord. 1sta*lecido a !RUE &or de@ecto.
Cone%tar Hanual$ente a una &ase de Fatos
1l &rimer &ar0metro de esta @uncin se &uede usar op%ional$ente &ara es&eci@icar un gru&o de *ase de datos en
&articular en el arc>ivo de con@iguracinI o incluso &uede &resentar valores de cone<in &ara una *ase de datos
-ue no se es&eci@ica en su arc>ivo de con@iguracin. 1%em&losG
Para elegir un gru&o es&ecH@ico del arc>ivo de con@iguracin &uede >acer estoG
$this->load->database('nom!re_de_grupo');
Donde no$"reBdeBgrupo es el nom*re del gru&o de cone<in en su arc>ivo de con@iguracin.
Para conectar manualmente a la *ase de datos deseadaI &uede &asar un arra, de valoresG
$config['hostname'] = "localhost";
$config['username'] = "mi_usuario";
$config['password'] = "mi_contrasea";
$config['database'] = "mi_DB";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
Gua del Usuario de CodeIgniter Versin 2.1.3 115
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";
$this->load->database($config);
Para ma,or in@ormacin so*re cada uno de estos valoresI &or @avor vea la &0gina de con@iguracin.
) &uede &resentar los valores de *ase de datos como un 3om*re de $uente de Datos JD23K. 6os D23s tienen -ue
tener este &rototi&oG
$dsn = 'dbdriver://usuario:contrasea@nombre_host/base_de_datos';
$this->load->database($dsn);
Para anular los valores de con@iguracin &or de@ecto al conectar con una cadena D23I agregar las varia*les de
con@iguracin como un -uer, string.
$dsn = 'dbdriver://usuario:contrasea@nombre_host/base_de_datos?
char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/ruta/al/cache';
$this->load->database($dsn);
Cone%tar a Varias &ases de Fatos
2i necesita conectar a m0s de una *ase de datos simult0neamenteI &uede >acer lo siguienteG
$DB1 = $this->load->database('grupo_uno', TRUE);
$DB2 = $this->load->database('grupo_dos', TRUE);
:ota< Cam*iar las &ala*ras Ngru&oBunoN , Ngru&oBdosN a los nom*res de gru&o es&ecH@icos &ara los -ue est0
conectando Jo &ase los valores de cone<in como se indic antesK.
1sta*leciendo el segundo &ar0metro a !RUE J*ooleanoK la @uncin devolver0 el o*%eto data*ase.
Al conectar de este modoI usar0 su nom*re de o*%eto &ara e%ecutar comandos en lugar de la sinta<is usada en
esta guHa. 1n otras &ala*rasI en lugar de e%ecutar comandos conG
$this->db->query();
$this->db->result();
etc...
1n su lugar usar0G
$DB1->query();
$DB1->result();
etc...
Gua del Usuario de CodeIgniter Versin 2.1.3 116
Re%one%tar Hantener la Cone1in Viva
2i se e<cede el tiem&o de es&era de inactividad del servidor de *ase de datos mientras est0 reali"ando alguna
tarea &esada de P9P J&or e%em&loI &rocesando una imagenKI de*erHa considerar >acer &ing al servidor usando el
mtodo re%onne%t+, antes de enviar otras consultasI el cual &uede mantener la cone<in viva o resta*lecerla.
$this->db->reconnect();
Cerrar Hanual$ente la Cone1in
'ientras -ue CodeIgniter se encarga inteligentemente de cerrar las cone<iones de *ases de datosI la cone<in se
&uede cerrar e<&lHcitamente.
$this->db->close();
Gua del Usuario de CodeIgniter Versin 2.1.3 117
Consultas
?t=is@Ad"@A4uer;+,
Para reali"ar una consultaI usar la siguiente @uncinG
$this->db->query('PONER AQUI LA CONSULTA');
6a @uncin 4uer;+, devuelve un o*%eto de resultado de *ase de datos cuando se e%ecutan consultas ti&o NleerNI las
cuales &uede usar &ara mostrar sus resultados. Cuando se e%ecutan consultas ti&o Nescri*irN la @uncin
sim&lemente devuelve !RUE o >076E de&endiendo del <ito o @racaso. Al devolver datosI normalmente asignar0
la consulta a una varia*leI asHG
$query = $this->db->query('PONER AQUI LA CONSULTA');
?t=is@Ad"@Asi$pleB4uer;+,
1sta es una versin sim&i@icada de la @uncin ?t=is@Ad"@A4uer;+,. 6G70HE:!E devuelve !RUE>076E en
caso de <ito o @racaso. :G devuelve un con%unto de resultados de *ase de datosI ni esta*lece el tem&ori"ador de
consultasI ni com&ila datos enla"adosI o almacena consultas &ara de&uracin. 2im&lemente le &ermite reali"ar una
consulta. 6a ma,orHa de los usuarios rara ve" usan esta @uncin.
0gregar Hanual$ente 3re#iDos de &ase de Fatos
2i con@igur un &re@i%o de *ase de datos , -uisiera agregarlo manualmenteI &uede usar lo siguiente.
$this->db->dbprefix('nombre_de_tabla');
// imprime: prefijo_nombre_de_tabla
3roteger Identi#i%adores
1n muc>as *ases de datos es recomenda*le &roteger las ta*las , nom*res de cam&os ( &or e%em&lo con *ac;tic;s
en ',2L6. 6as consultas del 0%tive Re%ord est0n &rotegidas autom0ticamenteI sin em*argoI si necesita &roteger
manualmente un identi@icadorI &uede usarG
$this->db->protect_identifiers('nombre_de_tabla');
1sta @uncin tam*in agregar0 un &re@i%o de ta*la a su ta*la asumiendo -ue tiene un &re@i%o esta*lecido en su
arc>ivo de con@iguracin de la *ase de datos. Para >a*ilitar el &re@i%adoI esta*lecer a !RUE J*ooleanoK el segundo
&ar0metroG
$this->db->protect_identifiers('nombre_de_tabla', TRUE);
Es%apar Consultas
1s una mu, *uena &r0ctica de seguridad esca&ar los datos antes de enviarlos a la *ase de datos. CodeIgniter tiene
tres mtodos &ara a,udarle a >acer estoG
1. ?t=is@Ad"@Aes%ape+,< 1sta @uncin determina el ti&o de datos &or lo -ue solamente &uede esca&ar
datos de cadena. Cam*in autom0ticamente agrega comillas sim&les alrededor de los datosI &or lo -ue 7d
no tiene -ue >acerloG
Gua del Usuario de CodeIgniter Versin 2.1.3 118
$sql = "INSERT INTO tabla (titulo) VALUES(".$this->db->escape($titulo).")";
/. ?t=is@Ad"@Aes%apeBstr+,< 1sta @uncin esca&a los datos &asados a ellaI inde&endientemente del ti&o.
6a ma,orHa de las veces usar0 la @uncin anterior en lugar de esta. 7sar esta @uncin asHG
$sql = "INSERT INTO tabla (titulo) VALUES('".
$this->db->escape_str($titulo)."')";
. ?t=is@Ad"@Aes%apeBliIeBstr+,< 2e de*erHa usar este mtodo cuando las cadenas se usan en
condiciones 6Ih1 &or lo -ue los comodines de 6Ih1 JYdYI YBYK en cadenas tam*in se esca&an
adecuadamente.
$search = '20% raise';
$sql = "SELECT id FROM tabla WHERE column LIKE '%".
$this->db->escape_like_str($search)."%'";
Enla8ado de Consultas
1l enla"ado le &ermiten sim&li@icar la sinta<is de sus consultasI al &ermitir -ue el sistema %unte las consultas &or
7d. Considere el siguiente e%em&loG
$sql = "SELECT * FROM alguna_tabla WHERE id = ? AND estado = ? AND autor = ?";
$this->db->query($sql, array(3, 'vivo', 'Ricardo'));
6os signos de &regunta en la consulta se reem&la"an autom0ticamente con los valores en el arra, en el segundo
&ar0metro de la @uncin 4uer;+,.
1l *ene@icio secundario de usar enla"ado es -ue los valores se esca&an autom0ticamenteI &roduciendo
consultas m0s seguras. 3o tiene -ue recordar esca&ar manualmente los datos` el motor lo >ace
autom0ticamente &or 7d.
Gua del Usuario de CodeIgniter Versin 2.1.3 119
Generar Resultados de Consultas
9a, varias @ormas de generar resultados de consultasG
result+,
1sta @uncin devuelve un arra; de o"DetosI o un arra; va%o en caso de @alla. 3ormalmenteI 7d usar0 esta
@uncin en un *ucle #orea%=I como esteG
$query = $this->db->query("SU CONSULTA");
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
6a @uncin anterior es un alias de resultBo"De%t+,.
2i e%ecuta consultas -ue &ueden no &roducir un resultadoI lo animamos a &ro*ar &rimero el resultadoG
$query = $this->db->query("SU CONSULTA");
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
}
Cam*in &uede &asar una cadena a result+,I la -ue re&resenta una clase a instanciar &or cada o*%eto de resultado
Jnota< se tiene -ue cargar esta claseK.
$query = $this->db->query("SELECT * FROM users;");
foreach ($query->result('User') as $user)
{
echo $row->name; // llamar atributos
echo $row->reverse_name(); // o mtodos definidos en la clase 'User'
}
resultBarra;+,
1sta @uncin devuelve un resultado de consulta como un arra, &uroI o un arra, vacHo cuando no se &roduce
resultado. 3ormalmenteI usar0 esta @uncin dentro de un *ucle #orea%=I asHG
$query = $this->db->query("SU CONSULTA");
foreach ($query->result_array() as $row)
{
Gua del Usuario de CodeIgniter Versin 2.1.3 120
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
roC+,
1sta @uncin devuelve una @ila sim&le de resultado. 2i su consulta tiene m0s de una @ilaI devolver0 solamente la
&rimera. 1l resultado se devuelve como un o"Deto. A-uH >a, un e%em&lo de usoG
$query = $this->db->query("SU CONSULTA");
if ($query->num_rows() > 0)
{
$row = $query->row();
echo $row->title;
echo $row->name;
echo $row->body;
}
2i -uiere -ue se devuelva una @ila es&ecH@icaI tiene -ue enviar el n:mero de @ila como un dHgito en el &rimer
&ar0metroG
$row = $query->row(5);
Cam*in &uede agregar un segundo &ar0metro de cadenaI -ue es el nom*re de la clase con la -ue instanciar la
@ilaG
$query = $this->db->query("SELECT * FROM users LIMIT 1;");
$query->row(0, 'User')
echo $row->name; // llamar atributos
echo $row->reverse_name(); // o mtodos definidos en la clase 'User'
roCBarra;+,
Idntica a la @uncin roC+, anteriorI salvo -ue devuelve un arra,. 1%em&loG
$query = $this->db->query("SU CONSULTA");
if ($query->num_rows() > 0)
{
$row = $query->row_array();
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
Gua del Usuario de CodeIgniter Versin 2.1.3 121
2i -uiere -ue se devuelva una @ila es&ecH@icaI &uede enviar el n:mero de @ila como un dHgito en el &rimer
&ar0metroG
$row = $query->row_array(5);
Adem0sI &uede ir >acia adelanteOatr0sO&rimeraO:ltima en sus resultadosI usando estas variacionesG
$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()
Por de@ectoI devuelven un o*%etoI a menos -ue &onga la &ala*ra Narra,N en el &ar0metroG
$row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')
>un%iones .elper de Resultados
?4uer;@Anu$BroCs+,
Cantidad de @ilas devueltas &or la consulta. :ota< 1n este e%em&loI ?4uer; es la varia*le a la -ue se le asigna el
o*%eto de resultado de la consultaG
$query = $this->db->query('SELECT * FROM mi_tabla');
echo $query->num_rows();
?4uer;@Anu$B#ields+,
Cantidad de CA'P)2 JcolumnasK devueltos &or la consulta. Asegurarse de llamar la @uncin usando su o*%eto de
resultado de consultaG
$query = $this->db->query('SELECT * FROM mi_tabla');
echo $query->num_fields();
?4uer;@A#reeBresult+,
6i*era la memoria asociada con el resultado , *orra el ID del recurso de resultado. 3ormalmente P9P li*era su
memoria autom0ticamente al @inal de la e%ecucin del scri&t. 2in em*argoI si est0 e%ecutando un montn de
consultas en un scri&t en &articularI &odrHa -uerer li*erar el resultado des&us de -ue cada resultado de consulta
se >a,a generado de @orma de reducir el consumo de memoria. 1%em&loG
$query = $this->db->query('SELECT title FROM mi_tabla');
foreach ($query->result() as $row)
{
echo $row->title;
}
Gua del Usuario de CodeIgniter Versin 2.1.3 122
$query->free_result(); // El objeto de resultado $query no estar ms disponible
$query2 = $this->db->query('SELECT name FROM alguna_tabla');
$row = $query2->row();
echo $row->name;
$query2->free_result(); // El objeto de resultado $query2 no estar ms disponible
Gua del Usuario de CodeIgniter Versin 2.1.3 123
>un%iones .elper de Consultas
?t=is@Ad"@AinsertBid+,
1l n:mero ID de la insercin al e%ecutar inserciones en la *ase de datos.
?t=is@Ad"@Aa##e%tedBroCs+,
'uestra la cantidad de @ilas a@ectadasI al >acer una consulta ti&o Nescri*irN JinsercinI actuali"acinI etc.K.
:ota< 1n ',2L6 ND161C1 $8)' CAB61N devuelve 0 @ilas a@ectadas. 6a clase Fata"ase tiene un &e-ue+o truco
-ue &ermite devolver la cantidad correcta de @ilas a@ectadas. Por de@ectoI este truco est0 >a*ilitadoI &ero se
&uede a&agar en el arc>ivo del driver de la *ase de datos.
?t=is@Ad"@A%ountBall+,
6e &ermite determinar la cantidad de @ilas en una ta*la en &articular. 1nvHe el nom*re de la ta*la en el &rimer
&ar0metro. 1%em&loG
echo $this->db->count_all('mi_ta!la');
// Produce un entero, como 25
?t=is@Ad"@Aplat#or$+,
Im&rime la &lata@orma de *ase de datos -ue est0 e%ecutando J',2L6I '2 2L6I PostgresI etc...KG
echo $this->db->platform();
?t=is@Ad"@Aversion+,
Im&rime la versin de *ase de datos -ue est0 e%ecutandoG
echo $this->db->version();
?t=is@Ad"@AlastB4uer;+,
Devuelve la :ltima consulta -ue se e%ecut Jla cadena de consultaI no su resultadoK. 1%em&loG
$str = $this->db->last_query();
// Produce: SELECT * FROM alguna_tabla....
6as siguiente dos @unciones a,udan a sim&li@icar el &roceso de escri*ir I3218Cs , 7PDAC1s.
?t=is@Ad"@AinsertBstring+,
1sta @uncin sim&li@ica el &roceso de escri*ir inserciones en la *ase de datos. Devuelve una cadena de insercin de
2L6 correctamente @ormateada. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 124
$data = array('name' => $name, 'email' => $email, 'url' => $url);
$str = $this->db->insert_string('nombre_de_tabla', $data);
1l &rimer &ar0metro es el nom*re de la ta*laI el segundo es un arra, asociativo con los datos a insertarse. 1l
e%em&lo anterior &roduceG
INSERT INTO nombre_de_tabla (name, email, url) VALUES ('Ricardo',
'ricardo@ejemplo.com', 'ejemplo.com')
:ota< 6os valores se esca&an autom0ticamenteI &roduciendo consultas m0s seguras.
?t=is@Ad"@AupdateBstring+,
1sta @uncin sim&li@ica el &roceso de escri*ir actuali"aciones de *ase de datos. Devuelve un cadena de
actuali"acin de 2L6 correctamente @ormateada. 1%em&loG
$data = array('name' => $name, 'email' => $email, 'url' => $url);
$where = "autor_id = 1 AND estado = 'activo'";
$str = $this->db->update_string('nombre_de_tabla', $data, $where);
1l &rimer &ar0metro es el nom*re de la ta*laI el segundo es un arra, asociativo con los datos a actuali"arseI , el
tercer &ar0metro es la cl0usula N=>ereN. 1l e%em&lo anterior &roduceG
UPDATE nombre_de_tabla SET name = 'Ricardo', email = 'ricardo@ejemplo.com',
url = 'ejemplo.com' WHERE autor_id = 1 AND estado = 'activo'
:ota< 6os valores se esca&an autom0ticamenteI &roduciendo consultas m0s seguras.
Gua del Usuario de CodeIgniter Versin 2.1.3 125
7a Clase 0%tive Re%ord
CodeIgniter usa una versin modi@icada del Patrn de Base de Datos 0%tive Re%ord. 1ste &atrn &ermite -ue la
in@ormacin sea o*tenidaI insertada , actuali"ada en la *ase de datos con mHnimo cdigo. 1n algunos casos
solamente son necesarias una o dos lHneas de cdigo &ara e%ecutar una accin en la *ase de datos. CodeIgniter no
necesita -ue cada ta*la de *ase de datos tenga su &ro&io arc>ivo de clase. 1n lugar de esoI &rovee una inter@a"
m0s sim&li@icada.
'0s all0 de la sim&licidadI el ma,or *ene@icio de usar las @uncionalidades del 0%tive Re%ord es -ue le &ermite
crear a&licaciones inde&endientes de las *ases de datosI ,a -ue cada ada&tador de *ase de datos genera la
sinta<is de la consulta. 1sto tam*in &ermite consultas m0s segurasI ,a -ue el sistema esca&a autom0ticamente
los valores.
:ota< 2i tiene intencin de escri*ir sus &ro&ias consultasI &uede des>a*ilitar esta clase en su arc>ivo de
con@iguracin de la *ase de datosI &ermitindole al n:cleo de la Base de Datos , al ada&tador usar &ocos
recursos.
6ele%%ionar Fatos
6as siguientes @unciones le &ermiten construir sentencias 2161CC de 2L6.
:ota< 2i est0 usando P9P 4I &uede usar el 'todo de 1ncadenamiento &ara o*tener una sinta<is m0s
com&acta. 1sto se descri*e al @inal de la &0gina.
?t=is@Ad"@Aget+,
1%ecuta la consulta de seleccin , devuelve el resultado. Puede utili"arse &or sH mismo &ara recu&erar todos los
registros de una ta*laG
$query = $this->db->get('mi_tabla');
// Produce: SELECT * FROM mi_tabla
1l segundo , tercer &ar0metros le &ermiten esta*lecer una cl0usula NlimitN , No@@setNG
$query = $this->db->get('mi_tabla', 10, 20);
// Produce: SELECT * FROM mi_tabla LIMIT 20, 10 (en MySQL. Otras bases de datos
// pueden tener sintaxis ligeramente diferentes)
Advertir0 -ue la @uncin anterior se asigna a una varia*le llamada ?4uer;I la cual se usa &ara mostrar el
resultadoG
$query = $this->db->get('mi_tabla');
foreach ($query->result() as $row)
{
echo $row->titulo;
}
Por @avor consulte la &0gina @unciones de resultado &ara ver la discusin com&leta inde&endientemente de la
generacin del resultado.
Gua del Usuario de CodeIgniter Versin 2.1.3 126
?t=is@Ad"@AgetBC=ere+,
Idntica a la @uncin anteriorI e<ce&to -ue le &ermite agregar una cl0usula N=>ereN en el segundo &ar0metroI en
lugar de usar la @uncin d"@AC=ere+,G
$query = $this->db->get_where('mi_tabla', array('id' => $id), $limit, $offset);
Por @avorI leer acerca de la @uncin C=ere+, a*a%o &ara m0s in@ormacin.
:ota< getBC=ere+, era conocida antes como getC=ere+,I la cual @ue eliminada.
?t=is@Ad"@Asele%t+,
6e &ermite escri*ir la &orcin 2161CC de una consultaG
$this->db->select('titulo, contenido, $fecha');
$query = $this->db->get('mi_tabla');
// Produce: SELECT titulo, contenido, $fecha FROM mi_tabla
:ota< 2i est0 seleccionando todo JiK de una ta*la no necesita usar esta @uncin. Al omitirseI CodeIgniter
asume -ue desea seleccionar todo J2161CC iK
?t=is@Ad"@Asele%t+, ace&ta un segundo &ar0metro o&cional. 2i lo esta*lecer como >076EI CodeIgniter no
intentar0 &roteger sus nom*res de cam&o o ta*la con *ac;tic;s. 1sto es :til si necesita una sentencia com&uesta
de seleccin.
$this->db->select('(SELECT SUM(pagos.cantidad) FROM pagos
WHERE pagos.factura_id=4') AS cantidad_pagada', FALSE);
$query = $this->db->get('mi_tabla');
?t=is@Ad"@Asele%tB$a1+,
1scri*e una &orcin N2161CC 'AEJcam&oKN en su consulta. )&cionalmente &uede incluir un segundo &ar0metro
&ara renom*rar el cam&o de resultado.
$this->db->select_max('edad');
$query = $this->db->get('miembros');
// Produce: SELECT MAX(edad) AS edad FROM miembros
$this->db->select_max('edad', 'edad_miembro');
$query = $this->db->get('miembros');
// Produce: SELECT MAX(edad) AS edad_miembro FROM miembros
?t=is@Ad"@Asele%tB$in+,
1scri*e una &orcin N2161CC 'I3Jcam&oKN en su consulta. Como con sele%tB$a1+,I o&cionalmente &uede incluir
un segundo &ar0metro &ara renom*rar el cam&o de resultado.
Gua del Usuario de CodeIgniter Versin 2.1.3 127
$this->db->select_min('edad');
$query = $this->db->get('miembros');
// Produce: SELECT MIN(edad) AS edad FROM miembros
?t=is@Ad"@Asele%tBavg+,
1scri*e una &orcin N2161CC A!AJcam&oKN en su consulta. Como con sele%tB$a1+,I o&cionalmente &uede incluir
un segundo &ar0metro &ara renom*rar el cam&o de resultado.
$this->db->select_avg('edad');
$query = $this->db->get('miembros');
// Produce: SELECT AVG(edad) AS edad FROM miembros
?t=is@Ad"@Asele%tBsu$+,
1scri*e una &orcin N2161CC 27'Jcam&oKN en su consulta. Como con sele%tB$a1+,I o&cionalmente &uede incluir
un segundo &ar0metro &ara renom*rar el cam&o de resultado.
$this->db->select_sum('edad');
$query = $this->db->get('miembros');
// Produce: SELECT SUM(edad) AS edad FROM miembros
?t=is@Ad"@A#ro$+,
6e &ermite escri*ir la &orcin $8)' de su consultaG
$this->db->select('titulo, contenido, $fecha');
$this->db->from('mi_tabla');
$query = $this->db->get();
// Produce: SELECT titulo, contenido, $fecha FROM mi_tabla
:ota< Como se mostr antesI la &orcin $8)' de su consulta se &uede es&eci@icar en la @uncin ?t=is@Ad"@
Aget+,I &or lo -ue &uede usar el mtodo -ue &re@iera.
?t=is@Ad"@ADoin+,
6e &ermite escri*ir la &orcin D)I3 de su consultaG
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comentarios', 'comentarios.id = blogs.id');
$query = $this->db->get();
// Produce:
// SELECT * FROM blogs
// JOIN comentarios ON comentarios.id = blogs.id
2e &ueden >acer varias llamadas de @uncin si necesita varios %oins en una consulta.
Gua del Usuario de CodeIgniter Versin 2.1.3 128
2i necesita un ti&o es&ecH@ico de D)I3 &uede es&eci@icarlo mediante el tercer &ar0metro de la @uncin. 6as o&ciones
sonG le@tI rig>tI outerI innerI le@t outerI , rig>t outer.
$this->db->join('comentarios', 'comentarios.id = blogs.id', 'left');
// Produce: LEFT JOIN comentarios ON comentarios.id = blogs.id
?t=is@Ad"@AC=ere+,
1sta @uncin le &ermite esta*lecer cl0usulas W.ERE usando uno de los estos cuatro mtodosG
1. H9todo si$ple de %lavevalor<
$this->db->where('nombre', $nombre);
// Produce: WHERE nombre = 'Jose'
Advierta -ue se agrega el signo igual &or 7d.
2i usa varias llamadas de @uncinI se encadenar0n todas %untas con 0:F entre ellasG
$this->db->where('nombre', $nombre);
$this->db->where('titulo', $titulo);
$this->db->where('estado', $status);
// WHERE nombre = 'Jose' AND titulo = 'jefe' AND estado = 'activo'
/. H9todo personali8ado de %lavevalor<
Puede incluir un o&erador en el &rimer &ar0metro &ara controlar la com&aracinG
$this->db->where('nombre !=', $nombre);
$this->db->where('id <', $id);
// Produce: WHERE nombre != 'Jose' AND id < 45
. H9todo del arra; aso%iativo<
$array = array('nombre' => $nombre, 'titulo' => $titulo, 'estado' =>
$status);
$this->db->where($array);
// Produce: WHERE nombre = 'Jose' AND titulo = 'jefe' AND estado = 'activo'
Cam*in &uede incluir sus &ro&ios o&eradores usando este mtodoG
$array = array('nombre !=' => $nombre, 'id <' => $id, '$fecha >' => $fecha);
$this->db->where($array);
Gua del Usuario de CodeIgniter Versin 2.1.3 129
#. Cadena personali8ada<
Puede escri*ir sus &ro&ias cl0usulas manualmenteG
$where = "nombre='Jose' AND estado='jefe' OR estado='activo'";
$this->db->where($where);
?t=is@Ad"@AC=ere+, ace&ta un tercer &ar0metro o&cional. 2i se lo esta*lece a >076EI CodeIgniter no intentar0
&roteger sus nom*res de cam&os o ta*la con *ac;tic;s.
$this->db->where('MATCH (campo) AGAINST ("valor")', NULL, FALSE);
?t=is@Ad"@AorBC=ere+,
1sta @uncin es idntica a la anteriorI e<ce&to -ue las instancias m:lti&les se unen con )8G
$this->db->where('nombre !=', $nombre);
$this->db->or_where('id >', $id);
// Produce: WHERE nombre != 'Jose' OR id > 50
:ota< orBC=ere+, antes era conocida como orC=ere+,I la -ue @ue eliminada.
?t=is@Ad"@AC=ereBin+,
Aenera una consulta 2L6 ?9181 cam&o I3 JYitemYI YitemYK unida mediante A3D si corres&onde.
$nombres = array('Federico', 'Tomas', 'Juan');
$this->db->where_in('usuario', $nombres);
// Produce: WHERE usuario IN ('Federico', 'Tomas', 'Juan')
?t=is@Ad"@AorBC=ereBin+,
Aenera una consulta 2L6 ?9181 cam&o I3 JYitemYI YitemYK unida mediante )8 si corres&onde.
$nombres = array('Federico', 'Tomas', 'Juan');
$this->db->or_where_in('usuario', $nombres);
// Produce: OR usuario IN ('Federico', 'Tomas', 'Juan')
?t=is@Ad"@AC=ereBnotBin+,
Aenera una consulta 2L6 ?9181 cam&o 3)C I3 JYitemYI YitemYK unida mediante A3D si corres&onde.
$nombres = array('Federico', 'Tomas', 'Juan');
$this->db->where_not_in('usuario', $nombres);
// Produce: WHERE usuario NOT IN ('Federico', 'Tomas', 'Juan')
Gua del Usuario de CodeIgniter Versin 2.1.3 130
?t=is@Ad"@AorBC=ereBnotBin+,
Aenera una consulta 2L6 ?9181 cam&o 3)C I3 JYitemYI YitemYK unida mediante )8 si corres&onde.
$nombres = array('Federico', 'Tomas', 'Juan');
$this->db->or_where_not_in('usuario', $nombres);
// Produce: OR usuario NOT IN ('Federico', 'Tomas', 'Juan')
?t=is@Ad"@AliIe+,
1sta @uncin le &ermite generar cl0usulas 7IXEI :tiles &ara >acer *:s-uedas.
:ota< Codos los valores &asados a esta @uncin se esca&an autom0ticamente.
1. H9todo si$ple de %lavevalor<
$this->db->like('titulo', 'match');
// Produce: WHERE titulo LIKE '%match%'
2i usa varias llamadas a la @uncinI se encadenar0n %untas con 0:F entre ellasG
$this->db->like('titulo', 'match');
$this->db->like('cuerpo', 'match');
// WHERE titulo LIKE '%match%' AND cuerpo LIKE '%match%
2i -uiere controlar donde se u*ica el comodHn JdKI &uede usar un tercer &ar0metro o&cional. 6as o&ciones
son Y*e@oreYI Ya@terY , Y*ot>Y J-ue es el valor &or de@ectoK.
$this->db->like('titulo', 'match', 'before');
// Produce: WHERE titulo LIKE '%match'
$this->db->like('titulo', 'match', 'after');
// Produce: WHERE titulo LIKE 'match%'
$this->db->like('titulo', 'match', 'both');
// Produce: WHERE titulo LIKE '%match%'
/. H9todo del arra; aso%iativo<
$array = array('titulo' => $match,
'pagina1' => $match,
'pagina2' => $match);
$this->db->like($array);
// WHERE titulo LIKE '%match%' AND pagina1 LIKE '%match%' AND pagina2 LIKE
// '%match%'
Gua del Usuario de CodeIgniter Versin 2.1.3 131
?t=is@Ad"@AorBliIe+,
1sta @uncin es idntica a la anteriorI e<ce&to -ue las instancias m:lti&les se unen mediante )8G
$this->db->like('titulo', 'match');
$this->db->or_like('cuerpo', $match);
// WHERE titulo LIKE '%match%' OR cuerpo LIKE '%match%'
:ota< orBliIe+, antes era conocida como orliIe+,I la cual @ue eliminada.
?t=is@Ad"@AnotBliIe+,
1sta @uncin es idntica a liIe+,I e<ce&to -ue genera sentencias 3)C 6Ih1G
$this->db->not_like('titulo', 'match');
// WHERE titulo NOT LIKE '%match%
?t=is@Ad"@AorBnotBliIe+,
1sta @uncin es idntica a notBliIe+,I e<ce&to -ue las instancias m:lti&les se unen mediante )8G
$this->db->like('titulo', 'match');
$this->db->or_not_like('cuerpo', 'match');
// WHERE titulo LIKE '%match% OR cuerpo NOT LIKE '%match%'
?t=is@Ad"@AgroupB";+,
6e &ermite escri*ir la &orcin A8)7P BR de su consultaG
$this->db->group_by("titulo");
// Produce: GROUP BY titulo
Cam*in &uede &asarle un arra, de m:lti&les valoresG
$this->db->group_by(array("titulo", "$fecha"));
// Produce: GROUP BY titulo, $fecha
:ota< groupB";+, antes era conocida como group";+,I la cual @ue eliminada.
Gua del Usuario de CodeIgniter Versin 2.1.3 132
?t=is@Ad"@Adistin%t+,
Agrega la &ala*ra clave NDI2CI3CCN a la consulta.
$this->db->distinct();
$this->db->get('tabla');
// Produce: SELECT DISTINCT * FROM tabla
?t=is@Ad"@A=aving+,
6e &ermite escri*ir la &orcin 9A!I3A de su consulta. 9a, dos sinta<is &osi*lesI uno o dos argumentosG
$this->db->having('usuario_id = 45');
// Produce: HAVING usuario_id = 45
$this->db->having('usuario_id', 45);
// Produce: HAVING usuario_id = 45
Cam*in &uede &asarle un arra, de m:lti&les valoresG
$this->db->having(array('titulo =' => 'Mi Titulo', 'id <' => $id));
// Produce: HAVING titulo = 'Mi Titulo', id < 45
2i est0 usando una *ase de datos &ara la -ue CodeIgniter esca&a las consultasI &uede evitar de esca&ar el
contenido &asando un tercer &ar0metro o&cionalI , esta*lecindolo a >076E.
$this->db->having('usuario_id', 45);
// Produce: HAVING `usuario_id` = 45 en algunas bases de datos como MySQL
$this->db->having('user_id', 45, FALSE);
// Produce: HAVING user_id = 45
?t=is@Ad"@AorB=aving+,
Idntica to =aving+,I salvo -ue se&ara varias cl0usulas mediante N)8N.
?t=is@Ad"@AorderB";+,
6e &ermite esta*lecer una cl0usula )8D18 BR. 1l &rimer &ar0metro contiene el nom*re de la columna &or la -ue
-uerrHa ordenar. 1l segundo &ar0metro le &ermite esta*lecer la direccin del resultado. 6as o&ciones son as%I
des%I o rando$.
$this->db->order_by("titulo", "desc");
// Produce: ORDER BY titulo DESC
Gua del Usuario de CodeIgniter Versin 2.1.3 133
Cam*in &uede &asar su &ro&ia cadena en el &rimer &ar0metroG
$this->db->order_by('titulo desc, nombre asc');
// Produce: ORDER BY titulo DESC, nombre ASC
) se &ueden >acer varias llamadas a la @uncin si necesita varios cam&os.
$this->db->order_by("titulo", "desc");
$this->db->order_by("nombre", "asc");
// Produce: ORDER BY titulo DESC, nombre ASC
:ota< orderB";+, antes conocida como order";+,I la cual @ue eliminada.
:ota< el ordenamiento aleatorio no es actualmente so&ortado &or los ada&tadores de )racle o '22L6. 1stos
tendr0n &or de@ecto a YA2CY.
?t=is@Ad"@Ali$it+,
6e &ermite limitar la cantidad de @ilas -ue desea -ue la consulta devuelvaG
$this->db->limit(10);
// Produce: LIMIT 10
1l segundo &ar0metro le &ermite esta*lecer un des&la"amiento del resultado.
$this->db->limit(10, 20);
// Produce: LIMIT 20, 10 (en MySQL. Otras bases de datos pueden tener una sintaxis
// ligeramente diferente)
?t=is@Ad"@A%ountBallBresults+,
6e &ermite determinar la cantidad de @ilas en una consulta del 0%tive Re%ord. 6as consultas ace&tar0n restrictores
tales como C=ere+,I orBC=ere+,I liIe+,I orBliIe+,I etc. 1%em&loG
echo $this->db->count_all_results('mi_ta!la');
// Produce un entero, como 25
$this->db->like('titulo', 'match');
$this->db->from('mi_ta!la');
echo $this->db->count_all_results();
// Produce un entero, como 17
Gua del Usuario de CodeIgniter Versin 2.1.3 134
?t=is@Ad"@A%ountBall+,
6e &ermite determinar la cantidad de @ilas en una ta*la en &articular. Presente el nom*re de la ta*la como &rimer
&ar0metro. 1%em&loG
echo $this->db->count_all('mi_ta!la');
// Produce un entero, como 25
Insertar Fatos
?t=is@Ad"@Ainsert+,
Aenera una cadena insert de 2L6 *asada en los datos -ue suministraI , e%ecuta la consulta. Canto &uede &asar un
arra; como un o"Deto a la @uncin. A-uH >a, un e%em&lo usando un arra,G
$data = array(
'titulo' => 'Mi titulo' ,
'nombre' => 'Mi nombre' ,
'$fecha' => 'Mi $fecha'
);
$this->db->insert('mi_tabla', $data);
// Produce: INSERT INTO mi_tabla (titulo, nombre, $fecha) VALUES ('Mi titulo',
// 'Mi nombre', 'Mi $fecha')
1l &rimer &ar0metro contendr0 el nom*re de la ta*la , el segundo un arra, asociativo de valores.
A-uH >a, un e%em&lo usando un o*%etoG
/*
class MiClase {
var $titulo = 'Mi Titulo';
var $contenido = 'Mi Contenido';
var $$fecha = 'Mi $fecha';
}
*/
$object = new MiClase;
$this->db->insert('mi_tabla', $object);
// Produce: INSERT INTO mi_tabla (titulo, contenido, $fecha) VALUES ('Mi Titulo',
// 'Mi Contenido', 'Mi $fecha')
1l &rimer &ar0metro contendr0 el nom*re de la ta*la , el segundo es un o*%eto.
:ota< Codos los valores se esca&an autom0ticamente &ara &roducir consultas m0s seguras.
Gua del Usuario de CodeIgniter Versin 2.1.3 135
?t=is@Ad"@AinsertB"at%=+,
Aenera una cadena insert de 2L6 *asada en los datos &rovistosI , e%ecuta la consulta. A la @uncin se le &uede
&asar tanto un arra; como un o"Deto. A-uH >a, un e%em&lo usando un arra,G
$data = array(
array(
'titulo' => 'Mi titulo' ,
'nombre' => 'Mi nombre' ,
'fecha' => 'Mi fecha'
),
array(
'titulo' => 'Otro titulo' ,
'nombre' => 'Otro nombre' ,
'fecha' => 'Otra fecha'
)
);
$this->db->insert_batch('mi_tabla', $data);
// Produce: INSERT INTO mi_tabla (titulo, nombre, fecha) VALUES ('Mi titulo',
// 'Mi nombre', 'Mi fecha'), ('Otro titulo', 'Otro nombre', 'Otra fecha')
1l &rimer &ar0metro contendr0 el nom*re de la ta*la , el segundo es un arra, asociativo de valores.
:ota< Codos los valores &asados a esta @uncin se esca&anI &roduciendo consultas m0s seguras.
?t=is@Ad"@Aset+,
1sta @uncin le &ermite esta*lecer valores &ara inser%iones o a%tuali8a%iones.
6e puede usar en lugar de pasar datos dire%ta$ente a un arra; para las #un%iones de inser%in o
a%tuali8a%in<
$this->db->set('nombre', $nombre);
$this->db->insert('mi_tabla');
// Produce: INSERT INTO mi_tabla (name) VALUES ('{$nombre}')
2i usa varias llamadas de @uncinI se ensam*lar0n adecuadamente en @uncin de si usted est0 >aciendo una
insercin o una actuali"acinG
$this->db->set('nombre', $nombre);
$this->db->set('titulo', $titulo);
$this->db->set('estado', $status);
$this->db->insert('mi_tabla');
Gua del Usuario de CodeIgniter Versin 2.1.3 136
set+, tam*in ace&tar0 un tercer &ar0metro o&cional J?es%apeKI -ue evitar0 -ue los datos se esca&en si se lo
esta*lece a >076E. Para ilustrar la di@erenciaI a-uH se usa set+, con , sin el &ar0metro de esca&e.
$this->db->set('campo', 'campo+1', FALSE);
$this->db->insert('mi_tabla');
// Devuelve: INSERT INTO mi_tabla (campo) VALUES (campo+1)
$this->db->set('campo', 'campo+1');
$this->db->insert('mi_tabla');
// Devuelve: INSERT INTO mi_tabla (campo) VALUES ('campo+1')
Cam*in &uede &asar un arra, asociativo a esta @uncinG
$array = array('nombre' => $nombre, 'titulo' => $titulo, 'estado' => $status);
$this->db->set($array);
$this->db->insert('mi_tabla');
) un o*%etoG
/*
class Mi_clase {
var $titulo = 'Mi titulo';
var $contenido = 'Mi contenido';
var $fecha = 'Mi fecha';
}
*/
$object = new Mi_clase;
$this->db->set($object);
$this->db->insert('mi_tabla');
0%tuali8ar Fatos
?t=is@Ad"@Aupdate+,
Aenera una cadena u&date de 2L6 , e%ecuta la consulta *asada en los datos &rovistos. A la @uncin &uede &asarle
un arra; o un o"Deto. A-uH >a, un e%em&lo usando un arra,G
$data = array(
'titulo' => $titulo,
'nombre' => $nombre,
'fecha' => $fecha
);
$this->db->where('id', $id);
$this->db->update('mi_tabla', $data);
// Produce:
// UPDATE mi_tabla
// SET title = '{$titulo}', name = '{$nombre}', date = '{$fecha}'
// WHERE id = $id
Gua del Usuario de CodeIgniter Versin 2.1.3 137
) &uede &ro&orcionar un o*%etoG
/*
class Mi_clase {
var $titulo = 'Mi titulo';
var $nombre = 'Mi nombre';
var $fecha = 'Mi fecha';
}
*/
$object = new Mi_clase;
$this->db->where('id', $id);
$this->db->update('mi_tabla', $object);
// Produce:
// UPDATE mi_tabla
// SET title = '{$titulo}', name = '{$nombre}', date = '{$fecha}'
// WHERE id = $id
:ota< Codos los valores &asados a esta @uncin se esca&anI &roduciendo consultas m0s seguras.
Advertir0 el uso de la @uncin ?t=is@Ad"@AC=ere+,I &ermitindole esta*lecer la cl0usula ?9181. )&cionalmente
&uede &asar esta in@ormacin directamente a la @uncin update+, como una cadenaG
$this->db->update('mi_tabla', $data, "id = 4");
) como un arra,G
$this->db->update('mi_tabla', $data, array('id' => $id));
Cam*in &uede usar la @uncin ?t=is@Ad"@Aset+, descri&ta antes cuando se realicen actuali"aciones.
&orrar Fatos
?t=is@Ad"@Adelete+,
Aenera una cadena delete de 2L6 , e%ecuta la consulta.
$this->db->delete('mi_tabla', array('id' => $id));
// Produce:
// DELETE FROM mi_tabla
// WHERE id = $id
1l &rimer &ar0metro es el nom*re de la ta*la , el segundo la cl0usula =>ere. Cam*in &uede usar las @unciones
C=ere+, u orBC=ere+, en lugar de &asarle los datos al segundo &ar0metro de la @uncinG
Gua del Usuario de CodeIgniter Versin 2.1.3 138
$this->db->where('id', $id);
$this->db->delete('mi_tabla');
// Produce:
// DELETE FROM mi_tabla
// WHERE id = $id
2i -uiere *orrar m0s de una ta*laI se &uede &asar un arra, de nom*res de ta*las a delete+,.
$tables = array('table1', 'table2', 'table3');
$this->db->where('id', '5');
$this->db->delete($tables);
2i -uiere *orrar todos los datos de una ta*laI &uede usar las @unciones trun%ate+, o e$pt;Bta"le+,.
?t=is@Ad"@Ae$pt;Bta"le+,
Aenera una cadena delete de 2L6 , e%ecuta la consulta.
$this->db->empty_table('mi_tabla');
// Produce
// DELETE FROM mi_tabla
?t=is@Ad"@Atrun%ate+,
Aenera una cadena truncate de 2L6 , e%ecuta la consulta.
$this->db->from('mi_tabla');
$this->db->truncate();
// o
$this->db->truncate('mi_tabla');
// Produce:
// TRUNCATE mi_tabla
:ota< 2i el comando C873CAC1 no est0 dis&oni*leI trun%ate+, se e%ecutar0 como ND161C1 $8)' ta*leN.
H9todo de En%adena$iento
1l 'todo de 1ncadenamiento le &ermite sim&li@icar la sinta<is conectando varias @unciones. Considere este
e%em&loG
%tis-3d!-3select('titulo')-3from('mi_tabla')-3<ere('id', $id)-3limit(10, 20);
$query = $this->db->get();
:ota< 1l mtodo de encadenamiento solamente @unciona con P9P 4.
Gua del Usuario de CodeIgniter Versin 2.1.3 139
0l$a%ena$iento en Ca%=9 del 0%tive Re%ord
2i *ien no es un cac> NverdaderoNI el 0%tive Re%ord le &ermite guardar Jo Ncac>earNK ciertas &artes de sus
consultas &ara reusarlas m0s adelante en la e%ecucin de su scri&t. 3ormalmenteI cuando se com&leta una llamada
del 0%tive Re%ordI toda la in@ormacin almacenada se *orra &ara la siguiente llamada. Con el almacenamiento en
cac>I &uede evitar este *orradoI , reusar la in@ormacin @0cilmente.
6as llamadas cac>eadas son acumulativas. 2i >ace dos llamadas sele%t+, cac>eadasI , luego dos llamadas
sele%t+, sin cac>earI esto resultar0 en cuatro llamadas sele%t+,. 9a, tres @unciones de Cac> dis&oni*lesG
?t=is@Ad"@AstartB%a%=e+,
2e tiene -ue llamar a esta @uncin &ara comen"ar a cac>ear. Codas las consultas del 0%tive Re%ord de ti&o
correcto Jver m0s a*a%o &ara conocer las consultas so&ortadasK se almacenan &ara uso &osterior.
?t=is@Ad"@AstopB%a%=e+,
2e &uede llamar a esta @uncin &ara detener el cac>.
?t=is@Ad"@A#lus=B%a%=e+,
1sta @uncin *orra todos los elementos del cac> del 0%tive Re%ord.
A-uH >a, un e%em&lo de usoG
$this->db->start_cache();
$this->db->select('campo1');
$this->db->stop_cache();
$this->db->get('nombre_de_tabla');
//Genera: SELECT `campo1` FROM (`nombre_de_tabla`)
$this->db->select('campo2');
$this->db->get('nombre_de_tabla');
//Genera: SELECT `campo1`, `campo2` FROM (`nombre_de_tabla`)
$this->db->flush_cache();
$this->db->select('campo2');
$this->db->get('nombre_de_tabla');
//Genera: SELECT `campo2` FROM (`nombre_de_tabla`)
:ota< 2e &ueden cac>ear las siguientes sentenciasG selectI @romI %oinI =>ereI li;eI grou&B*,I >avingI orderB*,I
set.
Gua del Usuario de CodeIgniter Versin 2.1.3 140
!ransa%%iones
6a a*straccin de *ase de datos de CodeIgniter le &ermite usar transa%%iones con *ases de datos -ue so&orten
ti&os de ta*las seguras en transacciones. In ',2L6I necesitar0 e%ecutar ta*las de ti&o InnoDB o BDBI en lugar del
m0s com:n ',I2A'. 6a ma,orHa de las otras &lata@orma de *ases de datos so&ortan transacciones nativamente.
2i no est0 @amiliari"ado con las transaccionesI le recomendamos -ue *us-ue en lHnea alg:n *uen recurso &ara
a&render acerca de ellas &ara su *ase de datos en &articular. 6a in@ormacin siguiente asume -ue 7d tiene un
conocimiento *0sico de transacciones.
El En#o4ue de CodeIgniter para las !ransa%%iones
CodeIgniter utili"a un en@o-ue &ara transacciones -ue es mu, similar al &roceso usado &or la &o&ular clase de *ase
de datos AD)DB. 1legimos ese en@o-ue &or-ue sim&li@ica enormemente el &roceso de e%ecutar transacciones. 1n la
ma,orHa de los casos se necesitan dos lHneas de cdigo.
CradicionalmenteI las transacciones >an re-uerido una *uena cantidad de tra*a%o &ara im&lementarI ,a -ue le
demandan >acer el seguimiento de sus consultas , determinar si =a%er o des=a%er las consultas *asado en su
<ito o @racaso. 1sto es &articularmente engorroso con consultas anidadas. Por el contrarioI >emos im&lementado
un sistema de transacciones inteligente -ue >ace todo esto autom0ticamente J&uede administrar sus transacciones
manualmente si asH lo deseaI &ero no >a, un *ene@icio realmenteK.
EDe%utar !ransa%%iones
Para e%ecutar consultas usando transaccionesI se usar0n las @unciones ?t=is@Ad"@AtransBstart+, , ?t=is@Ad"@
AtransB%o$plete+, del siguiente modoG
%tis-3d!-3trans_start&'5
$this->db->query('UNA CONSULTA SQL...');
$this->db->query('OTRA CONSULTA SQL...');
$this->db->query('Y OTRA CONSULTA SQL MAS...');
%tis-3d!-3trans_complete&'5
Puede e%ecutar tantas consultas como -uiera entre las @unciones de NstartNONcom&leteN , se >ar0n o des>ar0n
seg:n resulten e<itosas o @racasen &ara cual-uier consulta dada.
Hodo Estri%to
Por de@ectoI CodeIgniter e%ecuta todas las transacciones en Hodo Estri%to. Cuando el modo estricto est0
>a*ilitado , se e%ecutan varios gru&os de transaccionesI si un gru&o @alla todos los gru&os se des>ar0n. 2i el modo
estricto est0 des>a*ilitadoI cada gru&o es tratado inde&endientementeI lo -ue signi@ica -ue la @alla de un gru&o no
a@ectar0 a los otros.
1l 'odo 1stricto se &uede des>a*ilitar de la siguiente maneraG
$this->db->trans_strict(FALSE);
Gua del Usuario de CodeIgniter Versin 2.1.3 141
0d$inistrar Errores
2i tiene el re&orte de errores >a*ilitado en su arc>ivo %on#igdata"ase.p=p ver0 un mensa%e de error est0ndar si
la e%ecucin @ue un @racaso. 2i la de&uracin est0 desconectada &uede administrar sus &ro&ios errores asHG
$this->db->trans_start();
$this->db->query('UNA CONSULTA SQL...');
$this->db->query('OTRA CONSULTA SQL...');
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE)
{
// genera un error... o usa la funcin log_message() para registrar su error
}
.a"ilitar !ransa%%iones
6as transacciones se >a*ilitan autom0ticamente en el momento -ue se usa ?t=is@Ad"@AtransBstart+,. 2i
-uisiera des>a*ilitar las transaccionesI &odrHa >acerlo usando ?t=is@Ad"@AtransBo##+,G
%tis-3d!-3trans_off&'5
$this->db->trans_start();
$this->db->query('UNA CONSULTA SQL...');
$this->db->trans_complete();
Cuando se des>a*ilitan las transaccionesI sus consultas se e%ecutar0n autom0ticamenteI tal , como son cuando
se e%ecutan sin transacciones.
Hodo de 3rue"a
)&cionalmente &uede &oner el sistema de transacciones en Nmodo &rue*aNI lo -ue causar0 -ue sus consultas se
des>agan (( a:n cuando &rodu"can un resultado v0lido. Para usar el modo de &rue*aI sim&lemente esta*lecer el
&rimer &ar0metro en la @uncin ?t=is@Ad"@AtransBstart+, a !RUEG
$this->db->trans_start(+,-.); // Se deshar la consulta
$this->db->query('UNA CONSULTA SQL...');
$this->db->trans_complete();
Gua del Usuario de CodeIgniter Versin 2.1.3 142
EDe%utar !ransa%%iones Hanual$ente
2i -uisiera e%ecutar transacciones manualmenteI de*erHa >acer lo siguienteG
$this->db->trans_begin();
$this->db->query('UNA CONSULTA SQL...');
$this->db->query('OTRA CONSULTA SQL...');
$this->db->query('Y OTRA CONSULTA SQL MAS...');
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
}
else
{
$this->db->trans_commit();
}
:ota< Asegurarse de usar ?t=is@Ad"@AtransB"egin+, al e%ecutar transacciones manualesI , :G ?t=is@Ad"@
AtransBstart+,.
Gua del Usuario de CodeIgniter Versin 2.1.3 143
Hetadatos de !a"la
1stas @unciones le &ermiten o*tener in@ormacin acerca de la ta*la.
?t=is@Ad"@AlistBta"les+,
Devuelve un arra, conteniendo los nom*res de todas las ta*las en la *ase de datos a la -ue est0 conectado
actualmente. 1%em&loG
$tables = $this->db->list_tables();
foreach ($tables as $table)
{
echo $table;
}
?t=is@Ad"@Ata"leBe1ists+,
A veces es :til sa*er si e<iste una ta*la en &articular antes de e%ecutar una o&eracin so*re ella. Devuelve un
*ooleano !RUE>076E. 1%em&lo de usoG
if ($this->db->table_exists('nombre_de_tabla'))
{
// algn cdigo...
}
:ota< 8eem&lace nom*reBdeBta*la con el nom*re de la ta*la &or el -ue est0 *uscando.
Gua del Usuario de CodeIgniter Versin 2.1.3 144
Hetadatos de Ca$po
?t=is@Ad"@AlistB#ields+,
Devuelve un arra, conteniendo los nom*res de cam&os. 2e &uede llamar a esta consulta de dos @ormasG
1. Puede suministrar el nom*re de la ta*la , llamarla desde el o*%eto ?t=is@Ad"@AG
$fields = $this->db->list_fields('nombre_de_tabla');
foreach ($fields as $field)
{
echo $field;
}
/. Puede %untar los nom*res de cam&os asociados con cual-uier consulta -ue e%ecute llamando a la @uncin
desde el o*%eto de resultado de la consultaG
$query = $this->db->query('SELECT * FROM alguna_tabla');
foreach ($query->list_fields() as $field)
{
echo $field;
}
?t=is@Ad"@A#ieldBe1ists+,
A veces es :til sa*er si e<iste un cam&o en &articular antes de e%ecutar una accin. Devuelve un *ooleano
!RUE>076E. 1%em&lo de usoG
if ($this->db->field_exists('nombre_de_campo', 'nombre_de_tabla'))
{
// algn cdigo...
}
:ota< 8eem&lace nom*reBdeBcam&o con el nom*re de la columna &or la -ue desea &reguntarI , reem&lace
nom*reBdeBta*la con el nom*re de la ta*la &or la -ue est0 *uscando.
?t=is@Ad"@A#ieldBdata+,
Devuelve un arra, de o*%etos conteniendo in@ormacin de los cam&os.
A veces es :til o*tener los nom*res de los cam&os u otro metadatoI como el ti&o de columnaI longitud m0<imaI
etc.
:ota< 3o todas las *ases de datos &roveen metadatos.
Gua del Usuario de CodeIgniter Versin 2.1.3 145
1%em&lo de 7soG
$fields = $this->db->field_data('nombre_de_tabla');
foreach ($fields as $field)
{
echo $field->name;
echo $field->type;
echo $field->max_length;
echo $field->primary_key;
}
2i ,a e%ecut una consultaI &uede usar el o*%eto de resultado en lugar de suministrar el nom*re de la ta*laG
$query = $this->db->query("SU CONSULTA");
$fields = $query->field_data();
6os siguientes datos est0n dis&oni*les de esta @uncin si los so&orta su *ase de datosG
na$e ( nom*re de la columna
$a1Blengt= ( longitud m0<ima de la columna
pri$ar;BIe; ( 1 si la columna es clave &rimaria
t;pe ( ti&o de la columna
Gua del Usuario de CodeIgniter Versin 2.1.3 146
7la$adas a >un%iones 3ersonali8adas
?t=is@Ad"@A%allB#un%tion+,
1sta @uncin le &ermite llamar a @unciones de *ase de datos de P9P -ue no est0n nativamente incluidas en
CodeIgniterI de @orma inde&endiente de la &lata@orma. Por e%em&loI digamos -ue desea llamar a la @uncin
$;s4lBgetB%lientBin#o+,I -ue no est0 nativamente so&ortada &or CodeIgniter. PodrHa >acer algo como estoG
$this->db->call_function('get_client_info');
Ciene -ue suministrar el nom*re de la @uncinI sin el &re@i%o $;s4lB en el &rimer &ar0metro. 1l &re@i%o se agrega
autom0ticamente *asado en el ada&tador de *ase de datos -ue se est0 utili"ando actualmente. 1sto le &ermite
e%ecutar la misma @uncin en di@erentes &lata@ormas de *ase de datos. )*viamente no todas las llamadas a @uncin
son idnticas entre las &lata@ormasI &or lo -ue >a, limitaciones res&ecto a la utilidad de esta @uncin en trminos
de &orta*ilidad.
Cual-uier &ar0metro necesario &ara la @uncin ser0 agregado a &artir del segundo argumento.
$this->db->call_function('alguna_funcion', $param1, $param2, etc..);
A veces necesitar0 suministrar un ID de cone<in de *ase de datos o un ID de resultado de *ase de datos. 1l ID
de cone<in se &uede acceder usandoG
$this->db->conn_id;
1l ID de resultado se &uede acceder desde dentro de su o*%eto de resultado asHG
$query = $this->db->query("ALGUNA CONSULTA");
%Cuer>-3result_id5
Gua del Usuario de CodeIgniter Versin 2.1.3 147
0l$a%ena$iento en Ca%=9 de &ases de Fatos
6a Clase &ara Almacenamiento en Cac> de Base de Datos le &ermite cac>ear sus consultas como arc>ivos de
te<to &ara reducir la carga de la *ase de datos.
I$portante< 1l ada&tador de *ase de datos iniciali"a autom0ticamente esta clase cuando el cac> est0
>a*ilitado. :G cargar manualmente esta clase.
0dvierta ta$"i9n< 3o todas las @unciones de resultado de consultas est0n dis&oni*les cuando se usa el cac>.
6ea esta &0gina con cuidado.
.a"ilitar el Ca%=9
1l almacenamiento en cac> se >a*ilita en tres &asosG
Crear un directorio escri*i*le en el servidor donde se &uedan almacenar los arc>ivos de cac>.
1sta*lecer la ruta a la car&eta de cac> en el arc>ivo appli%ation%on#igdata"ase.p=p.
9a*ilitar la @uncin de cac>I ,a sea glo*almente mediante el esta*lecimiento de la &re@erencia en el
arc>ivo appli%ation%on#igdata"ase.p=pI o manualmente como se descri*e m0s a*a%o.
7na ve" >a*ilitadoI el almacenamiento en cac> ocurrir0 autom0ticamente cuando se cargue una &0gina -ue
contenga consultas de *ase de datos.
2C$o >un%iona el Ca%=95
1l sistema de cac> de consultas de CodeIgniter @unciona din0micamente cuando se visitan las &0ginas. Cuando el
cac> est0 >a*ilitadoI la &rimera ve" -ue se carga una &0gina =e*I el o*%eto de resultado de consultas se seriali"a
, almacena en un arc>ivo de te<to en el servidor. 6a &r<ima ve" -ue se carga la &0ginaI se usar0 el arc>ivo de
cac> en lugar de acceder a su *ase de datos. 1l uso de su *ase de datos se &uede reducir a cero en @orma
e@ectiva &ara cual-uier &0gina -ue se >a,a cac>eado.
2e &ueden cac>ear solamente consultas de tipo leer J2161CCKI ,a -ue solamente ese ti&o de consultas &roducen
resultado. 1l sistema no cac>ear0 las consultas de tipo es%ri"ir JI3218CI 7PDAC1I etc.KI ,a -ue no generan un
resultado.
6os arc>ivos de cac> :G e<&iran. Cual-uier consulta -ue se >a,a cac>eado &ermanecer0 >asta -ue se la *orre. 1l
sistema de cac> le &ermite *orrar cual-uier &0gina individual asociadaI o &uede *orrar la coleccin entera de
arc>ivos de cac>. 3ormalmente -uerr0 usar las @unciones de lim&ie"a descri&tas de*a%o &ara *orrar los arc>ivos
de cac> des&us de -ue ciertos eventos >a,an ocurridoI como cuando se agrega nueva in@ormacin a la *ase de
datos.
2HeDorar' el Ca%=9 el Fese$peo del 6itio5
)*tener una ganancia de rendimiento como consecuencia del almacenamiento en cac> de&ende de muc>os
@actores. 2i tiene una *ase de datos altamente o&timi"ada *a%o &oca cargaI &ro*a*lemente no vea un aumento en
el rendimiento. 2i la *ase de datos est0 *a%o uso &esadoI &ro*a*lemente ver0 una res&uesta me%oradaI asumiendo
-ue el sistema de arc>ivos no est so*recargado. 8ecuerde -ue el almacenamiento en cac> sim&lemente cam*ia
la @orma en -ue se recu&era su in@ormacinI &asando de ser una o&eracin de *ase de datos a una o&eracin del
sistema de arc>ivos.
1n algunos entornos de servidores en cl:ster &or e%em&loI el almacenamiento en cac> &uede ser &er%udicialI ,a
-ue las o&eraciones del sistema de arc>ivos son demasiado intensas. 1n servidores sim&le de entornos
com&artidosI el almacenamiento en cac> &ro*a*lemente sea *en@ico. Desa@ortunadamente no >a, una res&uesta
sim&le a la &regunta de si se de*erHa cac>ear la *ase de datos. 8ealmente de&ende de la situacin.
Gua del Usuario de CodeIgniter Versin 2.1.3 148
2C$o se 0l$a%enan los 0r%=ivos de Ca%=95
CodeIgniter u*ica el resultado de CADA consulta en su &ro&io arc>ivo de cac>. 6os con%untos de arc>ivos en
cac> se organi"an en su*car&etas -ue corres&onden a las @unciones controlador. Para ser &recisosI las
su*car&etas se llaman del mismo modo -ue los &rimeros dos segmentos de la 78I Jnom*re de la clase del
controlador , nom*re de @uncinK.
Por e%em&loI digamos -ue tiene un controlador llamado "log con una @uncin llamada %o$entarios -ue contiene
tres consultas. 1l sistema de cac> crear0 una car&eta de cac> llamada "log^%o$entariosI dentro de la -ue
escri*ir0 tres arc>ivos de cac>.
2i usa consultas din0micas -ue cam*ian *asadas en la in@ormacin en la 78I J&or e%em&loI al usar &aginacinKI
cada instancia de la consulta &roducir0 su &ro&io arc>ivo de cac>. 1s &osi*leI &or lo tantoI terminar con muc>os
m0s arc>ivos en cac> -ue los -ue tiene de consultas.
0d$inistrar los 0r%=ivos de Ca%=9
Como los arc>ivos en cac> no e<&iranI necesitar0 armar rutinas de *orrado &ara su a&licacin. Por e%em&loI
digamos -ue tiene un *log -ue &ermite comentarios de usuarios. 2i se envHa un nuevo comentarioI -uerr0 *orrar
los arc>ivos cac>eados asociados con la @uncin controlador -ue sirve sus comentarios. 1ncontrar0 dos @unciones
-ue lo a,udan a *orrar los datosI , -ue de descri*en m0s a*a%o.
:o !odas las >un%iones de &ases de Fatos >un%ionan %on Ca%=9
$inalmente de*emos se+alar -ue el o*%eto de resultado -ue se cac>ea es una versin sim&li@icada del o*%eto
com&leto. Por esta ra"nI algunas de las @unciones de resultado de la consulta no est0n dis&oni*les &ara usarse.
6as siguiente @unciones :G E6!0: dis&oni*les al usar un o*%eto de resultados cac>eadoG
nu$B#ields+,
#ieldBna$es+,
#ieldBdata+,
#reeBresult+,
Cam*inI dos recursos de *ase de datos JresultBid , connBidK no est0n dis&oni*les al cac>earI ,a -ue los recursos
de resultado solamente re@ieren a o&eraciones en tiem&o de e%ecucin.
Re#eren%ia de >un%iones
?t=is@Ad"@A%a%=eBon+, ?t=is@Ad"@A%a%=eBo##+,
9a*ilitaOdes>a*ilita manualmente el cac>. 1sto &uede ser :til si -uiere im&edir -ue ciertas consultas sean
cac>eadas. 1%em&loG
// Habilitar el cach
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM mi_tabla");
// Deshabilitar el cach solo para esta consulta
$this->db->cache_off();
$query = $this->db->query("SELECT * FROM miembros WHERE miembro_id =
'$usuario_actual'");
// Volver a habilitar el cach
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM otra_tabla");
Gua del Usuario de CodeIgniter Versin 2.1.3 149
?t=is@Ad"@A%a%=eBdelete+,
Borra los arc>ivos cac>eados asociados con una &0gina en &articular. 1sto es :til si necesita *orrar arc>ivos
cac>eados des&us de actuali"ar la *ase de datos.
1l sistema de cac> guarda sus arc>ivos de cac> en car&etas -ue corres&onden a la 78I de la &0gina -ue est0
viendo. Por e%em&loI si est0 viendo una &0gina en e1a$ple.%o$inde1.p=p"log%o$entariosI el sistema de
cac> &ondr0 todos los arc>ivos de cac> asociados con ella en una car&eta llamada "log^%o$entarios. Para
*orrar esos arc>ivos de cac> en &articular se usar0G
$this->db->cache_delete('blog', 'comentarios');
2i no usa los &ar0metrosI la 78I actual se usar0 &ara determinar lo -ue se de*erHa *orrar.
?t=is@Ad"@A%a%=eBdeleteBall+,
Borra todos los arc>ivos de cac> e<istentes. 1%em&loG
$this->db->cache_delete_all();
Gua del Usuario de CodeIgniter Versin 2.1.3 150
Clase >orge de &ase de Fatos
6a Clase >orge de Base de Datos contiene @unciones -ue lo a,udan a administrar su *ase de datos.
Ini%iali8ar la Clase >orge
I$portante< Para iniciali"ar la clase >orgeI su ada&tador de *ase de datos tiene -ue estar e%ecut0ndoseI ,a
-ue la clase >orge se *asa en l.
Cargar la Clase >orge asHG
$this->load->dbforge();
7na ve" iniciali"adaI acceder0 a las @unciones usando el o*%eto ?t=is@Ad"#orgeG
$this->dbforge->alguna_funcion();
?t=is@Ad"#orge@A%reateBdata"ase+Ld"Bno$"reL,
6e &ermite crear la *ase de datos es&eci@icada en el &rimer &ar0metro. Devuelve !RUE>076E de&endiendo del
<ito o @racasoG
if ($this->dbforge->create_database('mi_db'))
{
echo 'Base de Datos creada!';
}
?t=is@Ad"#orge@AdropBdata"ase+Ld"Bno$"reL,
6e &ermite eliminar la *ase de datos es&eci@icada en el &rimer &ar0metro. Devuelve !RUE>076E de&endiendo
del <ito o @racasoG
if ($this->dbforge->drop_database('mi_db'))
{
echo 'Base de Datos eliminada!';
}
Crear ; Eli$inar !a"las
9a, varias cosas -ue &uede -uerer >acer al crear ta*las. Agregar cam&os o claves a la ta*laI modi@icar columnas.
CodeIgniter &rovee un mecanismo &ara esto.
0gregar Ca$pos
6os cam&os se crean mediante un arra, asociativo. Dentro del arra, tiene -ue incluirse una clave Yt,&eY -ue re@iere
al ti&o de dato del cam&o. Por e%em&loI I3CI !A8C9A8I C1ECI etc. 'uc>os ti&os de datos J&or e%em&lo !A8C9A8K
tam*in necesitan la clave YconstraintY.
Gua del Usuario de CodeIgniter Versin 2.1.3 151
$campos = array(
'usuarios' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
);
// Traducir a "usuarios VARCHAR(100)" cuando se agregue el campo.
Adem0s se &ueden usar los siguientes &ares claveOvalorG
unsignedtrue< &ara generar N732IA31DN en la de@inicin del cam&o.
de#aultvalor< &ara generar un valor &or de@ecto en la de@inicin del cam&o.
nulltrue< &ara generar N3766N en la de@inicin del cam&o. 2in estoI el cam&o tendr0 &or de@ecto a N3)C
3766N.
autoBin%re$enttrue< generar un modi@icador autoBincrement en el cam&o. Advierta -ue el ti&o de
cam&o tiene -ue ser un ti&o lo so&orteI tal como un entero.
$campos = array(
'blog_id' => array(
'type' => 'INT',
'constraint' => 5,
'unsigned' => TRUE,
'auto_increment' => TRUE
),
'blog_titulo' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
'blog_autor' => array(
'type' =>'VARCHAR',
'constraint' => '100',
'default' => 'Batman',
),
'blog_descripcion' => array(
'type' => 'TEXT',
'null' => TRUE,
),
);
Des&us -ue los cam&os >a,an sido de@inidosI se &ueden agregar usando ?t=is@Ad"#orge@
AaddB#ield+?%a$pos, seguida &or una llamada a la @uncin %reateBta"le+,.
?t=is@Ad"#orge@AaddB#ield+,
6a @uncin addB#ield+, ace&tar0 el arra, anterior.
3asar %adenas %o$o %a$pos
2i conoce e<actamente cmo desea -ue se cree un cam&oI &uede &asar la cadena en la de@inicin del cam&o con
addB#ield+,.
$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");
:ota< !arias llamadas a addB#ield+, son acumulativas.
Gua del Usuario de CodeIgniter Versin 2.1.3 152
Crear un %a$po id
9a, una e<ce&cin es&ecial &ara crear cam&os id. 7n cam&o con ti&o id se asignar0 autom0ticamente a una Clave
Primaria I3CJ.K con autoincremento.
$this->dbforge->add_field('id');
// Devuelve: id INT(9) NOT NULL AUTO_INCREMENT
0gregar Claves
Aeneralmente >a*landoI 7d -uerr0 -ue su ta*la tenga claves. 1sto se logra con ?t=is@Ad"#orge@
AaddBIe;+L%a$poL,. 7n segundo &ar0metro o&cional esta*lecido a !RUE la convertir0 en clave &rimaria.
Advierta -ue addBIe;+, tiene -ue estar seguida &or una llamada a %reateBta"le+,.
2i >a, varias claves no &rimariasI se tienen -ue enviar como un arra,. 1l e%em&lo im&reso de*a%o es &ara ',2L6.
$this->dbforge->add_key('blog_id', TRUE);
// Devuelve: PRIMARY KEY `blog_id` (`blog_id`)
$this->dbforge->add_key('blog_id', TRUE);
$this->dbforge->add_key('sitio_id', TRUE);
// Devuelve: PRIMARY KEY `blog_id_sitio_id` (`blog_id`, `sitio_id`)
$this->dbforge->add_key('blog_nombre');
// Devuelve: KEY `blog_nombre` (`blog_nombre`)
$this->dbforge->add_key(array('blog_nombre', 'blog_rotulo'));
// Devuelve: KEY `blog_nombre_blog_rotulo` (`blog_nombre`, `blog_rotulo`)
Crear una !a"la
Des&us de >a*er creado los cam&os , las clavesI &uede crear una nueva ta*la conG
$this->dbforge->create_table('nombre_de_tabla');
// Devuelve: CREATE TABLE nombre_de_tabla
7n segundo &ar0metro o&cional esta*lecido a !RUE agrega una cl0usula NI$ 3)C 1EI2C2N en la de@inicinG
$this->dbforge->create_table('nombre_de_tabla', TRUE);
// Devuelve: CREATE TABLE IF NOT EXISTS nombre_de_tabla
Eli$inar una !a"la
1%ecuta una instruccin 2L6 D8)P CAB61.
$this->dbforge->drop_table('nombre_de_tabla');
// Devuelve: DROP TABLE IF EXISTS nombre_de_tabla
Gua del Usuario de CodeIgniter Versin 2.1.3 153
Reno$"rar una !a"la
8enom*ra una ta*la.
$this->dbforge->rename_table('nombre_viejo_de_tabla', 'nombre_nuevo_de_tabla');
// Devuelve: ALTER TABLE nombre_viejo_de_tabla RENAME TO nombre_nuevo_de_tabla
Hodi#i%ar !a"las
?t=is@Ad"#orge@AaddB%olu$n+,
6a @uncin addB%olu$n+, se usa &ara modi@icar una ta*la e<istente. Ace&ta el mismo arra, de cam&os -ue la
anterior , se &uede usar &ara una cantidad ilimitada de cam&os adicionales.
$campos = array(
'preferences' => array('type' => 'TEXT')
);
$this->dbforge->add_column('nombre_de_tabla', $campos);
// Devuelve: ALTER TABLE nombre_de_tabla ADD preferences TEXT
?t=is@Ad"#orge@AdropB%olu$n+,
2e usa &ara eliminar una columna de la ta*la.
$this->dbforge->drop_column('nombre_de_tabla', 'columna_a_eliminar');
?t=is@Ad"#orge@A$odi#;B%olu$n+,
1l uso de esta @uncin es idntica al de addB%olu$n+,I e<ce&to -ue altera una columna e<istente en lugar de
agregar una nueva. Para cam*iar el nom*re &uede agregar una clave NnameN en el arra, -ue de@ine el cam&o.
$campos = array(
'nombre_viejo' => array(
'name' => 'nombre_nuevo',
'type' => 'TEXT',
),
);
$this->dbforge->modify_column('nombre_de_tabla', $campos);
// Devuelve: ALTER TABLE nombre_de_tabla CHANGE nombre_viejo nombre_nuevo TEXT
Gua del Usuario de CodeIgniter Versin 2.1.3 154
Clase de Utilidades de &ase de Fatos
6a Clase de utilidades de *ase de datos contiene @unciones -ue a,udan a administrar la *ase de datos.
Ini%iali8ar la Clase de Utilidades
I$portante< Para iniciali"ar la clase de utilidadesI el driver de la *ase de datos tiene -ue estar e%ecut0ndoseI
,a -ue la clase de utilidades se *asa en l.
Cargar la clase de utilidades como sigueG
$this->load->dbutil();
7na ve" iniciali"adaI se acceder0 a la @unciones usando el o*%eto ?t=is@Ad"utilG
$this->dbutil->alguna_funcion();
?t=is@Ad"util@AlistBdata"ases+,
Devuelve un arra, con nom*res de *ases de datosG
$dbs = $this->dbutil->list_databases();
foreach ($dbs as $db)
{
echo $db;
}
?t=is@Ad"util@Adata"aseBe1ists+,
A veces es :til sa*er si e<iste una *ase de datos en &articular. Devuelve un *ooleano !RUE>076E. 1%em&lo de
usoG
if ($this->dbutil->database_exists('nombre_base_de_datos'))
{
// algn cdigo...
}
:ota< 8eem&lace nom*reB*aseBdeBdatos con el nom*re de la ta*la -ue est0 *uscando. 1sta @uncin distingue
entre ma,:sculas , min:sculas.
?t=is@Ad"util@Aopti$i8eBta"le+Lno$"reBdeBta"laL,
:ota< 1sta @uncionalidad solo est0 dis&oni*le en *ase de datos ',2L6O',2L6i.
6e &ermite o&timi"ar una ta*la usando el nom*re de ta*la indicado en el &rimer &ar0metro. Devuelve
!RUE>076E *asado en el <ito o @racasoG
Gua del Usuario de CodeIgniter Versin 2.1.3 155
if ($this->dbutil->optimize_table('nombre_de_tabla'))
{
echo 'xito!';
}
:ota< 3o todas las &lata@ormas de *ase de datos so&ortan o&timi"acin de ta*las.
?t=is@Ad"util@ArepairBta"le+Lno$"reBdeBta"laL,
:ota< 1sta @uncionalidad solo est0 dis&oni*le en *ase de datos ',2L6O',2L6i.
6e &ermite re&arar una ta*la usando el nom*re de ta*la indicado en el &rimer &ar0metro. Devuelve !RUE>076E
*asado en el <ito o @racasoG
if ($this->dbutil->repair_table('nombre_de_tabla'))
{
echo 'xito!';
}
:ota< 3o todas las &lata@ormas de *ase de datos so&ortan o&timi"acin de ta*las.
?t=is@Ad"util@Aopti$i8eBdata"ase+,
:ota< 1sta @uncionalidad solo est0 dis&oni*le en *ase de datos ',2L6O',2L6i.
6e &ermite o&timi"ar la *ase de datos a la -ue la clase data*ase est0 conectada. Devuelve un arra, -ue contiene el
mensa%e de estado de la *ase de datos o >076E en caso de @alla.
aresult = $this->dbutil->optimize_database();
if ($result !== FALSE)
{
print_r($result);
}
:ota< 3o todas las &lata@ormas de *ase de datos so&ortan o&timi"acin de ta*las.
?t=is@Ad"util@A%svB#ro$Bresult+?d"Bresult,
6e &ermite generar un arc>ivo C2! con el resultado de la consulta. 1l &rimer &ar0metro de la @uncin tiene -ue
contener el o*%eto resultado de su consulta. 1%em&loG
$this->load->dbutil();
$query = $this->db->query("SELECT * FROM mi_tabla");
echo $this->dbutil->csv_from_result($query);
1l segundo , tercer &ar0metros le &ermiten esta*lecer el delimitador , el caracter de nueva lHnea. Por de@ecto los
ta*uladores se usan como delimitadores , NbnN como nueva lHnea. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 156
$delimiter = ",";
$newline = "\r\n";
echo $this->dbutil->csv_from_result($query, $delimiter, $newline
I$portante< 1sta @uncin :G escri*ir0 el arc>ivo C2! &or 7d. 2im&lemente crea el C2!. 3ecesita escri*ir el
arc>ivo usando el 9el&er $ile.
?t=is@Ad"util@A1$lB#ro$Bresult+?d"Bresult,
6e &ermite generar un arc>ivo E'6 con el resultado de la consulta. 1l &rimer &ar0metro es&era un o*%eto resultado
de consulta , el segundo &uede contener un arra, o&cional de &ar0metros de con@iguracin. 1%em&loG
$this->load->dbutil();
$query = $this->db->query("SELECT * FROM mi_tabla");
$config = array (
'root' => 'root',
'element' => 'element',
'newline' => "\n",
'tab' => "\t"
);
echo $this->dbutil->xml_from_result($query, $config);
I$portante< 1sta @uncin :G escri*ir0 el arc>ivo E'6 &or 7d. 2im&lemente crea el E'6. 2i necesita escri*ir el
arc>ivoI use el 9el&er $ile.
?t=is@Ad"util@A"a%Iup+,
6e &ermite >acer una co&ia de res&aldo de toda la *ase de datos o de ta*las individuales. 6os datos de la co&ia de
res&aldo se &ueden com&rimir ,a sea en @ormato Fi& como A"i&.
:ota< 1sta @uncionalidad est0 solamente dis&oni*le &ara *ases de datos ',2L6.
:ota< De*ido al limitado tiem&o de e%ecucin , memoria dis&oni*le de P9PI la reali"acin de la co&ia de
res&aldo de *ases de datos mu, grandes &uede no ser &osi*le. 2i su *ase de datos es mu, grandeI &uede
necesitar >acer la co&ia de res&aldo directamente desde el servidor 2L6 mediante la lHnea de comandos o -ue
la >aga el administrador del servidor si 7d no tiene &rivilegios de root.
EDe$plo de Uso
// Cargar la clase de utilidades de BD
$this->load->dbutil();
// Hacer copia de respaldo para la BD entera y asignarla a una variable
$backup =& $this->dbutil->backup();
// Cargar el helper file y escribir el archivo en el servidor
$this->load->helper('file');
write_file('/path/to/mybackup.gz', $backup);
Gua del Usuario de CodeIgniter Versin 2.1.3 157
// Cargar el helper download y enviar el archivo a su escritorio
$this->load->helper('download');
force_download('mybackup.gz', $backup);
Esta"le%er las 3re#eren%ias de la Copia de Respaldo
6as &re@erencias de la co&ia de res&aldo se esta*lecen al enviar un arra, de valores al &rimer &ar0metro de la
@uncin "a%Iup+,. 1%em&loG
$prefs = array(
// Array de tablas para hacer copia de respaldo
'tables' => array('table1', 'table2'),
// Lista de tablas para omitir en copia de respaldo
'ignore' => array(),
// gzip, zip, txt
'format' => 'txt',
// Nombre de archivo - NECESARIO SOLAMENTE CON ARCHIVOS ZIP
'filename' => 'mybackup.sql',
// Si agrega sentencias DROP TABLE al archivo de copia de respaldo
'add_drop' => TRUE,
// Si agrega datos INSERT al archivo de copia de respaldo
'add_insert'=> TRUE,
// Carcter de Nueva Lnea usado en el archivo de copia de respaldo
'newline' => "\n"
);
$this->dbutil->backup($prefs);
Fes%rip%in de las 3re#eren%ias de la Copia de Respaldo
3re#eren%ia Valor por Fe#e%to Gp%iones Fes%rip%in
ta"les arra, vacHo 3inguna
Arra, de ta*las -ue se -uieren res&aldar. 2i -ueda en
*lancoI se e<&ortan todas las ta*las.
ignore arra, vacHo 3inguna
Arra, con las ta*las -ue -uiere -ue la rutina de res&aldo
ignore.
#or$at g"i& g"i&I "i&I t<t $ormato del arc>ivo de e<&ortacin.
#ilena$e @ec>aO>ora actual 3inguna
3om*re del arc>ivo de co&ia de res&aldo. 1l nom*re se
necesita solamente si se est0 usando com&resin "i&.
addBdrop C871 C871O$A621
2i incluir sentencias D8)P CAB61 en el arc>ivo de
e<&ortacin 2L6.
addBinsert C871 C871O$A621
2i incluir sentencias I3218C en el arc>ivo de e<&ortacin
2L6.
neCline NbnN NbnNI NbrNI NbrbnN Ci&o de nueva lHnea a usar en el arc>ivo de e<&ortacin 2L6
Gua del Usuario de CodeIgniter Versin 2.1.3 158
Clase E$ail
6a ro*usta Clase E$ail de CodeIgniter so&orta las siguientes caracterHsticasG
!arios ProtocolosG 'ailI 2endmail , 2'CP
!arios rece&tores
CC , BCCs
Correo 9C'6 o de te<to &lano
Ad%untos
2alto de 6Hnea Autom0tico
Prioridades
'odo &or 6otes BCCI -ue &ermite -ue listas grandes de email se corten en &e-ue+os lotes BCC.
9erramientas de De&uracin de 1mail
Enviar E$ail
1nviar un email no es solamente sencilloI sino -ue se &uede con@igurar al vuelo o esta*lecer las &re@erencias en un
arc>ivo de con@iguracin.
A-uH >a, un e%em&lo *0sico -ue muestra cmo se &uede enviar un email. :ota< 1ste e%em&lo asume -ue se est0
enviando el email desde uno de sus controladores.
$this->load->library('email');
$this->email->from('tu@ejemplo.com', 'Tu nombre');
$this->email->to('alguien@ejemplo.com');
$this->email->cc('otro@otro-ejemplo.com');
$this->email->bcc('ellos@su-ejemplo.com');
$this->email->subject('Email de Prueba');
$this->email->message('Probando la Clase Email.');
$this->email->send();
echo $this->email->print_debugger();
Esta"le%er 3re#eren%ias de E$ail
9a, 17 &re@erencias distintas dis&oni*les &ara con@igurar los mensa%es de email -ue se envHan. Canto &uede
esta*lecerlas manualmente como se descri*e a-uHI como autom0ticamente mediante &re@erencias almacenadas en
arc>ivos de con@iguracinI tal como se descri*e m0s a*a%oG
6as &re@erencias se esta*lecen al &asar un arra, de valores de &re@erencias a la @uncin -ue ini%iali8a al email.
1ste es un e%em&lo de como esta*lecer algunas &re@erenciasG
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$this->email->initialize($config);
:ota< 6a ma,orHa de las &re@erencias tienen valores &or de@ecto -ue se usar0n si 7d no las esta*lece.
Gua del Usuario de CodeIgniter Versin 2.1.3 159
Esta"le%er 3re#eren%ias de E$ail en un 0r%=ivo de Con#igura%in
2i &re@iere no esta*lecer las &re@erencias usando el mtodo anteriorI en su lugar &uede &onerlas en un arc>ivo de
con@iguracin. 2im&lemente cree un nuevo arc>ivo llamado e$ail.p=p , agrguele el arra, ?%on#ig. 6uego
guarde el arc>ivo en %on#ige$ail.p=p , se usar0 autom0ticamente. 3) tiene necesidad de usar la @uncin
?t=is@Ae$ail@Ainitiali8e+, si guarda las &re@erencias en un arc>ivo de con@iguracin.
3re#eren%ias de E$ail
6a siguiente es la lista de todas las &re@erencias -ue se &ueden esta*lecer al enviar un email.
3re#eren%ia
Valor por
Fe#e%to
Gp%iones Fes%rip%in
useragent CodeIgniter 3inguno 1l Nagente de usuarioN
proto%ol mail
mailI sendmail
o smt&
Protocolo de envHo correo
$ailpat= OusrOs*inOsendmail 3inguno 8uta del servidor a 2endmail
s$tpB=ost
2in !alor &or
De@ecto
3inguno Direccin 2'CP del 2ervidor
s$tpBuser
2in !alor &or
De@ecto
3inguno 7suario 2'CP
s$tpBpass
2in !alor &or
De@ecto
3inguno Contrase+a 2'CP
s$tpBport /4 3inguno Puerto 2'CP
s$tpBti$eout 4 3inguno Ciem&o de 1s&era 2'CP Jen segundosK
CordCrap C871
C871 o $A621
J*ooleanoK
9a*ilitar salto de lHnea autom0tico
Crap%=ars 76 Cantidad de caracteres &ara el salto de lHnea autom0tico
$ailt;pe te<t
Ci&o de correo. 2i envHa correo 9C'6I tiene -ue
enviarlo como una &0gina =e* com&leta. Aseg:rese
-ue no tiene enlaces relativos o rutas relativas de
im0genesI &or-ue en caso contrario no @uncionar0n
%=arset ut@(8 Con%unto de caracteres Jut@(8I iso(884.(1I etc.K
validate $A621
C871 o $A621
J*ooleanoK
2i validar la direccin de email
priorit; 1I /I I #I 4
Prioridad del 1mail. 1 e la m0s alta. 4 e la m0s *a%a.
e normal
%rl# bn
NbrbnN INbnN o
NbrN
Car0cter de 3ueva 6Hnea. J7se NbrbnN &ara cum&lir con
8$C 8//K
neCline bn
NbrbnN INbnN o
NbrN
Car0cter de 3ueva 6Hnea. J7se NbrbnN &ara cum&lir con
8$C 8//K
"%%B"at%=B$ode $A621
C871 o $A621
J*ooleanoK
9a*ilitar 'odo &or 6otes BCC
"%%B"at%=Bsi8e /00 3inguno Cantidad de emails en cada lote BCC
Gua del Usuario de CodeIgniter Versin 2.1.3 160
Re#eren%ia de >un%iones de E$ail
?t=is@Ae$ail@A#ro$+,
1sta*lece la direccin de email , el nom*re de la &ersona -ue envHa el emailG
$this->email->from('7oseDe7emplo.com', 'Eose Fere#');
?t=is@Ae$ail@Arepl;Bto+,
1sta*lece la direccin Nres&onder aN. 2i no se &roveeI se usa la in@ormacin de la @uncin #ro$+,. 1%em&loG
$this->email->from('7oseDe7emplo.com', 'Eose Fere#');
?t=is@Ae$ail@Ato+,
1sta*lece la direccin de email del rece&tor. Puede ser un email sim&leI una lista delimitada &or comas o un arra,G
$this->email->to('alguienDe7emplo.com');
$this->email->to('unoDe7emplo.com, dosDe7emplo.com, tresDe7emplo.com');
$list = array('unoDe7emplo.com', 'dosDe7emplo.com', 'tresDe7emplo.com');
$this->email->to(%list);
?t=is@Ae$ail@A%%+,
1sta*lece la direccin de email CC. Igual -ue con la @uncin to+,I &uede ser un email sim&leI una lista delimitada
&or comas o un arra,.
?t=is@Ae$ail@A"%%+,
1sta*lece la direccin de email BCC. Igual -ue con la @uncin to+,I &uede ser un email sim&leI una lista delimitada
&or comas o un arra,.
?t=is@Ae$ail@Asu"De%t+,
1sta*lece el asunto del emailG
$this->email->subject('.ste es mi asunto');
?t=is@Ae$ail@A$essage+,
1sta*lecer el cuer&o del mensa%e de emailG
$this->email->message('.ste es mi mensa7e');
Gua del Usuario de CodeIgniter Versin 2.1.3 161
?t=is@Ae$ail@AsetBaltB$essage+,
1sta*lecer el cuer&o del mensa%e alternativo de emailG
$this->email->set_alt_message('.ste es el mensa7e alternati*o');
1sta es una cadena de mensa%e o&cional -ue se &uede usar si envHa un correo @ormateado en 9C'6. 6e &ermite
es&eci@icar un mensa%e alternativo sin @ormato 9C'6 -ue se agrega a la cadena del enca*e"ado &ara gente -ue no
ace&ta email de 9C'6. 2i no esta*lecer su &ro&io mensa%eI CodeIgniter e<traer0 el mensa%e de su email de 9C'6
, le -uitar0 las eti-uetas.
?t=is@Ae$ail@A%lear+,
Iniciali"a todas las varia*les a un estado vacHo. 1sta @uncin est0 &ensada &ara usarse si e%ecuta la @uncin de envHo
de email en un *ucleI &ermitiendo -ue los datos se resta*le"can entre ciclos.
foreach ($list as $name => $address)
{
$this->email->clear();
$this->email->to($address);
$this->email->from('jose@ejemplo.com');
$this->email->subject('Aqu est su informacin '.$name);
$this->email->message('Hola '.$name.' Esta es la informacin solicitada.');
$this->email->send();
}
2i esta*lece el &ar0metro a !RUEI cual-uier ad%unto tam*in ser0 eliminadoG
$this->email->clear(+,-.);
?t=is@Ae$ail@Asend+,
$uncin de envHo de 1mail. Devuelve el *ooleano !RUE o >076E *asada en el <ito o @racasoI &ermitiendo -ue
sea usada condicionalmenteG
if ( ! $this->email->send())
{
// Generar error
}
?t=is@Ae$ail@Aatta%=+,
6e &ermite enviar un ad%unto. Poner rutaOarc>ivo en el &rimer &ar0metro. :ota< 7se una ruta de arc>ivoI no una
786. Para varios ad%untos use la @uncin varias veces. Por e%em&loG
$this->email->attach('/ruta/a/foto1.jpg');
$this->email->attach('/ruta/a/foto2.jpg');
$this->email->attach('/ruta/a/foto3.jpg');
$this->email->send();
Gua del Usuario de CodeIgniter Versin 2.1.3 162
?t=is@Ae$ail@AprintBde"ugger+,
Devuelve una cadena conteniendo cual-uier mensa%e de servidorI enca*e"ados de email , el mensa%e de email. Qtil
&ara de&uracin.
0nular el 6alto de 7nea 0uto$'ti%o
2i tiene el salto de lHnea autom0tico >a*ilitado Jrecomendado &ara cum&lir con 8$C 8//K , tiene un enlace mu,
largo en su emailI &uede ocurrir -ue el salto de lHnea autom0tico lo corteI causando -ue se vuelva im&osi*le de
cli-uear &or la &ersona -ue lo reci*e. CodeIgniter le &ermite anular manualmente el salto de lHnea autom0tico
dentro de &arte de su mensa%eI asHG
El texto de su email que
normalmente salta de lnea.
:un<rap;http://ejemplo.com/un_enlace_largo_que_no_deberia_cortarse.html:)un<rap;
Ms texto que normalmente
tiene su salto de lnea.
7*i-ue el Htem -ue no -uiere -ue se corte al @inal de la lHnea entreG \unCrap] \unCrap].
Gua del Usuario de CodeIgniter Versin 2.1.3 163
Clase En%r;pt
6a Clase En%r;pt &rovee encri&tacin de datos de dos vHas. 7sa un es-uema -ueI o *ien com&ila el mensa%e
usando un es-uema de codi@icacin E)8 a nivel de *its con un algoritmo >as> aleatorioI o encri&ta usando la
*i*lioteca 'cr,&t. 2i 'cr,&t no est0 dis&oni*le en su servidorI el mensa%e codi@icado todavHa &roveer0 un grado
ra"ona*le de seguridad &ara sesiones encri&tadas u otros @ines NligerosN. 2i 'cr,&t est0 dis&oni*leI &roveer0 un
alto grado de seguridad adecuado &ara almacenamiento.
Esta"le%er su Clave
7na clave es una &ie"a de in@ormacin -ue controla el &roceso cri&togr0@ico , &ermite -ue una cadena codi@icada
se &ueda decodi@icar. De >ec>oI la clave -ue eli%a sola$ente &roveer0 medios &ara decodi@icar datos -ue se
>a,an encri&tado con esa claveI &or lo tantoI no solo tiene -ue elegir cuidadosamente la claveI sino -ue nunca
tiene -ue cam*iarla si tiene &ensado usarla con datos &ersistentes.
3o >ace @alta decir -ue tiene -ue &roteger cuidadosamente su clave. 2i alguien accediera a su claveI los datos
serHan @0ciles de decodi@icar. 2i su servidor no est0 totalmente *a%o su control es im&osi*le garanti"ar la seguridad
de su claveI &or lo -ue tiene -ue &ensar cuidadosamente antes de usarla &ara cual-uier cosa -ue necesite alta
seguridadI como almacenar n:meros de tar%etas de crdito.
Para sacar la m0<ima venta%a del algoritmo de encri&tacinI su clave de*erHa tener / caracteres de longitud J1/8
*itsK. 6a clave de*erHa ser tan aleatoria como &uedaI con n:meros , letras en ma,:sculas , min:sculas. 2u clave
no de*erHa ser una cadena de te<to sim&le. A @in de ser cri&togr0@icamente segura necesita ser tan aleatoria como
sea &osi*le.
2u clave se &uede almacenar tanto en su arc>ivo appli%ation%on#ig%on#ig.p=pI como &uede dise+ar su &ro&io
mecanismo de almacenamiento , &asar la clave din0micamente al codi@icar o decodi@icar.
Para guardar su clave en su appli%ation%on#ig%on#ig.p=pI a*ra el arc>ivo , esta*le"caG
$config['encryption_key'] = "SU CLAVE";
7ongitud del HensaDe
1s im&ortante -ue se&a -ue los mensa%es codi@icados -ue la @uncin de encri&tacin genera ser0n
a&ro<imadamente /I6 veces m0s largos -ue el mensa%e original. Por e%em&loI si encri&ta la cadena Nmis datos
su&er secretosNI -ue tiene /# caracteres de longitudI va a terminar con una cadena codi@icada de casi 6
caracteres Jdecimos NcasiN &or-ue la longitud de la cadena codi@icada se incrementa en *lo-ues de 6# *itsI &or lo
-ue no es e<actamente linealK. Cenga &resente esta in@ormacin al seleccionar su mecanismo de almacenamiento
de datos. 6as coo;iesI &or e%em&loI solo &ueden mantener #h de in@ormacin.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la Clase En%r;pt se iniciali"a en su controlador usando la @uncin
?t=is@Aload@Ali"rar;G
$this->load->library('encrypt');
7na ve" cargadaI el o*%eto de la *i*lioteca 1ncr,&t estar0 dis&oni*le usandoG ?t=is@Aen%r;pt.
Gua del Usuario de CodeIgniter Versin 2.1.3 164
?t=is@Aen%r;pt@Aen%ode+,
8eali"a la encri&tacin de datos , los devuelve como una cadena. 1%em&loG
$msg = 'Mi mensaje secreto';
$encrypted_string = $this->encrypt->encode($msg);
)&cionalmente &uede &asar su clave de encri&tacin mediante el segundo &ar0metro si no -uiere usar la de su
arc>ivo de con@iguracinG
$msg = 'Mi mensaje secreto';
$key = 'clave-super-secreta';
$encrypted_string = $this->encrypt->encode($msg, $key);
?t=is@Aen%r;pt@Ade%ode+,
Desencri&ta una cadena codi@icada. 1%em&loG
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$plaintext_string = $this->encrypt->decode($encrypted_string);
)&cionalmente &uede &asar su clave de encri&tacin mediante el segundo &ar0metro si no -uiere usar la de su
arc>ivo de con@iguracinG
$msg = 'Mi mensaje secreto';
$key = 'clave-super-secreta';
$encrypted_string = $this->encrypt->decode($msg, $key);
?t=is@Aen%r;pt@AsetB%ip=er+,
6e &ermite esta*lecer un ci@rador 'cr,&t. Por de@ecto se usa HCRQ3!BRI_:F0E7B2)`. 1%em&loG
$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
Por @avor visite &>&.net &ara el listado com&leto de ci@radores dis&oni*les.
2i desea &ro*ar manualmente si su servidor so&orta 'cr,&tI &uede usarG
echo ( ! function_exists('mcrypt_encrypt')) ? 'No' : 'Si';
?t=is@Aen%r;pt@AsetB$ode+,
6e &ermite esta*lecer el modo 'cr,&t. Por de@ecto se usa HCRQ3!BHGFEBC&C. 1%em&loG
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
Gua del Usuario de CodeIgniter Versin 2.1.3 165
Por @avor visite &>&.net &ara el listado com&leto de modos dis&oni*les.
?t=is@Aen%r;pt@As=a1+,
$uncin de codi@icacin 29A1. Provee una cadena , devolver0 un >as> de una sola vHa de 160 *its. :ota< 29A1I
igual -ue 'D4 no es decodi@ica*le. 1%em&loG
$hash = $this->encrypt->sha1('Alguna cadena');
Algunas instalaciones de P9P tienen so&orte de 29A1 &or de@ectoI &or lo -ue si lo -ue necesita es codi@icar un
>as>I es m0s sim&le usar la @uncin nativaG
$hash = sha1('Alguna cadena');
2i su servidor no so&orta 29A1 &uede usar la @uncin &rovista.
?t=is@Aen%r;pt@Aen%odeB#ro$Blega%;+?origBdataJ ?lega%;B$ode S HCRQ3!BHGFEBEC&J ?Ie; S LL,
6e &ermite recodi@icar los datos -ue se encri&taron originalmente con CodeIgniter 1.< &ara -ue sean com&ati*les
con la *i*lioteca En%r;pt de CodeIgniter /.<. 2olamente es necesario usar este mtodo si tiene datos encri&tados
almacenados &ermanentemente como en un arc>ivo o *ase de datos en un servidor -ue so&orte 'cr,&t. N6ig>tN
usa encri&tacin tal como datos de sesin encri&tados o @las>data encri&tados transitorios -ue no necesitan
intervencin de su &arte. 2in em*argoI las sesiones e<istentes encri&tadas se destruir0n ,a -ue los datos
encri&tados antes de /.< no se decodi@ica*an.
23or 4u9 sola$ente un $9todo para re%odi#i%ar los datosJ en lugar de $antener los $9todos
anteriores tanto para %odi#i%a%in %o$o para de%odi#i%a%in5 6os algoritmos de la *i*lioteca En%r;pt
se me%oraron en CodeIgniter /.<I tanto en rendimiento como seguridad , no -ueremos incentivar -ue se sigan
usando mtodos vie%os. Por su&uestoI &uede e<tender la *i*lioteca En%r;ption si lo desea , reem&la"ar los
mtodos nuevos con los vie%os , mantener una com&ati*ilidad total con los datos encri&tados con CodeIgniter
1.<I &ero esta es una decisin -ueI en todo casoI tiene -ue >acer con cuidado , deli*eradamente un
desarrollador.
$new_data = $this->encrypt->encode_from_legacy($old_encrypted_string);
3ar'$etro 3or Fe#e%to Fes%rip%in
?origBdata nOd
Datos originales encri&tados con la *i*lioteca 1ncr,&tion de
CodeIgniter 1.<
?lega%;B$ode 'C8RPCB')D1B1CB
'odo de 'cr,&t -ue se us &ara generar los datos
encri&tados originales. 1l valor &or de@ecto de CodeIgniter
1.< era 'C8RPCB')D1B1CB , se asumir0 este valorI a
menos -ue se lo anule con este &ar0metro.
?Ie; nOd
Clave de encri&tacin. 2e lo es&eci@ica normalmente en su
arc>ivo de con@iguracin como se descri*e anteriormente.
Gua del Usuario de CodeIgniter Versin 2.1.3 166
Valida%in de >or$ularios
CodeIgniter &rovee una clase &ara &re&aracin de datos , validacin de @ormularios -ue a,uda a minimi"ar la
cantidad de cdigo -ue se escri*e.
Introdu%%in
Antes de e<&licar el en@o-ue de CodeIgniter &ara validar datosI descri*iremos el escenario idealG
1. 2e muestra un @ormulario.
/. 7sted com&leta los datos , lo envHa.
. 2i el envHo tiene algo inv0lidoI o @alta algo -ue sea o*ligatorioI el @ormulario se muestra nuevamente con
los datos -ue 7d com&let %unto con un mensa%e de error -ue descri*e el &ro*lema.
#. 1ste &roceso continua >asta -ue se envHe un @ormulario v0lido.
1n el rece&torI el scri&t de*eG
1. !eri@icar los datos o*ligatorios.
/. !eri@icar -ue los datos son del ti&o correcto , coinciden con el criterio correcto. Por e%em&loI si se envHa un
usuarioI tiene -ue ser v0lido , contener solamente caracteres &ermitidos. Ciene -ue tener una longitud
mHnima , no e<ceder la longitud m0<ima. 1l usuario tiene -ue e<istirI no &uede ser una &ala*ra reservadaI
etc.
. Por seguridadI descontaminar los datos.
#. Pre@ormatear los datos si es necesario J]2e necesita recortar es&acios al inicio o @inal^ ]Codi@icacin 9C'6^
1tc.K
4. Pre&arar los datos &ara insertarlos en la *ase de datos.
Aun-ue el &roceso anterior no es terri*lemente com&le%oI normalmente re-uiere de una cantidad signi@icativa de
cdigoI mostrar mensa%es de error. 3ormalmente varias estructuras de control se colocan dentro del @ormulario
9C'6. 6a validacin de @ormulariosI aun-ue es sim&le de crearI generalmente es mu, tediosa , enmara+ada de
im&lementar.
!utorial de Valida%in de >or$ularios
6o -ue sigue es un tutorial N&r0cticoN &ara im&lementar la !alidacin de $ormularios de CodeIgniter.
Para im&lementar la validacin de @ormularios necesitar0 tres cosasG
1. 7n arc>ivo de !ista -ue contenga un @ormulario.
/. 7n arc>ivo de !ista -ue contiene un mensa%e de N<itoN &ara mostrarse cuando el envHo sea e<itoso.
. 7na @uncin Controlador &ara reci*ir , &rocesar los datos enviados.
!amos a crear esas tres cosasI usando un @ormulario de registro como e%em&lo.
El #or$ulario
7sando un editor de te<toI crear un @ormulario llamado $iB#or$.p=p. Dentro su,oI u*icar este cdigo ,
guardarlo en su car&eta appli%ationvieCsG
Gua del Usuario de CodeIgniter Versin 2.1.3 167
<html>
<head>
<title>Mi Formulario</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>Usuario</h5>
<input type="text" name="username" value="" size="50" />
<h5>Contrasea</h5>
<input type="text" name="password" value="" size="50" />
<h5>Confirmar contrasea</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" value="Enviar" /></div>
</form>
</body>
</html>
7a 3'gina de a1ito
7sando un editor de te<toI crear un @ormulario llamado #or$Bsu%%ess.p=p. Dentro su,oI colocar este cdigo ,
guardarlo en su car&eta appli%ationvieCsG
<html>
<head>
<title>Mi Formulario</title>
</head>
<body>
<h3>Se envi correctamente su formulario!</h3>
<p><?php echo anchor('form', 'Intntelo otra vez!'); ?></p>
</body>
</html>
El Controlador
7sando un editor de te<toI crear un controlador llamado #or$.p=p. Dentro su,oI colocar este cdigo , guardarlo
en su car&eta appli%ation%ontrollersG
Gua del Usuario de CodeIgniter Versin 2.1.3 168
<?php
class Form extends CI_Controller {
function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('mi_form');
}
else
{
$this->load->view('form_success');
}
}
}
?>
3ru9"eloO
Para &ro*ar su @ormularioI visite su sitio usando una 786 similar a estaG
example.com/index.php/form/
6i enva el #or$ulario de"era ver re%argar el #or$ulario. Esto es por4ue no se esta"le%i ninguna
regla de valida%in todava.
Co$o todava no se le diDo a la Clase >or$Bvalidation 4ue valide algo todavaJ devuelve >076E
+"ooleano, por de#e%to. 7a #un%in run+, sola$ente devuelve !RUE si se apli%aron satis#a%toria$ente
las reglas sin 4ue ninguna #allara.
E1pli%a%in
Advertir0 varias cosas acerca de las &0ginas anterioresG
1l #or$ulario J$iB#or$.p=pK es un @ormulario =e* est0ndar con algunas e<ce&cionesG
1. 7sa un =elper #or$ &ara crear la a&ertura del @ormulario. Ccnicamente esto no es necesario. PodrHa
crear el @ormulario usando 9C'6 est0ndar. 2in em*argoI el *ene@icio de usar el >el&er es -ue genera la
786 de accin &or 7dI *asado en la 786 en su arc>ivo de con@iguracin. 1sto >ace su a&licacin m0s
&orta*le en caso -ue su 786 cam*ie.
/. 1n la &arte su&erior del @ormulario advertir0 la siguiente llamada de @uncinG
<?php echo validation_errors(); ?>
1sta @uncin devolver0 cual-uier mensa%e de error enviado de regreso &or el validador. 2i no >a, mensa%es
devuelve una cadena vacHa.
Gua del Usuario de CodeIgniter Versin 2.1.3 169
1l %ontrolador J#or$.p=pK tiene una @uncinG inde1+,. 1sta @uncin iniciali"a la clase #or$Bvalidation , carga
los >el&ers @orm , 786 usados &or sus arc>ivos de vista. Cam*in eDe%uta la rutina de validacin. Basado en si la
validacin @ue e<itosa o noI &resenta tanto el @ormulario como la &0gina de <ito.
Esta"le%er Reglas de Valida%in
CodeIgniter le &ermite esta*lecer tantas reglas de validacin como necesite &ara un cam&o dadoI &onerlas en
cascadaI e incluso &re&arar , &re&rocesar los datos de los cam&os al mismo tiem&o. Para esta*lecer las reglas de
validacin usar0 la @uncin setBrules+,G
$this->form_validation->set_rules();
6a @uncin anterior toma como entrada tres &ar0metrosG
1. 3om*re del cam&o ( el mismo -ue le dio al cam&o del @ormulario.
/. 7n nom*re N>umanoN &ara este cam&oI -ue de*er0 insertarse en el mensa%e de error. Por e%em&loI si el
cam&o se llama NusuarioN &uede darle un nom*re >umano como N3om*re de 7suarioN. :ota< 2i -uisiera
-ue el nom*re del cam&o sea almacenado en un arc>ivo de idiomaI &or @avor lea Craducir los 3om*res de
Cam&o.
. 6as reglas de validacin &ara este cam&o de @ormulario.
1ste es un e%em&lo. 1n su %ontrolador J#or$.p=pKI agregue este cdigo %usto de*a%o de la @uncin de
iniciali"acin de la validacinG
$this->form_validation->set_rules('username', 'Usuario', 'required');
$this->form_validation->set_rules('password', 'Contrasea', 'required');
$this->form_validation->set_rules('passconf', 'Confirmar Contrasea', 'required');
$this->form_validation->set_rules('email', 'Email', 'required');
2u controlador de*erHa verse asHG
<?php
class Form extends CI_Controller {
function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Usuario', 'required');
$this->form_validation->set_rules('password', 'Contrasea', 'required');
$this->form_validation->set_rules('passconf', 'Confirmar Contrasea',
'required');
$this->form_validation->set_rules('email', 'Email', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('mi_form');
}
else
{
$this->load->view('form_success');
}
}
Gua del Usuario de CodeIgniter Versin 2.1.3 170
}
?>
0=ora enve el #or$ulario %on los %a$pos en "lan%o ; de"era ver los $ensaDes de error. 6i enva el
#or$ulario %on todos los %a$pos llenosJ ver' la p'gina de 91ito.
:ota< Cuando >a, un errorI los cam&os del @ormulario no se vuelven a llenar con los datos. 9aremos esto en
*reve.
Esta"le%er Reglas Usando un 0rra;
Antes de seguirI de*e notarse -ue la @uncin -ue esta*lece la regla se le &uede &asar un arra, si &re@iere
esta*lecer todas las reglas en una sola accin. 2i usa este en@o-ueI de*er0 llamar a las claves del arra, seg:n se
indicaG
$config = array(
array(
'field' => 'username',
'label' => 'Usuario',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Contrasea',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'Confirmar Contrasea',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
);
$this->form_validation->set_rules($config);
Reglas en Cas%ada
CodeIgniter le &ermite agru&ar varias reglas %untas. Pro*moslo. Cam*ie sus reglas en el tercer &ar0metro de la
@uncin -ue esta*lece las reglas &or estoG
$this->form_validation->set_rules('username', 'Usuario',
'required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Contrasea',
'required|matches[passconf]');
$this->form_validation->set_rules('passconf', 'Confirmar Contrasea', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
Gua del Usuario de CodeIgniter Versin 2.1.3 171
1l cdigo anterior esta*lece las siguiente reglasG
1. 1l cam&o usuario no tiene -ue ser menor -ue 4 caracteres , no ma,or -ue 1/.
/. 1l cam&o contrase+a tiene -ue coincidir con el cam&o con@irmar contrase+a.
. 1l cam&o email tiene -ue contener una direccin de email v0lida.
Pru*elo[ envHe su @ormulario sin los datos adecuados , ver0 los nuevos mensa%es de error -ue corres&onden a sus
nuevas reglas. 9a, muc>as reglas dis&oni*lesI so*re las -ue &uede leer en la re@erencia de validacin.
3reparar Fatos
Adem0s de las @unciones de validacin como las usadas antesI tam*in &uede &re&arar sus datos de otras varias
@ormas. Por e%em&loI &uede con@igurar las reglas asHG
$this->form_validation->set_rules('username', 'Usuario',
'trim|required|min_length[5]|max_length[12]|xss_clean');
$this->form_validation->set_rules('password', 'Contrasea',
'trim|required|matches[passconf]|md5');
$this->form_validation->set_rules('passconf', 'Confirmar Contrasea',
'trim|required');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
1n el e%em&lo anteriorI eliminamos los es&acios al comien"o , @in de los cam&osI convertimos la contrase+a a 'D4
, a&licamos la @uncin 1ssB%lean+, al usuarioI la -ue remueve datos maliciosos.
6e puede usar %o$o regla %ual4uier #un%in nativa de 3.3 4ue a%epte sola$ente un par'$etroJ
%o$o =t$lspe%ial%=arsJ tri$J HF)J et%.
:ota< 1n generalI tendr0 -ue usar las @unciones de &re&aracin des&us de las reglas de validacinI &or lo -ue si
>a, un errorI los datos originales se mostrar0n en el @ormulario.
Volver a 7lenar el >or$ulario
9asta a>ora slo >emos estado tratando con errores. 1s tiem&o de volver a llenar los cam&os del @ormulario con
los datos enviados. CodeIgniter o@rece varias @unciones >el&er -ue le &ermiten >acer esto. 6a -ue usar0
ma,ormente esG
set_value('nombre_de_campo')
A*ra su arc>ivo de vista $iB#or$.p=p , actualice el valor de cada cam&o usando la @uncin setBvalue+,G
:o olvide in%luir %ada no$"re de %a$po en las #un%iones setBvalue+,O
<html>
<head>
<title>Mi Formulario</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>Usuario</h5>
<input type="text" name="username" value="<?php echo set_value('username'); ?>"
Gua del Usuario de CodeIgniter Versin 2.1.3 172
size="50" />
<h5>Contrasea</h5>
<input type="text" name="password" value="<?php echo set_value('password'); ?>"
size="50" />
<h5>Confirmar Contrasea</h5>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>"
size="50" />
<h5>Email</h5>
<input type="text" name="email" value="<?php echo set_value('email'); ?>"
size="50" />
<div><input type="submit" value="Enviar" /></div>
</form>
</body>
</html>
0=ora re%argue la p'gina ; enve el #or$ulario para 4ue dispare un error. 6us %a$pos de #or$ulario
de"eran llenarse nueva$ente.
:ota< 6a seccin 8e@erencia de $unciones Jm0s a*a%oK contiene @unciones -ue le &ermiten volver a llenar
men:s gselectjI *otones de radio , casillas de veri@icacin.
:ota I$portante< 2i usa un arra, como nom*re del cam&o de @ormularioI tiene -ue &ro&orcionarlo como un
arra, a la @uncin. 1%em&loG
<input type="text" name="colors[]" value="<?php echo set_value('colors[]'); ?>"
size="50" />
Para ma,or in@ormacinI vea m0s a*a%o la seccin 7sar Arra,s como 3om*res de Cam&o.
Call"a%Is< sus 3ropias >un%iones de Valida%in
1l sistema de validacin so&orta call*ac;s &ara sus &ro&ias @unciones de validacin. 1sto le &ermite e<tender la
clase de validacin &ara a%ustarla a sus necesidades. Por e%em&loI si necesita e%ecutar una consulta de *ase de
datos &ara ver si un usuario est0 eligiendo un nom*re :nicoI &uede crear una @uncin call*ac; -ue >aga eso.
Creemos un e%em&lo &ara esto.
1n su controladorI cam*ie la regla NusernameN &or estaG
$this->form_validation->set_rules('username', 'Usuario',
'call!ac=_username_cec=');
6uego agregue una nueva @uncin llamada userna$eB%=e%I a su controlador. AsH es como se de*erHa ver su
controlador a>oraG
Gua del Usuario de CodeIgniter Versin 2.1.3 173
<?php
class Form extends CI_Controller {
function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Usuario',
'callback_username_check');
$this->form_validation->set_rules('password', 'Contrasea', 'required');
$this->form_validation->set_rules('passconf', 'Confirmar Contrasea',
'required');
$this->form_validation->set_rules('email', 'Email', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('mi_form');
}
else
{
$this->load->view('form_success');
}
}
function username_check($str)
{
if ($str == 'test')
{
$this->form_validation->set_message('username_check',
'The %s field can not be the word "test"');
return FALSE;
}
else
{
return TRUE;
}
}
}
?>
Re%argue su #or$ulario ; envelo %on la pala"ra PtestP %o$o no$"re de usuario. 3uede ver 4ue el
dato del %a$po de #or$ulario se pasa a su #un%in %all"a%I para pro%esarlo.
Para invocar un call*ac; tan solo &onga el nom*re de la @uncin en una reglaI con Ncall*ac;BN como &re@i%o de la
regla.
Cam*in &uede &rocesar el dato del @ormulario -ue &asa a su call*ac; , recu&erarlo. 2i su call*ac; devuelve
cual-uier otra -ue cosa -ue un *ooleano !RUE>076EI se asume -ue esos datos son los recientemente
&rocesados datos de @ormulario.
Gua del Usuario de CodeIgniter Versin 2.1.3 174
Esta"le%er HensaDes de Error
Codos los mensa%es de error nativos se u*ican en el siguiente arc>ivo de idiomaG
languageenglis=#or$BvalidationBlang.p=p.
Para esta*lecer sus &ro&ios mensa%es &ersonali"adosI &uede tanto editar el arc>ivoI como usar la siguiente @uncinG
$this->form_validation->set_message('regla', 'mensa7e_de_error');
Donde regla corres&onde al nom*re de una regla en &articular , $ensaDeBdeBerror es el te<to -ue -uiere
mostrar.
2i inclu,e bs en su cadena de errorI se reem&la"ar0 con el nom*re N>umanoN -ue us &ara el cam&o cuando
esta*leci su regla.
1n el e%em&lo de Ncall*ac;N anteriorI el mensa%e de error se esta*leci al &asar el nom*re de la @uncinG
$this->form_validation->set_message('username_check');
Cam*in &uede anular cual-uier mensa%e de error -ue se encuentre en el arc>ivo de idioma. Por e%em&loI &ara
cam*iar el mensa%e &ara la regla Nre-uiredNI >ar0 estoG
$this->form_validation->set_message('required', 'Su mensaje personalizado aqu');
!radu%ir los :o$"res de Ca$po
2i -uisiera almacenar el nom*re N>umanoN -ue le &as a la @uncin setBrules+, en un arc>ivo de idioma ,I &or lo
tantoI >acer -ue el nom*re sea traduci*leI a-uH se muestra comoG
PrimeroI &re@i%e el nom*re N>umanoN con lang<I como en el e%em&loG
$this->form_validation->set_rules('first_name', 'lang(first_name', 'required');
6uegoI almacene el nom*re en uno de sus arra, de arc>ivos de idioma Jsin el &re@i%oKG
$lang['first_name'] = 'First Name';
:ota< 2i almacena su Htem de arra, en un arc>ivo de idioma -ue CI no carga autom0ticamenteI necesitar0 recodar
cargarlo en su controlador usandoG
$this->lang->load('file_name');
Para ma,or in@ormacin acerca de los arc>ivos de idiomaI vea la &0gina de la Clase 7ang.
Gua del Usuario de CodeIgniter Versin 2.1.3 175
Ca$"iar los Feli$itadores de Error
Por de@ectoI la Clase >or$Bvalidation agrega una eti-ueta de &0rra@o Jg&jK alrededor de cada mensa%e -ue se
muestra. 2e &uede cam*iar esos delimitadoresI tanto glo*al como individualmente.
1. Ca$"iar los Feli$itadores Glo"al$ente
Para cam*iar glo*almente los delimitadores de error en su @uncin controladorI a&enas des&us de cargar
la Clase $ormBvalidationI agregue estoG
$this->form_validation->set_error_delimiters('<div class="error">',
'</div>');
1n este e%em&lo cam*iamos los delimitadores a eti-uetas div.
/. Ca$"iar los Feli$itadores Individual$ente
A cada una de las dos @unciones -ue generan errores -ue se muestran en este tutorialI se les &uede
&ro&orcionar sus &ro&ios delimitadores seg:n se muestraG
<?php echo form_error('field name', '<div class="error">', '</div>'); ?>
)G
<?php echo validation_errors('<div class="error">', '</div>'); ?>
Hostrar los Errores Individual$ente
2i &re@iere mostrar un mensa%e de error cerca de cada cam&o de @ormulario en lugar de una listaI &uede usar la
@uncin #or$Berror+,.
Pru*elo[ Cam*ie su @ormulario &ara -ue lu"ca asHG
<h5>Usuario</h5>
<?php echo form_error('username'); ?>
<input type="text" name="username" value="<?php echo set_value('username'); ?>"
size="50" />
<h5>Contrasea</h5>
<?php echo form_error('password'); ?>
<input type="text" name="password" value="<?php echo set_value('password'); ?>"
size="50" />
<h5>Confirmar Contrasea</h5>
<?php echo form_error('passconf'); ?>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>"
size="50" />
<h5>Email</h5>
<?php echo form_error('email'); ?>
<input type="text" name="email" value="<?php echo set_value('email'); ?>"
size="50" />
2i no >a, erroresI no se muestra nada. 2i >a, un errorI a&arecer0 un mensa%e.
Gua del Usuario de CodeIgniter Versin 2.1.3 176
:ota I$portante< 2i usa un arra, como nom*re del cam&o de @ormularioI tiene -ue &ro&orcionarlo como un
arra, a la @uncin. 1%em&loG
<?php echo form_error('options[size]'); ?>
<input type="text" name="options[size]"
value="<?php echo set_value("options[size]"); ?>" size="50" />
Para ma,or in@ormacinI lea m0s a*a%o la seccin 7sar Arra,s como 3om*res de Cam&o.
Guardar ConDuntos de Reglas de Valida%in en un 0r%=ivo de Con#igura%in
7na @uncionalidad interesante de la Clase >or$Bvalidation es -ue le &ermite almacenar todas sus reglas de
validacin &ara toda su a&licacin en un arc>ivo de con@iguracin. Puede organi"ar estas reglas en Ngru&osN. 1stos
gru&os &ueden cargarse sea en @orma autom0tica cuando se llama un controladorO@uncin coincidenteI o
manualmente llamando a cada una seg:n se necesite.
C$o Guardar sus Reglas
Para almacenar sus reglas de validacinI sim&lemente cree un arc>ivo llamado #or$Bvalidation.p=p en su
car&eta appli%ation%on#ig. 1n ese arc>ivo colocar0 un arra, llamado ?%on#ig con sus reglas. Como se mostr
antesI el arra, de validacin tendr0 este &rototi&oG
$config = array(
array(
'field' => 'username',
'label' => 'Usuario',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Contrasea',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'Confirmar Contrasea',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
);
6u regla de valida%in se %argar' auto$'ti%a$ente ; se usar' %uando lla$e a la #un%in run+,.
Por @avor advierta -ue al arra, !IE:E -ue llamarse ?%on#ig.
Crear un ConDunto de Reglas
Para organi"ar sus reglas en Ncon%untosN se necesita -ue las colo-ue en Nsu* arra,sN. Considere el siguiente
e%em&loI -ue muestra dos con%untos de reglas. 6lamamos ar*itrariamente a esas dos reglas Nsignu&N , NemailN.
Puede darles el nom*re -ue gusteG
Gua del Usuario de CodeIgniter Versin 2.1.3 177
$config = array(
'signup' => array(
array(
'field' => 'username',
'label' => 'Usuario',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Contrasea',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'PasswordConfirmation',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
),
'email' => array(
array(
'field' => 'emailaddress',
'label' => 'EmailAddress',
'rules' => 'required|valid_email'
),
array(
'field' => 'name',
'label' => 'Name',
'rules' => 'required|alpha'
),
array(
'field' => 'title',
'label' => 'Title',
'rules' => 'required'
),
array(
'field' => 'message',
'label' => 'MessageBody',
'rules' => 'required'
)
)
);
Gua del Usuario de CodeIgniter Versin 2.1.3 178
7la$ar a un Grupo de Reglas Espe%#i%o
Para llamar a un gru&o es&ecH@icoI de*er0 &asar su nom*re a la @uncin run+,. Por e%em&loI &ara llamar a la regla
signupI >ar0 estoG
if ($this->form_validation->run('signup') == FALSE)
{
$this->load->view('mi_form');
}
else
{
$this->load->view('form_success');
}
0so%iar una >un%in Controlador %on un Grupo de Reglas
7n mtodo alternativo J, m0s autom0ticoK de llamar a un gru&o de reglas es darle nom*re de acuerdo a la
claseO@uncin controlador -ue &iense usar con l. Por e%em&loI digamos -ue tiene un controlador llamado He$"er
, una @uncin llamada signup. AsH es como la clase se &odrHa verG
<?php
class Gem!er extends CI_Controller {
function signup()
{
$this->load->library('form_validation');

if ($this->form_validation->run() == FALSE)
{
$this->load->view('mi_form');
}
else
{
$this->load->view('form_success');
}
}
}
?>
1n su arc>ivo de con@iguracin de validacinI le dar0 nom*re a su gru&o de reglas $e$"ersignupG
$config = array(
'mem!er)signup' => array(
array(
'field' => 'username',
'label' => 'Usuario',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Contrasea',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'PasswordConfirmation',
Gua del Usuario de CodeIgniter Versin 2.1.3 179
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
)
);
Cuando un grupo de reglas se lla$a igual 4ue una %lase#un%in %ontroladorJ se usar'
auto$'ti%a$ente %uando sea invo%ada la #un%in run+, #un%tion desde esa %lase#un%in.
Usar 0rra;s %o$o :o$"res de Ca$po
6a Clase >or$Bvalidation so&orta el uso de arra,s como nom*res de cam&o. Considere este e%em&loG
<input type="text" name="options[]" value="" size="50" />
2i usa un arra, como nom*re de cam&oI tiene -ue usar el 'I2') nom*re de arra, en las $unciones 9el&er -ue
necesitan nom*re de cam&o , como su nom*re de cam&o 8egla de !alidacin.
Por e%em&loI &ara esta*lecer una regla &ara el cam&o anteriorI usarHaG
$this->form_validation->set_rules('options[]', 'Options', 'required');
)I &ara mostrar un error &ara el cam&o anteriorI usarHaG
<?php echo form_error('options[]'); ?>
) &ara volver a llenar el cam&oI usarHaG
<input type="text" name="options[]"
value="<?php echo set_value('options[]'); ?>" size="50" />
Cam*in &uede usar arra,s multidimensionales como nom*res de cam&o. Por e%em&loG
<input type="text" name="options[si#e]" value="" size="50" />
) a:nG
<input type="text" name="sports[n!a][!as=et!all]" value="" size="50" />
Como con nuestro &rimer e%em&loI tiene -ue usar el mismo nom*re en las @unciones >el&erG
<?php echo form_error('sports[n!a][!as=et!all]'); ?>
2i est0 usando casillas de veri@icacin Ju otro cam&oK -ue tiene o&ciones m:lti&lesI no se olvide de de%ar un
corc>ete vacHo des&us de cada o&cinI &ara -ue todas las selecciones sean agregadas al arra, 3G6!G
Gua del Usuario de CodeIgniter Versin 2.1.3 180
<input type="checkbox" name="options[]" value="rojo" />
<input type="checkbox" name="options[]" value="azul" />
<input type="checkbox" name="options[]" value="verde" />
) si usa un arra, multidimensionalG
<input type="checkbox" name="options[color][]" value="rojo" />
<input type="checkbox" name="options[color][]" value="azul" />
<input type="checkbox" name="options[color][]" value="verde" />
Cam*in incluir0 corc>etes cuando use una @uncin >el&erG
<?php echo form_error('options[color][]'); ?>
Re#eren%ia de Reglas
6a siguiente es una lista de todas las reglas nativas -ue est0n dis&oni*les &ara usarseG
Regla 3ar'$etro Fes%rip%in EDe$plo
re4uired 3o Devuelve $A621 si el elemento de @ormulario est0 vacHo.
$at%=es 2H
Devuelve $A621 si el elemento de @ormulario no coincide
con el &ar0metro.
matc>es
k@ormBiteml
$inBlengt= 2H
Devuelve $A621 si el elemento de @ormulario es m0s corto
-ue el valor del &ar0metro.
minBlengt>k6l
$a1Blengt= 2H
Devuelve $A621 si el elemento de @ormulario es m0s largo
-ue el valor del &ar0metro.
ma<Blengt>k1/l
e1a%tBlengt= 2H
Devuelve $A621 si el elemento de @ormulario no es
e<actamente el valor del &ar0metro.
e<actBlengt>k8l
greaterBt=an 2H
Devuelve $A621 si el elemento de @ormulario es menor -ue
el valor del &ar0metro o no es numrico.
greaterBt>ank8l
lessBt=an 2H
Devuelve $A621 si el elemento de @ormulario es ma,or -ue
el valor del &ar0metro o no es numrico.
lessBt>ank8l
alp=a 3o
Devuelve $A621 si el elemento de @ormulario contiene algo
-ue no es un caracter al@a*tico.
alp=aBnu$eri% 3o
Devuelve $A621 si el elemento de @ormulario contiene algo
-ue no es un caracter al@anumrico.
alp=aBdas= 3o
Devuelve $A621 si el elemento de @ormulario contiene algo
-ue no es un caracter al@anumricoI guin de su*ra,ado o
guin com:n.
nu$eri% 3o
Devuelve $A621 si el elemento de @ormulario contiene algo
-ue no es un caracter numrico.
integer 3o
Devuelve $A621 si el elemento de @ormulario contiene algo
-ue no es un entero.
de%i$al 2H
Devuelve $A621 si el elemento de @ormulario no es
e<actamente el valor del &ar0metro.
isBnatural 3o
Devuelve $A621 si el elemento de @ormulario contiene algo
-ue no es un n:mero naturalG 0I 1I /I I etc.
Gua del Usuario de CodeIgniter Versin 2.1.3 181
Regla 3ar'$etro Fes%rip%in EDe$plo
isBnaturalBnoB8ero 3o
Devuelve $A621 si el elemento de @ormulario contiene algo
-ue no es un n:mero naturalI &ero no ceroG 1I /I I etc.
validBe$ail 3o
Devuelve $A621 si el elemento de @ormulario no contiene
una direccin de email v0lida.
validBe$ails 3o
Devuelve $A621 si cual-uier valor &rovisto en una lista
se&arada &or comas no es un email v0lido.
validBip 3o Devuelve $A621 la IP &ro&orcionada no es v0lida.
validB"ase`- 3o
Devuelve $A621 si la cadena &ro&orcionada contiene algo
-ue no es un caracter Base6#.
:ota< 1stas reglas tam*in se &ueden llamar desde @unciones discretas. Por e%em&loG
$this->form_validation->required($string);
:ota< Cam*in &uede usar @unciones nativas de P9P -ue &ermiten un solo &ar0metro.
Re#eren%ia de 3repara%iones
6a siguiente es una lista de todas las @unciones de &re&aracin -ue est0n dis&oni*les &ara usarseG
:o$"re 3ar'$etro Fes%rip%in
1ssB%lean 3o
1%ecuta los datos mediante la @uncin de $iltrado E22I descri&ta en la &0gina
Clase In&ut.
prepB#orB#or$ 3o
Convierte los caracteres es&eciales &ara -ue los datos 9C'6 se &uedan
mostrar en un cam&o de @ormulario sin rom&erlo.
prepBurl 3o Agrega N>tt&GOON a las 786s si @alta.
stripBi$ageBtags 3o Luita el 9C'6 de las eti-uetas de imagenI de%ando la 786 en crudo.
en%odeBp=pBtags 3o Convierte las eti-uetas P9P a entidades.
:ota< Cam*in &uede usar @unciones nativas de P9P -ue &ermiten un &ar0metroI como tri$I
=t$lspe%ial%=arsI urlde%odeI etc.
Re#eren%ia de >un%iones
6as siguientes @unciones est0n &ensadas &ara usarse en sus @unciones controladoras.
?t=is@A#or$Bvalidation@AsetBrules+,
6e &ermite esta*lecer reglas de validacinI como se descri*e en las secciones anteriores del tutorialG
1sta*lecer 8eglas de !alidacin
Auardar Aru&os de 8eglas de !alidacin en un Arc>ivo de Con@iguracin
Gua del Usuario de CodeIgniter Versin 2.1.3 182
?t=is@A#or$Bvalidation@Arun+,
1%ecuta las rutinas de validacin. Devuelve el *ooleano !RUE en caso de <ito , >076E en caso de @alla.
)&cionalmenteI &uede &asar el nom*re del gru&o de validacin mediante la @uncinI como se descri*e enG Auardar
Aru&os de 8eglas de !alidacin en un Arc>ivo de Con@iguracin.
?t=is@A#or$Bvalidation@AsetB$essage+,
6e &ermite esta*lecer mensa%es de error. !ea m0s arri*a 1sta*lecer 'ensa%es de 1rror.
Re#eren%ia de .elpers
6as siguientes @unciones >el&er est0n dis&oni*les &ara usarse en los arc>ivos de vistas -ue contienen sus
@ormularios. Advierta -ue stos son @unciones &roceduralesI &or lo tanto no necesitan -ue les ante&onga ?t=is@
A#or$Bvalidation.
#or$Berror+,
'uestra un mensa%e de error individual asociado con el nom*re del cam&o suministrado a la @uncin. 1%em&loG
<?php echo form_error('username'); ?>
2e &ueden es&eci@icar o&cionalmente los delimitadores de error. !ea m0s arri*a la seccin Cam*iar los
Delimitadores de 1rror.
validationBerrors+,
'uestra todos los mensa%es de error como una cadena. 1%em&loG
<?php echo validation_errors(); ?>
2e &ueden es&eci@icar o&cionalmente los delimitadores de error. !ea m0s arri*a la seccin Cam*iar los
Delimitadores de 1rror.
setBvalue+,
6e &ermite esta*lecer un valor de un cam&o de te<to o un te<tarea. Ciene -ue &ro&orcionar el nom*re del cam&o
mediante el &rimer &ar0metro de la @uncin. 1l segundo &ar0metro Jo&cionalK le &ermite esta*lecer un valor &or
de@ecto &ara el @ormulario. 1%em&loG
<input type="text" name="cantidad"
value="12pp eco set_*alue&6cantidad6H 606'5 23" size="50" />
1l @ormulario anterior mostrar0 N0N cuando se cargue &or &rimera ve".
setBsele%t+,
2i usa un men: Esele%tAI esta @uncin le &ermite mostrar el Htem de men: -ue se seleccion. 1l &rimer
&ar0metro tiene -ue contener el nom*re del men: selectI el segundo &ar0metro tiene -ue contener el valor de
cada Htem , el tercer &ar0metro Jo&cionalK le &ermite esta*lecer un Htem como valor &or de@ecto Jusar *ooleano
!RUE>076EK. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 183
<select name="mi_select">
<option value="uno"
12pp eco set_select&6mi_select6H 6uno6H +,-.'5 23 >Uno
</option>
<option value="dos"
12pp eco set_select&6mi_select6H 6dos6'5 23 >Dos
</option>
<option value="tres"
12pp eco set_select&6mi_select6H 6tres6'5 23 >Tres
</option>
</select>
setB%=e%I"o1+,
6e &ermite mostrar una casilla de veri@icacin en el estado en -ue se envi. 1l &rimer &ar0metro tiene -ue
contener el nom*re de la casilla de veri@icacinI el segundo &ar0metro tiene -ue contener su valor , el tercer
&ar0metro Jo&cionalK le &ermite esta*lecer un Htem como valor &or de@ecto Jusar *ooleano !RUE>076EK.
1%em&loG
<input type="checkbox" name="mi_check[]" value="1"
12pp eco set_cec=!ox&6mi_cec=[]6H 616'5 23 />
<input type="checkbox" name="mi_check[]" value="2"
12pp eco set_cec=!ox&6mi_cec=[]6H 6$6'5 23 />
setBradio+,
6e &ermite mostrar *otones de radio en el estado en -ue @ueron enviados. 1sta @uncin es idntica a la @uncin
setB%=e%I"o1+, anterior.
<input type="radio" name="mi_radio" value="1"
12pp eco set_radio&6mi_radio6H 616H +,-.'5 23 />
<input type="radio" name="mi_radio" value="2"
12pp eco set_radio&6mi_radio6H 6$6'5 23 />
Gua del Usuario de CodeIgniter Versin 2.1.3 184
Clase >!3
6a Clase >!3 de CodeIgniter &ermite trans@erir arc>ivos a un servidor remoto. 6os arc>ivos remotos tam*in se
&ueden moverI renom*rarI , eliminar. 6a Clase >!3 tam*in inclu,e una @uncin de Nes&e%adoN -ue &ermite recrear
remotamente un directorio local entero mediante $CP.
:ota< 3o est0n so&ortados los &rotocolos 2$CP , 226I solamente el $CP est0ndar.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la Clase >!3 se iniciali"a en su controlador usando la @uncin ?t=is@
Aload@Ali"rar;G
$this->load->library('ftp');
7na ve" cargadaI el o*%eto $CP estar0 dis&oni*le usandoG ?t=is@A#tp.
EDe$plos de Uso
1n este e%em&loI se a*re una cone<in a un servidor $CPI se lee , su*e un arc>ivo local en modo A2CII. 6os
&ermisos de arc>ivo se esta*lecen a 744. :ota< Para esta*lecer &ermisos se necesita P9P 4.
$this->load->library('ftp');
$config['hostname'] = 'ftp.ejemplo.com';
$config['username'] = 'su-usuario';
$config['password'] = 'su-contrasea';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$this->ftp->upload('/local/ruta/a/mi_archivo.html',
'/public_html/mi_archivo.html', 'ascii', 0775);
$this->ftp->close();
1n este e%em&loI se recu&era una lista de arc>ivos desde el servidor.
$this->load->library('ftp');
$config['hostname'] = 'ftp.ejemplo.com';
$config['username'] = 'su-usuario';
$config['password'] = 'su-contrasea';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$list = $this->ftp->list_files('/public_html/');
print_r($list);
$this->ftp->close();
Gua del Usuario de CodeIgniter Versin 2.1.3 185
1n este e%em&lo un directorio local se es&e%a en el servidor.
$this->load->library('ftp');
$config['hostname'] = 'ftp.ejemplo.com';
$config['username'] = 'su-usuario';
$config['password'] = 'su-contrasea';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$this->ftp->mirror('/ruta/a/mi_carpeta/', '/public_html/mi_carpeta/');
$this->ftp->close();
Re#eren%ia de >un%iones
?t=is@A#tp@A%onne%t+,
Conecta e inicia sesin en el servidor $CP. 6as &re@erencias de cone<in se esta*lecen &asando un arra, a la
@uncinI o se &ueden almacenar en un arc>ivo de con@iguracin.
A-uH >a, un e%em&lo -ue muestra cmo esta*lecer las &re@erencias manualmenteG
$this->load->library('ftp');
$config['hostname'] = 'ftp.ejemplo.com';
$config['username'] = 'su-usuario';
$config['password'] = 'su-contrasea';
$config['port'] = 21;
$config['passive'] = FALSE;
$config['debug'] = TRUE;
$this->ftp->connect($config);
Esta"le%er 3re#eren%ias >!3 en un 0r%=ivo de Con#igura%in
2i lo &re@iereI &uede almacenar sus &re@erencias $CP en un arc>ivo de con@iguracin. 2im&lemente cree un nuevo
arc>ivo llamado #tp.p=p , agrguele el arra, ?%on#ig. 6uego guarde el arc>ivo en %on#ig#tp.p=p , se lo usar0
autom0ticamente.
7as op%iones de %one1in disponi"les son<
=ostna$e ( 3om*re del >ost de $CP. 3ormalmente algo comoG @t&.e%em&lo.com
userna$e ( 3om*re del usuario de $CP.
passCord ( Contrase+a de $CP.
port ( 3:mero de &uerto. 1sta*lecido a 21 &or de@ecto.
de"ug ( !RUE>076E J*ooleanoK. 2i >a*ilitar la de&uracin &ara mostrar mensa%es de error.
passive ( !RUE>076E J*ooleanoK. 2i usar el modo &asivo. Por de@ecto est0 esta*lecido
autom0ticamente el modo &asivo.
?t=is@A#tp@Aupload+,
2u*e un arc>ivo a su servidor. Ciene -ue &ro&orcionar las rutas local , remota. )&cionalmente &uede esta*lecer el
modo , los &ermisos. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 186
$this->ftp->upload('/local/ruta/a/mi_archivo.html',
'/public_html/mi_archivo.html', 'ascii', 0775);
7as op%iones de $odo son< as%iiI "inar; , auto Jvalor &or de@ectoK. 2i se usa autoI *asar0 el modo en la
e<tensin del arc>ivo origen.
6os &ermisos est0n dis&oni*les si est0 e%ecutando P9P 4 , se &ueden &asar como un valor o%tal en el cuarto
&ar0metro.
?t=is@A#tp@AdoCnload+,
Descarga un arc>ivo desde su servidor. Ciene -ue &ro&orcionar las rutas remota , local. )&cionalmente &uede
esta*lecer el modo. 1%em&loG
$this->ftp->download('/public_html/mi_archivo.html',
'/local/ruta/a/mi_archivo.html', 'ascii');
7as op%iones de $odo son< as%iiI "inar; , auto Jvalor &or de@ectoK. 2i se usa autoI *asar0 el modo en la
e<tensin del arc>ivo origen.
Devuelve >076E si la descarga no se reali"a satis@actoriamente Jinclu,endo si P9P no tiene &ermiso &ara escri*ir el
arc>ivo localK.
?t=is@A#tp@Arena$e+,
6e &ermite renom*rar un arc>ivo. Pro&orcione la rutano$"re del arc>ivo origen , la rutano$"re del nuevo
arc>ivo.
// Renombra verde.html a azul.html
$this->ftp->rename('/public_html/foo/verde.html', '/public_html/foo/azul.html');
?t=is@A#tp@A$ove+,
6e &ermite mover un arc>ivo. Pro&orcione las rutas de origen , destinoG
// Mueve blog.html desde "jose" a "lucas"
$this->ftp->move('/public_html/jose/blog.html', '/public_html/lucas/blog.html');
:ota< si el nom*re del arc>ivo destino es di@erenteI el arc>ivo se renom*rar0.
?t=is@A#tp@AdeleteB#ile+,
6e &ermite eliminar un arc>ivo. Pro&orcione la ruta origen con el nom*re del arc>ivo.
$this->ftp->delete_file('/public_html/jose/blog.html');
?t=is@A#tp@AdeleteBdir+,
6e &ermite eliminar un directorio , todo lo -ue contiene. Pro&orcione la ruta origen &ara el directorio con una *arra
al @inal.
Gua del Usuario de CodeIgniter Versin 2.1.3 187
I$portante< 2ea HUQ cuidadoso con esta @uncin. 1liminar0 recursivamente todo lo -ue est dentro de la
ruta &ro&orcionadaI inclu,endo su*car&etas , sus arc>ivos. Aseg:rese a*solutamente -ue la ruta es correcta.
Prue*e &rimero usando la @uncin listB#iles+, &ara com&ro*ar -ue la ruta es correcta.
$this->ftp->delete_dir('/public_html/ruta/a/carpeta/');
?t=is@A#tp@AlistB#iles+,
6e &ermite recu&erar una lista de arc>ivos en su servidorI devuelta como un arra;. Ciene -ue &ro&orcionar la ruta
al directorio deseado.
$list = $this->ftp->list_files('/public_html/');
print_r($list);
?t=is@A#tp@A$irror+,
6ee recursivamente una car&eta local , todo lo -ue contiene Jinclu,endo su*car&etasK , crea un es&e%o mediante
$CP *asado en l. Cual-uiera -ue sea la estructura de directorios de la ruta del arc>ivo original ser0 recreado en el
servidor. De*e &ro&orcionar una ruta de origen , una ruta de destinoG
$this->ftp->mirror('/ruta/a/mi_carpeta/', '/public_html/mi_carpeta/');
?t=is@A#tp@A$Idir+,
6e &ermite crear un su*directorio en su servidor. Pro&orcione la ruta -ue termina en el nom*re de la car&eta -ue
desea crear con una *arra @inal. 6os &ermisos se &ueden esta*lecer al &asar un valor o%tal en el segundo
&ar0metro Jsi est0 e%ecutando P9P 4K.
// Crea una carpeta llamada "bar"
$this->ftp->mkdir('/public_html/foo/bar/', DIR_WRITE_MODE);
?t=is@A#tp@A%=$od+,
6e &ermite esta*lecer los &ermisos de arc>ivo. Pro&orcione la ruta al arc>ivo o car&eta a los -ue desea alterar los
&ermisosG
// Chmod "bar" a 777
$this->ftp->chmod('/public_html/foo/bar/', DIR_WRITE_MODE);
?t=is@A#tp@A%lose+,
Cierra la cone<in al servidor. 2e recomienda -ue la use una ve" -ue termine de su*ir.
Gua del Usuario de CodeIgniter Versin 2.1.3 188
Clase I$ageBli"
6a Clase I$ageBli" de CodeIgniter le &ermite reali"ar las siguientes accionesG
8edimensionamiento de Im0genes
Creacin de 'iniaturas
8ecorte de Im0genes
8otacin de Im0genes
'arca de Agua en Im0genes
2e so&ortan las tres &rinci&ales *i*liotecas de im0genesG ADOAD/I 3etPB' e Image'agic;.
:ota< 6a @uncionalidad de marca de agua solamente est0 dis&oni*le usando la *i*lioteca ADOAD/. Adem0sI a:n
cuando se so&ortan otras *i*liotecasI AD es re-uerida &ara -ue el scri&t calcule las &ro&iedades de la imagen.
2in em*argoI el &rocesamiento de la imagen ser0 reali"ado con la *i*lioteca es&eci@icada.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la clase I$ageBli" se iniciali"a en su controlador usando la @uncin
?t=is@Aload@Ali"rar;G
$this->load->library('image_lib');
7na ve" -ue la *i*lioteca est cargadaI estar0 lista &ara usarse. 1l o*%eto de la *i*lioteca I$ageBli" -ue usar0
&ara llamar a todas las @unciones esG ?t=is@Ai$ageBli".
3ro%esar una I$agen
2in im&ortar el ti&o de &rocesamiento -ue -uiera reali"ar JredimensionarI recortarI rotar o &oner marca de aguaKI el
&roceso general es idntico. 1sta*lecer0 algunas &re@erencias corres&ondientes a la accin -ue tiene &ensado
e%ecutar , luego llamar a una de las cinco @unciones de &rocesamiento de im0genes dis&oni*les. Por e%em&loI &ara
crear una imagen en miniaturaI >ar0 estoG
$config['image_library'] = 'gd2';
$config['source_image'] = '/ruta/a/imagen/mi_pic.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 75;
$config['height'] = 50;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
1l cdigo anterior le dice a la @uncin i$ageBresi8e -ue *us-ue una imagen llamada $iBpi%.Dpg u*icada en la
car&eta sour%eBi$age , -ue luego cree una miniatura de 74 E 40 &i<eles usando la i$ageBli"rar; GF2. Como
la o&cin $aintainBratio est0 >a*ilitadaI la miniatura estar0 tan cerca del an%=o , del alto de@initivo como sea
&osi*le mientras se &reserva la relacin de as&ecto original. 6a miniatura se llamar0 $iBpi%Bt=u$".Dpg.
:ota< Para -ue la clase ImageBli* &ueda >acer cual-uier &rocesamientoI la car&eta -ue contiene los arc>ivos
de imagen tiene -ue tener &ermisos de escritura.
Gua del Usuario de CodeIgniter Versin 2.1.3 189
:ota< 1l &rocesamiento de im0genes &uede re-uerir una cantidad considera*le de memoria del servidor &ara
algunas o&eraciones. 2i e<&erimenta errores &or agotamiento de memoria mientras &rocesa im0genesI &uede
necesitar limitar sus tama+os m0<imos ,Oo a%ustar los lHmites de memoria de P9P.
>un%iones de 3ro%esa$iento
9a, cinco @unciones de &rocesamiento dis&oni*lesG
at>is(jimageBli*(jresi"eJK
at>is(jimageBli*(jcro&JK
at>is(jimageBli*(jrotateJK
at>is(jimageBli*(j=atermar;JK
at>is(jimageBli*(jclearJK
1stas @unciones devuelven el *ooleano !RUE en caso de <ito o >076E en caso de @alla. 2i @allanI 7d &uede
recu&erar el mensa%e de error usando esta @uncinG
echo $this->image_lib->display_errors();
7na *uena &r0ctica es usar condicionalmente la @uncin de &rocesamientoI mostrando el error en caso de @allaI de
esta @ormaG
if ( ! $this->image_lib->resize())
{
echo $this->image_lib->display_errors();
}
:ota< )&cionalmente &uede es&eci@icar -ue se a&li-ue el @ormateo 9C'6 a los erroresI enviando las eti-uetas de
a&erturaOcierre en la @uncinG
$this->image_lib->display_errors('<p>', '</p>');
3re#eren%ias
6as &re@erencias -ue se descri*en de*a%oI le &ermiten ada&tar el &rocesamiento de im0genes &ara satis@acer sus
necesidades.
Advierta -ue no todas las &re@erencias est0n dis&oni*les &ara cada @uncin. Por e%em&loI las &re@erencias del e%e
<O, solo est0n dis&oni*les &ara el recorte de Im0genes. Del mismo modoI las &re@erencias de anc>o , alto no
tienen e@ecto en el recorte. 6a columna Ndis&oni*ilidadN indica las @unciones so&ortadas &ara una dada &re@erencia.
Dis&oni*ilidad Jcolumna Dis&.KG
R ( 8edimensionamiento de Im0genes
C ( 8ecorte de Im0genes
Y ( 8otacin de Im0genes
W ( 'arca de Agua en Im0genes
Gua del Usuario de CodeIgniter Versin 2.1.3 190
3re#eren%ia
Valor por
de#e%to
Gp%iones Fes%rip%in Fisp.
i$ageBli"rar; AD/
ADI AD/I
Image'agic;I
3etPB'
1sta*lece la *i*lioteca de imagen a utili"arse. 8I CI EI ?
li"rar;Bpat= 3inguno 3inguno
1sta*lece la ruta del servidor &ara la *i*lioteca
Image'agic; o 3etPB'. 2i utili"a cual-uiera de las
*i*liotecas de*e &ro&orcionar la ruta.
8I CI E
sour%eBi$age 3inguno 3inguno
1sta*lece la rutaOnom*re original de la imagen. 6a ruta
tiene -ue ser una ruta relativa o a*soluta del servidorI
no una 786.
8I CI 2I ?
d;na$i%Boutput $A621
C871O$A621
J*ooleanoK
Determina si la nueva imagen de*erHa escri*irse al
disco o generarse din0micamente. :ota< 2i eli%e la
o&cin din0micaI solamente se &uede mostrar una
imagen &or ve" , no se &uede &osicionar en la &0gina.
2im&lemente im&rime din0micamente la imagen en
crudo en el navegadorI %unto con los enca*e"ados de
imagen.
8I CI EI ?
4ualit; .0d 1 ( 100d
1sta*lece la calidad de la imagen. Cuanto ma,or sea la
calidadI ma,or ser0 el tama+o del arc>ivo.
8I CI EI ?
neCBi$age 3inguno 3inguno
1sta*lece la rutaOnom*re destino de la imagen. 7sar0
esta &re@erencia cuando cree una nueva co&ia. 6a ruta
tiene -ue ser una ruta relativa o a*soluta del servidorI
no una 786
8I CI EI ?
Cidt= 3inguno 3inguno 1sta*lece el anc>o -ue -uisiera -ue la imagen tenga. 8I C
=eig=t 3inguno 3inguno 1sta*lece el alto -ue -uisiera -ue la imagen tenga. 8I C
%reateBt=u$" $A621
C871O$A621
J*ooleanoK
6e dice a la @uncin de &rocesamiento de im0genes
-ue cree una miniatura.
8
t=u$"B$arIer Bt>um* 3inguno
1s&eci@ica el indicador de miniatura. 2e insertar0 %usto
antes de la e<tensin del arc>ivoI &or lo -ue
miB&ic.%&g se convertir0 en miB&icBt>um*.%&g
8
$aintainBratio C871
C871O$A621
J*ooleanoK
1s&eci@ica si mantener la relacin de as&ecto al
redimensionar o usar valores rHgidos.
8I C
$asterBdi$ auto
autoI =idt>I
>eig>t
1s&eci@ica -ue usar como e%e maestro al redimensionar
o crear miniaturas. Por e%em&loI digamos -ue -uiere
redimensionar una imagen a 100 E 74 &i<eles. 2i el
tama+o de la imagen original no &ermite un
redimensionamiento &er@ecto &ara esas dimensionesI
este valor determina cual e%e de*erHa usarse como
valor rHgido. NautoN esta*lece autom0ticamente el e%e
*asado en si la imagen es es m0s anc>a o viceversa.
8
rotationBangle 3inguno
.0I 180I /70I
vrtI >or
1s&eci@ica el 0ngulo de rotacin al rotar im0genes.
Advierta -ue P9P rota en sentido anti>orarioI &or lo
tanto una rotacin de .0 grados se tiene -ue
es&eci@icar como /70.
E
1Ba1is 3inguno 3inguno
1sta*lece la coordenada E &ara el recorte de
im0genes. Por e%em&loI un valor de 0 recortar0 la
imagen 0 &i<eles desde la i"-uierda.
C
;Ba1is 3inguno 3inguno
1sta*lece la coordenada R &ara el recorte de
im0genes. Por e%em&loI un valor de 0 recortar0 la
imagen 0 &i<eles desde arri*a.
C
Gua del Usuario de CodeIgniter Versin 2.1.3 194
3re#eren%ias de Har%a de 0gua
1sta ta*la muestra las &re@erencias -ue est0n dis&oni*les &ara am*os ti&os de marca de agua Jte<t u overla,K.
3re#eren%ia
Valor por
Fe#e%to
Gp%iones Fes%rip%in
C$Bt;pe te<t te<tI overla, 1sta*lece el ti&o de marca de agua -ue se de*erHa usar.
sour%eBi$age 3inguno 3inguno
1sta*lece la rutaOnom*re origen de la imagen. 6a ruta tiene
-ue ser una ruta relativa o a*soluta del servidorI no una 786.
d;na$i%Boutput $A621
C871O$A621
J*ooleanoK
Determina si el nuevo arc>ivo de imagen de*erHa ser escrito al
disco o ser generado din0micamente. 3otaG 2i eli%e la o&cin
din0micaI solamente se &uede mostrar una imagen &or ve" ,
no se &uede &osicionarla en la &0gina. 2im&lemente im&rime
din0micamente una imagen en crudo en el navegadorI %unto
con los enca*e"ados de imagen.
4ualit; .0d 1 ( 100d
1sta*lece la calidad de la imagen. Cuanto ma,or sea la calidadI
ma,or ser0 el tama+o del arc>ivo.
padding 3inguno 7n n:mero
Cantidad de rellenoI esta*lecido en &i<elesI -ue se a&licar0 a la
marca de agua &ara ale%arla de los *ordes de su imagen.
C$BvrtBalign$ent *ottom
to&I middleI
*ottom
1sta*lece la alineacin vertical &ara la imagen de la marca de
agua.
C$B=orBalign$ent center
le@tI centerI
rig>t
1sta*lece la alineacin >ori"ontal &ara la imagen de la marca
de agua.
C$B=orBo##set 3inguno 3inguno
1s&eci@ica el des&la"amiento >ori"ontal Jen &i<elesK a a&licar a
la &osicin de la marca de agua. 1l des&la"amiento mueve
normalmente la marca de agua a la derec>aI e<ce&to si su
alineacin est0 esta*lecida a Nrig>tNI &or lo -ue el valor de
des&la"amiento mover0 la marca de agua >acia la i"-uierda de
la imagen.
C$BvrtBo##set 3inguno 3inguno
1s&eci@ica el des&la"amiento vertical Jen &i<elesK a a&licar a la
&osicin de la marca de agua. 1l des&la"amiento mueve
normalmente la marca de agua >acia a*a%oI e<ce&to si su
alineacin est0 esta*lecida a N*ottomNI &or lo -ue el valor de
des&la"amiento mover0 la marca de agua >acia la &arte
su&erior de la imagen.
3re#eren%ias del !ipo Pte1tP
1sta ta*la muestra las &re@erencias -ue est0n dis&oni*les &ara el ti&o Nte<tN de marca de agua.
Gua del Usuario de CodeIgniter Versin 2.1.3 195
3re#eren%ia
Valor por
Fe#e%to
Gp%iones Fes%rip%in
C$Bte1t 3inguno 3inguno
Ce<to -ue -uiere mostrar como marca de agua. Com:nmente
ser0 un aviso de co&,rig>t.
C$B#ontBpat= 3inguno 3inguno
8uta del servidor &ara la @uente Crue C,&e -ue -uiere usar. 2i
no usa esta o&cinI se usar0 la @uente AD nativa.
C$B#ontBsi8e 16 3inguno
Cama+o del te<to. 3otaG 2i no est0 usando la o&cin Crue
C,&e anteriorI el n:mero se esta*lece usando el rango 1 ( 4.
De lo contrarioI se &uede usar cual-uier tama+o de &H<el
v0lido &ara la @uente -ue est0 utili"ando.
C$B#ontB%olor $$$$$$ 3inguno
Color de la @uenteI es&eci@icado en >e<adecimal. Advierta -ue
tiene -ue usar el valor >e<adecimal com&leto de seis
caracteres J&or e%em&loI ..00KI en lugar de la versin
a*reviada de tres caracteres J&or e%em&loI @@@K.
C$Bs=adoCB%olor 3inguno 3inguno
Color de la som*raI es&eci@icado en >e<adecimal. 2i de%a esto
en *lancoI no se usar0 la som*ra. Advierta -ue tiene -ue usar
el valor >e<adecimal com&leto de seis caracteres J&or
e%em&loI ..00KI en lugar de la versin a*reviada de tres
caracteres J&or e%em&loI @@@K.
C$Bs=adoCBdistan%e 3inguno
Distancia Jen &i<elesK desde la @uente a donde la som*ra
de*erHa a&arecer.
3re#eren%ias del !ipo Poverla;P
1sta ta*la muestra las &re@erencias -ue est0n dis&oni*les &ara el ti&o Noverla,N de marca de agua.
3re#eren%ia
Valor por
Fe#e%to
Gp%iones Fes%rip%in
C$Bte1t 3inguno 3inguno
8uta del servidor a la imagen -ue desea usar como marca de
agua. 8e-uerida solamente si est0 usando el mtodo
Noverla,N.
C$B#ontBpat= 40 1 ( 100
)&acidad de la imagen. Puede es&eci@icar la o&acidad Jes
decirI trans&arenciaK de su imagen marca de agua. 1sto
&ermite -ue la marca de agua sea a&enas visi*le , -ue no
oculte totalmente los detalles de la imagen original detr0s
su,o. 6o tH&ico es una o&acidad del 40d.
C$B#ontBsi8e #
7n
n:mero
2i la marca de agua es una imagen P3A o AI$I &uede
es&eci@icar un color en la imagen &ara -ue sea
Ntrans&arenteN. 1ste valor J%unto con el siguienteK le &ermitir0
es&eci@icar ese color. 1sto @unciona es&eci@icando las
coordenadas N<N e NRN del &H<el Jmedido desde la es-uina
su&erior i"-uierdaK dentro de la imagen -ue corres&onde al
&H<el re&resentativo del color -ue -uiere -ue sea
trans&arente.
C$B#ontB%olor #
7n
n:mero
Dunto con el valor anterior. le &ermite es&eci@icar la
coordenada &ara el &H<el re&resentante del color -ue -uiere
-ue sea trans&arente.
Gua del Usuario de CodeIgniter Versin 2.1.3 196
Clase Input
6a Clase Input sirve &ara dos &ro&sitosG
Por seguridadI &re&rocesa los datos de entrada glo*ales.
Provee algunas @unciones >el&er &ara recu&erar datos de entrada , &re&rocesarlos.
:ota< 1l sistema iniciali"a autom0ticamente a esta claseI &or lo -ue no >a, necesidad de >acerlo manualmente.
>iltrado de 6eguridad
6a @uncin de @iltrado de seguridad se llama autom0ticamente cuando se invoca un nuevo controlador. 9ace lo
siguienteG
Destru,e el arra, glo*al A1C. Como CodeIgniter no usa cadenas A1CI no >a, ra"n &ara &ermitirlo
Destru,e todas las varia*les glo*ales en caso -ue registerBglo"als est activada
$iltra las claves de los arra,s 3G6!CGGXIEI &ermitiendo solamente caracteres al@anumricos J, unos
&ocos m0sK
Provee @iltrado E22 JCross(site 2cri&ting 9ac;sK. 1sto se &uede >a*ilitar glo*almente o *a%o &edido
1standari"a los caracteres de nueva lHnea a bn
>iltrado Y66
6a Clase Input tiene la >a*ilidad de @iltrar la entrada autom0ticamente &ara evitar ata-ues cross(site scri&ting. 2i
desea -ue el @iltrado se e%ecute autom0ticamente cada ve" -ue encuentra datos 3G6! o CGGXIEI &uede
>a*ilitarlo a*riendo su arc>ivo appli%ation%on#ig%on#ig.p=p , con@igurando estoG
$config['global_xss_filtering'] = TRUE;
Por @avorI re@erirse a la documentacin de la Clase 6e%urit; &ara ma,or in@ormacin so*re el $iltrado E22 en su
a&licacin.
Usar Fatos 3G6!J CGGXIE o 6ERVER
CodeIgniter viene con tres @unciones >el&er -ue le &ermiten recu&erar Htems de 3G6!I CGGXIE o 6ERVER. 6a
&rinci&al venta%a de usar las @unciones &rovistas en lugar de recu&erar un Htem directamente J ?B3G6!KLalgoLMK es
-ue las @unciones com&ro*ar0n si el Htem est0 esta*lecido , devolver0n >076E J*ooleanoK si no lo est0. 1sto le
&ermite usar convenientemente los datos sin tener -ue &ro*ar &rimero si el Htem e<iste. 1n otras &ala*rasI
com:nmente >arHa estoG
if ( ! isset($_POST['algo']))
{
$algo = FALSE;
}
else
{
$algo = $_POST['algo'];
}
Con las @unciones incor&oradas de CodeIgniterI sim&lemente &uede >acer estoG
Gua del Usuario de CodeIgniter Versin 2.1.3 197
$algo = $this->input->post('algo');
6as tres @unciones sonG
at>is(jin&ut(j&ostJK
at>is(jin&ut(jcoo;ieJK
at>is(jin&ut(jserverJK
?t=is@Ainput@Apost+,
1l &rimer &ar0metro contendr0 el nom*re del Htem de 3G6! -ue est0 *uscandoG
$this->input->post('algun_dato');
6a @uncin devuelve >076E J*ooleanoK si el Htem -ue est0 intentando recu&erar no e<iste.
1l segundo &ar0metro Jo&cionalK le &ermite &asar el dato a travs del @iltro E22. 2e >a*ilita esta*leciendo el
segundo &ar0metro al *ooleano !RUE.
$this->input->post('algun_dato', +,-.);
Para devolver un arra, de todos los Htems 3G6!I llamarla sin &ar0metros.
Para devolver todos los Htems 3G6! , &asarlos a travs del @iltro E22I de%e el &rimer &ar0metro en *lanco ,
esta*le"ca el segundo &ar0metro a un *ooleano.
6a @uncin devuelve >076E J*ooleanoK si no >a, Htems en el 3G6!.
$this->input->post(); // devuelve todos los tems POST con Filtrado XSS
$this->input->post(NULL, ?@AB.); // devuelve todos los tems POST sin Filtrado XSS
?t=is@Ainput@Aget+,
1sta @uncin es idntica a la @uncin &ostI solo -ue recu&era datos GE!G
$this->input->get('algun_dato', TRUE);
Para devolver un arra, de todos los HtemsI llamarla sin &ar0metros.
Para devolver todos los Htems GE! , &asarlos a travs del @iltro E22I de%e el &rimer &ar0metro en *lanco ,
esta*le"ca el segundo &ar0metro al *ooleano C871.
6a @uncin devuelve >076E J*ooleanoK si no >a, Htems en el GE!.
$this->input->get(); // devuelve todos los tems GET con Filtrado XSS
$this->input->get(NULL, ?@AB.); // devuelve todos los tems items sin Filtrado XSS
Gua del Usuario de CodeIgniter Versin 2.1.3 198
?t=is@Ainput@AgetBpost+,
1sta @uncin *uscar0 datos a travs de los @lu%os &ost , getI &rimero en &ost , luego en getG
$this->input->get_post('algun_dato', TRUE);
?t=is@Ainput@A%ooIie+,
1sta @uncin es idntica a la @uncin &ostI salvo -ue recu&era datos de coo;ieG
$this->input->cookie('algun_dato', TRUE);
?t=is@Ainput@Aserver+,
1sta @uncin es idntica a las @unciones anterioresI salvo -ue recu&era datos de serverG
$this->input->server('algun_dato');
?t=is@Ainput@AsetB%ooIie+,
1sta*lece una coo;ie conteniendo los valores -ue es&eci@i-ue. 9a, dos @ormas de &asarle in@ormacin a esta
@uncinG 'todo de Arra, , Par0metros Discretos.
H9todo de 0rra;
Al usar este mtodoI se &asa un arra, asociativo al &rimer &ar0metroG
$cookie = array(
'name' => 'Nombre de la Cookie',
'value' => 'Valor de la Cookie',
'expire' => '86500',
'domain' => '.algun-dominio.com',
'path' => '/',
'prefix' => 'mi_prefijo_',
'secure' => TRUE
);
$this->input->set_cookie($cookie);
:otas<
2olamente el nom*re , el valor son o*ligatorios. Para *orrar una coo;ie esta*le"ca la caducidad JYe<&ireYK
en *lanco.
6a caducidad se esta*lece en segundosI -ue se agregar0n a la >ora actual. 3o inclu,a la >oraI sino
solamente la cantidad de segundos desde a>ora en los -ue desea -ue la coo;ie sea v0lida. 2i la caducidad
se esta*lece a ceroI la coo;ie durar0 solamente el tiem&o en el -ue el navegador est a*ierto.
Para las coo;ies de todo el sitioI inde&endientemente de cmo sea solicitado su sitioI agregar su 786 al
dominio comen"ando con un &untoI asHG .su(dominio.com
3ormalmente la ruta no es necesaria &or-ue la @uncin esta*lece una ruta de servidor.
2olamente se necesita el &re@i%o si necesita evitar colisiones de nom*res con otras coo;ies -ue se llaman
Gua del Usuario de CodeIgniter Versin 2.1.3 199
igual en su servidor.
2olamente se necesita el *ooleano YsecureY si -uiere >acer una coo;ie seguraI esta*lecindolo a C871.
3ar'$etros Fis%retos
2i lo &re@iereI &uede esta*lecer la coo;ie &as0ndole datos al usar &ar0metros individualesG
$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix,
$secure);
?t=is@Ainput@A%ooIie+,
6e &ermite recu&erar una coo;ie. 1l &rimer &ar0metro contendr0 el nom*re de la coo;ie -ue est0 *uscando
Jinclu,endo cual-uier &re@i%oKG
cookie('alguna_cookie');
6a @uncin devuelve >076E J*ooleanoK si el Htem -ue est0 intentando recu&erar no e<iste.
1l segundo &ar0metro Jo&cionalK le &ermite &asar los datos a travs del @iltro E22. 2e >a*ilita esta*leciendo el
segundo &ar0metro al *ooleano !RUE.
cookie('alguna_cookie', TRUE);
?t=is@Ainput@AipBaddress+,
Devuelve la direccin IP del usuario actual. 2i la direccin IP no es v0lidaI la @uncin devolver0 la IPG 0.0.0.0.
echo $this->input->ip_address();
?t=is@Ainput@AvalidBip+?ip,
Coma como entrada una direccin IP , devuelve !RUE o >076E J*ooleanoK seg:n sea v0lida o no. :ota< 6a
@uncin ?t=is@Ainput@AipBaddress+, anterior valida la IP autom0ticamente.
if ( ! $this->input->valid_ip($ip))
{
echo 'Invlido';
}
else
{
echo 'Vlido';
}
Ace&ta un segundo &ar0metro ti&o string o&cional con valor NIPv#N o NIPv6N &ara es&eci@icar el @ormato de IP. 1l
de@ault veri@ica am*os @ormatos.
?t=is@Ainput@AuserBagent+,
Devuelve el agente de usuario Jnavegador =e*K -ue usa el usuario actual. Devuelve >076E si no est0 dis&oni*le.
Gua del Usuario de CodeIgniter Versin 2.1.3 200
echo $this->input->user_agent()
!ea la Clase UserBagent &ara o*tener in@ormacin de cmo e<traer de la cadena del agente de usuario.
?t=is@Ainput@Are4uestB=eaders+,
Qtil si est0 corriendo en un entorno -ue no es A&ac>e donde apa%=eBre4uestB=eaders+, no est0 so&ortado.
Devuelve un arra, de enca*e"ados.
$headers = $this->input->request_headers();
?t=is@Ainput@AgetBre4uestB=eader+,
Devuelve un miem*ro sim&le del arra, de enca*e"ados de solicitud.
$this->input->get_request_header('algun-encabezado', TRUE);
?t=is@Ainput@AisBaDa1Bre4uest+,
Com&rue*a si el enca*e"ado de servidor .!!3BYBRENUE6!EFBWI!. est0 esta*lecido , devuelve una
res&uesta *ooleana.
?t=is@Ainput@AisB%liBre4uest+,
Com&rue*a si la constante 6!FI: est0 esta*lecidaI -ue es una @orma segura de &ro*ar si P9P se est0 e%ecutando
desde la lHnea de comandos.
$this->input->is_cli_request();
Gua del Usuario de CodeIgniter Versin 2.1.3 201
Clase _avas%ript
:ota< 1ste driver es e<&erimental. 2u con%unto de caracterHsticas e im&lementacin &uede cam*iar en @uturas
versiones.
CodeIgniter &rovee una *i*lioteca &ara a,udarlo con ciertas @unciones comunes -ue &uede -uerer usar con
Davascri&t. Por @avor advierta -ue CodeIgniter no necesita la *i*lioteca DNuer; &ara e%ecutarseI , -ue cual-uier
otra *i*lioteca de scri&ting tam*in @uncionar0 igualmente *ien. 6a *i*lioteca DNuer; se &resenta sim&lemente &or
conveniencia si eli%e usarla.
Ini%iali8ar la Clase
Para iniciali"ar manualmente la Clase _avas%ript en el constructor de su controladorI use la @uncin ?t=is@Aload@
Ali"rar;. ActualmenteI solamente est0 dis&oni*le la *i*lioteca DNuer;I la -ue se cargar0 autom0ticamente
>aciendo estoG
$this->load->library('javascript');
6a Clase Davascri&t tam*in ace&ta &ar0metrosI DsBli"rar;Bdriver JstringK &or de@ecto Y%-uer,Y , autoload J*oolK
&or de@ecto !RUE. Puede anular los valores &or de@ecto si desea enviar a un arra, asociativoG
$this->load->library('javascript', array('js_library_driver' => 'scripto',
'autoload' => FALSE));
)tra ve"I actualmente solo Y%-uer,Y est0 dis&oni*le. 2in em*argoI &uede -uerer esta*lecer autoload a >076EI si
no -uiere -ue la *i*lioteca DNuer; inclu,a autom0ticamente una eti-ueta scri&t &ara el arc>ivo %Luer, &rinci&al.
1sto es :til si se est0 cargando desde un lugar @uera de CodeIgniterI o -ue ,a tienen la eti-ueta de scri&t en el
marcado.
7na ve" cargadaI el o*%eto de la *i*lioteca DNuer; estar0 dis&oni*le usandoG ?t=is@ADavas%ript.
Instala%in ; Con#igura%in
Esta"le%er estas Varia"les en su Vista
Como con una *i*lioteca de Davascri&tI sus arc>ivos tienen -ue estar dis&oni*les &ara su a&licacin.
Como Davascri&t es un lengua%e del lado del clienteI la *i*lioteca tiene -ue ser ca&a" de escri*ir contenido en su
salida @inal. AeneralmenteI esto signi@ica una vista. 3ecesitar0 incluir las siguientes varia*les en la seccin
E=eadA de su salida.
<?php echo $library_src;?>
<?php echo $script_head;?>
?li"rar;Bsr%I es donde se cargar0 el arc>ivo real de la *i*liotecaI asH como cual-uier llamada de otro scri&t de
&lugin` ?s%riptB=ead es donde se &resentar0n eventos es&ecH@icosI @unciones , otros comandos.
Esta"le%er la ruta a las "i"liote%as %on te$s de %on#igura%in
9a, algunos Htems de con@iguracin en la *i*lioteca _avas%ript. 1stos se &ueden esta*lecer en
appli%ation%on#ig%on#ig.p=pI dentro de su &ro&io arc>ivo %on#igDavas%ript.p=p o dentro de cual-uier
controlador usando la @uncin setBite$+,.
Gua del Usuario de CodeIgniter Versin 2.1.3 202
7na imagen se &uede usar como Ncargador de a%a<N o indicador de &rogreso. 2in ellaI a&arecer0 un sim&le
mensa%e de te<to de NcargaN cuando se necesite >acer la llamada A%a<.
$config['javascript_location'] = 'http://localhost/codeigniter/themes/js/jquery/';
$config['javascript_ajax_img'] = 'images/ajax-loader.gif';
2i mantiene sus arc>ivos en los mismos directorios desde donde se descargaronI entonces no necesita esta*lecer
estos Htems de con@iguracin.
7a Clase DNuer;
Para iniciali"ar manualmente la clase DNuer; en el constructor de su controladorI use la @uncin ?t=is@Aload@
Ali"rar;G
$this->load->library('jquery');
Puede enviar un &ar0metro o&cional &ara determinar si se incluir0 autom0ticamente o no una eti-ueta scri&t al
arc>ivo %Luer, &rinci&al cuando se cargue la *i*lioteca. Por de@ecto se crear0. Para evitar estoI cargue la *i*lioteca
como se indicaG
$this->load->library('jquery', FALSE);
7na ve" cargadaI el o*%eto de la *i*lioteca DNuer; estar0 dis&oni*le usandoG ?t=is@AD4uer;.
Eventos DNuer;
6os eventos se esta*lecen usando la siguiente sinta<is.
$this->jquery->event('element_path', code_to_run());
1n el e%em&lo anteriorG
event es cual-uier de estosG *lurI c>angeI clic;I d*lclic;I errorI @ocusI >overI ;e,do=nI ;e,u&I loadI
mousedo=nI mouseu&I mouseoverI mouseu&I resi"eI scrollI o unload.
ele$entBpat= es cual-uier selector %Luer, v0lido. De*ido a la sinta<is :nica de selector de %Luer,I este
es normalmente un elemento idI o selector C22. Por e%em&lo NmnoticeBareaN a@ectarHa a gdiv
ideNnoticeBareaNj , a Nmcontent a.noticeN a@ectarHa a todas las anclas con una clase de NnoticeN en el div
con id NcontentN.
%odeBtoBrun+, es el scri&t -ue 7d escri*eI o una accin tal como un e@ecto de la *i*lioteca %Luer,.
E#e%tos
6a *i*lioteca DNuer; so&orta un &oderoso re&ertorio de 1@ectos. Antes -ue se &uede usar un e@ectoI >a, -ue
cargarloG
$this->jquery->effect([ruta opcional] nombre de plugin);
// por ejemplo $this->jquery->effect('bounce');
Gua del Usuario de CodeIgniter Versin 2.1.3 203
=ide+, s=oC+,
Cada una de estas @unciones a@ectar0 la visi*ilidad de un Htem en la &0gina. =ide+, >ar0 -ue el Htem sea invisi*leI
mientras -ue s=oC+, lo mostrar0.
$this->jquery->hide(target, optional speed, optional extra information);
$this->jquery->show(target, optional speed, optional extra information);
target ser0 cual-uier selector %Luer, v0lido o selectores.
speed es o&cional , se esta*lece como slo=I normalI @astI o alternativamente a una cantidad de
milisegundos.
e1tra in#or$ation es o&cional , &odrHa incluir un call*ac; u otra in@ormacin adicional.
toggle+,
Cam*iar0 la visi*ilidad de un Htem al o&uesto del estado actualI ocultando elementos visi*les , volviendo visi*les
los ocultos.
$this->jquery->toggle(target);
target ser0 cual-uier selector %Luer, v0lido o selectores.
ani$ate+,
$this->jquery->animate(target, parameters, optional speed,
optional extra information);
target ser0 cual-uier selector %Luer, v0lido o selectores.
para$eters en %Luer, generalmente inclu,en una serie de &ro&iedades C22 -ue desea cam*iar.
speed es o&cional , se esta*lece como slo=I normalI @astI o alternativamente a una cantidad de
milisegundos.
e1tra in#or$ation es o&cional , &odrHa incluir un call*ac; u otra in@ormacin adicional.
Podr0 ver un resumen com&leto en >tt&GOOdocs.%-uer,.comO1@@ectsOanimate.
A-uH >a, un e%em&lo de ani$ate+, llamado en un div con id e NnoteN , dis&arado &or un clic usando el evento
%li%I+, de la *i*lioteca %Luer,.
$params = array(
'height' => 80,
'width' => '50%',
'marginLeft' => 125
);
$this->jquery->click('#trigger', $this->jquery->animate('#note', $params,
normal));
toggleClass+,
1sta @uncin agregar0 o eliminar0 un clase C22 al target.
$this->jquery->toggleClass(target, class);
Gua del Usuario de CodeIgniter Versin 2.1.3 204
target ser0 cual-uier selector %Luer, v0lido o selectores.
%lass es cual-uier nom*re de clase C22. Advierta -ue esta clase tiene -ue estar de@inida , dis&oni*le en
un C22 -ue ,a est cargado.
#adeIn+, #adeGut+,
1stos e@ectos causan -ue los elementos desa&are"can , vuelvan a a&arecer con el tiem&o.
$this->jquery->fadeIn(target, optional speed, optional extra information);
$this->jquery->fadeOut(target, optional speed, optional extra information);
target ser0 cual-uier selector %Luer, v0lido o selectores.
speed es o&cional , se esta*lece como slo=I normalI @astI o alternativamente a una cantidad de
milisegundos.
e1tra in#or$ation es o&cional , &odrHa incluir un call*ac; u otra in@ormacin adicional.
slideUp+, slideFoCn+, slide!oggle+,
1stos e@ectos causan -ue los elementos se deslicen.
$this->jquery->slideUp(target, optional speed, optional extra information);
$this->jquery->slideDown(target, optional speed, optional extra information);
$this->jquery->slideToggle(target, optional speed, optional extra information);
target ser0 cual-uier selector %Luer, v0lido o selectores.
speed es o&cional , se esta*lece como slo=I normalI @astI o alternativamente a una cantidad de
milisegundos.
e1tra in#or$ation es o&cional , &odrHa incluir un call*ac; u otra in@ormacin adicional.
3lugins
Algunos &lugins de %Luer, est0n dis&oni*les usando esta *i*lioteca.
%orner+,
2e lo usa &ara agregar distintas es-uinas a los elementos de &0gina. Para m0s detalles ver
>tt&GOO===.malsu&.comO%-uer,OcornerO.
at>is(j%-uer,(jcornerJtargetI cornerBst,leK`
target ser0 cual-uier selector %Luer, v0lido o selectores.
%ornerBst;le es o&cional , se &uede esta*lecer a cual-uier estilo v0lido tal como roundI s>ar&I *evelI
*iteI dogI etc. 6as curvas individuales se &ueden esta*lecer siguiendo el estilo con un es&acio , usando NtlN
Jto& le@tKI NtrN Jto& rig>tKI N*lN J*ottom le@tKI or N*rN J*ottom rig>tK.
at>is(j%-uer,(jcornerJNmnoteNI Ncool tl *rNK`
ta"lesorter+,
Descri&cin &endiente
Gua del Usuario de CodeIgniter Versin 2.1.3 205
$odal+,
Descri&cin &endiente
%alendar+,
Descri&cin &endiente
Gua del Usuario de CodeIgniter Versin 2.1.3 206
Clase 7ang
6a Clase 7ang &rovee @unciones &ara recu&erar arc>ivos de idioma , lHneas de te<to a los e@ectos de la
internacionali"acin.
1n la car&eta s;ste$ de CodeIgniter encontrar0 otraI llamada languageI -ue contiene con%untos de arc>ivos de
idioma. Puede crear sus &ro&ios arc>ivos de idioma seg:n necesite a @in de mostrar errores , otros mensa%es en
otros idiomas.
6os arc>ivos de idiomas se almacenan normalmente en su directorio s;ste$language. AlternativamenteI &uede
crear una car&eta llamada language dentro de su car&eta appli%ation , almacenarlos allH. CodeIgniter &rimero
*uscar0 en su directorio appli%ationlanguage. 2i el directorio no e<iste o el idioma es&eci@icado no est0 u*icado
allHI CI en su lugar *uscar0 en la car&eta glo*al s;ste$language.
:ota< Cada idioma de*er0 almacenarse en su &ro&ia car&eta. Por e%em&loI los arc>ivos de ingls se u*ican enG
s;ste$languageenglis=.
Crear 0r%=ivos de Idio$a
6os arc>ivos de idioma se tiene -ue llamar con Blang.p=p como e<tensin del arc>ivo. Por e%em&loI digamos -ue
-uiere crear un arc>ivo conteniendo los mensa%es de error. Puede llamarloG errorBlang.p=p
Dentro del arc>ivoI asignar0 cada lHnea de te<to a un arra, llamado ?lang con este &rototi&oG
$lang['clave_idioma'] = "Mensaje a mostrarse";
:ota< 1s *uena &r0ctica usar un &re@i%o com:n &ara todos los mensa%es en un dado arc>ivo &ara evitar colisiones
con elementos -ue se llaman igual en otros arc>ivos. Por e%em&loI si est0 creando mensa%es de error &uede
&re@i%arlos con errorB.
$lang['error_email_missing'] = "Tiene que enviar un correo electrnico";
$lang['error_url_missing'] = "Tiene que enviar una URL";
$lang['error_username_missing'] = "Tiene que enviar un nombre de usuario";
Cargar un 0r%=ivo de Idio$a
Al e@ecto de recu&erar una lHnea de un arc>ivo &articularI &rimero tiene -ue cargar el arc>ivo. Con el siguiente
cdigo se carga un arc>ivo de idiomaG
$this->lang->load('arci*o', 'idioma');
Donde ar%=ivo es el nom*re del arc>ivo -ue desea cargar Jsin la e<tensin de arc>ivoK e idio$a es el con%unto
de idioma -ue lo contiene J&or e%em&loI inglsK. 2i @alta el segundo &ar0metroI se usar0 el idioma &or de@ecto -ue
est0 esta*lecido en su arc>ivo appli%ation%on#ig%on#ig.p=p.
Re%uperar una 7nea de !e1to
7na ve" -ue su idioma deseado se cargI &uede acceder a cual-uier lHnea de te<to usando esta @uncinG
$this->lang->line('cla*e_idioma');
Gua del Usuario de CodeIgniter Versin 2.1.3 207
Donde %laveBidio$a es la clave del arra, corres&ondiente a la lHnea -ue desea mostrar.
:ota< 1sta @uncin sim&lemente devuelve la lHnea. 3o >ace eco.
Usar 7neas de Idio$a %o$o Rtulos de >or$ulario
1sta @uncionalidad se marc como o*soleta en la *i*lioteca de idiomas , se movi a la @uncin lang+, del
>el&er 6anguage.
Carga 0uto$'ti%a de Idio$as
2i encuentra la necesidad de tener un idioma cargado glo*almente a lo largo de toda la a&licacinI &uede decirle a
CodeIgniter -ue lo cargue autom0ticamente durante la iniciali"acin del sistema. 1sto se >ace al a*rir el arc>ivo
appli%ation%on#igautoload.p=p , agregarle el idioma al arra, ?autoload.
Gua del Usuario de CodeIgniter Versin 2.1.3 208
Clase 7oad
6a clase 7oadI como su nom*re sugiereI se usa &ara cargar elementos. 1stos elementos &ueden ser *i*liotecas
JclasesKI arc>ivos de vistasI >el&ersI modelosI o sus &ro&ios arc>ivos.
:ota< 1l sistema iniciali"a autom0ticamente a esta claseI &or lo -ue no >a, necesidad de >acerlo manualmente.
6as siguientes @unciones est0n dis&oni*les en esta claseG
?t=is@Aload@Ali"rar;+Lno$"reBdeB%laseLJ ?%on#igJ Lno$"reBdeBo"DetoL,
1sta @uncin se usa &ara cargar clases del n:cleo. Donde no$"reBdeB%lase es el nom*re de la clase -ue desea
cargar. :ota< 3osotros usamos los trminos NclaseN , N*i*liotecaN en @orma intercam*ia*le.
Por e%em&loI si -uisiera enviar un email con CodeIgniterI el &rimer &aso es cargar la clase E$ail dentro del
controladorG
$this->load->library('email');
7na ve" cargadaI la *i*lioteca est0 lista &ara usarseI usando ?t=is@Ae$ail@AalgunaB#un%ion+,.
6os arc>ivos de *i*lioteca se &ueden almacenar en su*directorios dentro de la car&eta Nli*rariesN &rinci&alI o dentro
de su car&eta &ersonal appli%ationli"raries. Para cargar un arc>ivo locali"ado en un su*directorioI sim&lemente
inclu,a la rutaI relativa a la car&eta Nli*rariesN. Por e%em&loI si tiene locali"ado un arc>ivo enG
libraries/flavors/chocolate.php
6o cargar0 usandoG
$this->load->library('flavors/chocolate');
Puede anidar el arc>ivo en tantos su*directorios como desee.
Adem0sI se &ueden cargar varias *i*liotecas al mismo tiem&o &asando un arra, de *i*liotecas a la @uncin de
carga.
$this->load->library(array('email', 'ta!le'));
Con#igurar op%iones
1l segundo &ar0metro Jo&cionalK le &ermite &asar o&cionalmente valores de con@iguracin. 3ormalmente &asar0
esos valores como un arra,G
$config = array (
'mailtype' => 'html',
'charset' => 'utf-8,
'priority' => '1'
);
$this->load->library('email', $config);
Gua del Usuario de CodeIgniter Versin 2.1.3 209
6as o&ciones de con@iguracin normalmente tam*in se &ueden esta*lecer mediante un arc>ivo de con@iguracin.
Cada *i*lioteca se e<&lica en detalle en su &0ginaI asH -ue lea la in@ormacin acerca de cada una de la -ue desee
usar.
Por @avor advierta -ue cuando varias *i*liotecas se &asan a un arra, en el &rimer &ar0metroI cada una reci*ir0 la
misma in@ormacin de &ar0metro.
0signar una &i"liote%a a un :o$"re de G"Deto Fi#erente
2i el tercer &ar0metro Jo&cionalK est0 en *lancoI la *i*lioteca se asignar0 normalmente a un o*%eto con el mismo
nom*re -ue la *i*lioteca. Por e%em&loI si la *i*lioteca se llama 6essionI se asignar0 a una varia*le llamada ?t=is@
Asession.
2i &re@iere esta*lecer sus &ro&ios nom*res de clasesI &uede &asar su valor al tercer &ar0metroG
$this->load->library('session', '', 'mi_session');
// Ahora se accede a la clase Session usando:
$this->mi_session
Por @avor advierta -ue cuando varias *i*liotecas se &asan a un arra, en el &rimer &ar0metroI este &ar0metro se
descarta.
?t=is@Aload@AvieC+Lno$"reBdeBar%=ivoLJ ?dataJ !RUE>076E,
1sta @uncin se usa &ara cargar sus arc>ivos de vistas. 2i todavHa no le, la seccin !istas de la AuHa del 7suarioI
se le recomienda -ue lo >agaI ,a -ue muestra cmo se usa normalmente esta @uncin.
1l &rimer &ar0metro es o*ligatorio. 1s el nom*re del arc>ivo de vista -ue 7d -uiere cargar. :ota< 3o se necesita
es&eci@icar la e<tensin .&>&I a menos -ue est usando otra distinta.
1l segundo &ar0metro op%ional &uede tomar como entrada un arra, asociativo o un o*%etoI -ue se e%ecuta
mediante la @uncin e1tra%t+, de P9P &ara convertir a varia*les -ue se &ueden usar en sus arc>ivos de vistas.
3uevamenteI lea la &0gina !istas &ara a&render cmo esto &uede ser :til.
1l tercer &ar0metro op%ional le &ermite cam*iar el com&ortamiento de la @uncin &ara -ue devuelva los datos
como una cadena en lugar de enviarlos al navegador. 1sto &uede ser :til si -uiere &rocesar los datos de alguna
@orma. 2i esta*lece el &ar0metro a !RUE J*ooleanoKI devolver0 datos. 1l com&ortamiento &or de@ecto es >076EI
-ue los envHa al navegador. 8ecuerde asignarla a una varia*le si -uiere -ue los datos sean devueltosG
$string = $this->load->view('mi_arci*o', '', +,-.);
?t=is@Aload@A$odel+L:o$"reB$odeloL,
$this->load->model('/om!re_modelo');
2i su modelo est0 u*icado en una su*car&etaI incluir la ruta relativa de su car&eta de modelos. Por e%em&loI si
tiene un modelo u*icado en appli%ation$odels"log4ueries.p=p lo cargar0 usandoG
$this->load->model('!log)Cueries');
2i -uisiera tener su modelo asignado a un nom*re de o*%eto di@erenteI &uede es&eci@icarlo mediante el segundo
&ar0metro de la @uncin de cargaG
Gua del Usuario de CodeIgniter Versin 2.1.3 210
$this->load->model('/om!re_modelo', 'fu!ar');
$this->fubar->function();
?t=is@Aload@Adata"ase+Lop%ionesLJ !RUE>076E,
1sta @uncin le &ermite cargar la Clase Fata"ase. 6os dos &ar0metros son o&cionales. Para m0s in@ormacin lea la
seccin Clase Fata"ase.
?t=is@Aload@Avars+?arra;,
1sta @uncin toma como entrada un arra, asociativo , genera varia*les usando la @uncin e1tra%t+, de P9P. 1sta
@uncin &roduce el mismo resultado -ue usar el segundo &ar0metro de la @uncin ?t=is@Aload@AvieC+, anterior.
6a ra"n &or la -ue &uede desear usar esta @uncin inde&endientemente es si -uisiera esta*lecer alguna varia*le
glo*al en el constructor de su controlador , tenerlas dis&oni*les en cual-uier arc>ivo de vista cargado desde
cual-uier @uncin. Puede tener varias llamadas a esta @uncin. 6os datos se almacenan en cac> , @usionan en un
arra, &ara convertirlos en varia*les.
?t=is@Aload@AgetBvar+?Ie;,
1sta @uncin veri@ica el arra, asociativo de varia*les dis&oni*le en sus vistas. 1s util si &or cual-uier ra"n una
varia*le se esta*lece en una *i*lioteca u otro mtodo controlador usando ?t=is@Aload@Avars+,.
?t=is@Aload@A=elper+Lno$"reBdeBar%=ivoL,
1sta @uncin carga arc>ivos de >el&erI donde no$"reBdeBar%=ivo es el nom*re del arc>ivo sin la e<tensin
B=elper.p=p.
?t=is@Aload@A#ile+LrutaBdeBar%=ivono$"reBdeBar%=ivoLJ !RUE>076E,
1sta es una @uncin genrica de carga de arc>ivos. Pro&orcione la ruta , nom*re del arc>ivo en el &rimer
&ar0metro , la @uncin a*rir0 , leer0 el arc>ivo. Por de@ecto los datos se envHan a su navegadorI igual -ue un
arc>ivo de vistaI &ero si esta*leci el segundo &ar0metro a !RUE J*ooleanoKI en su lugar devolver0 los datos
como una cadena.
?t=is@Aload@Alanguage+Lno$"reBdeBar%=ivoL,
1sta @uncin es un alias de la @uncin -ue carga los idiomasG ?t=is@Alang@Aload+,.
?t=is@Aload@A%on#ig+Lno$"reBdeBar%=ivoL,
1sta @uncin es un alias de la @uncin -ue carga los arc>ivos de con@iguracinG ?t=is@A%on#ig@Aload+,.
P3a4uetesP de 0pli%a%in
7n &a-uete de a&licacin &ermite la @0cil distri*ucin de con%untos com&letos de recursos en un directorio sim&leI
como ser sus &ro&ias *i*liotecasI modelosI >el&ersI con@iguraciones , arc>ivos de idiomas. 2e recomienda -ue
estos &a-uetes se u*i-uen en la car&eta appli%ationt=irdBpart;. A continuacin se muestra un ma&a de un
directorio de &a-uete.
EDe$plo del Hapa del Fire%torio del 3a4uete P>oo &arP
1l siguiente es un e%em&lo de un directorio &ara un &a-uete de a&licacin llamado N$oo BarN.
Gua del Usuario de CodeIgniter Versin 2.1.3 211
/application/third_party/foo_bar
config/
helpers/
language/
libraries/
models/
2ea cual sea el &ro&sito del &a-uete de a&licacin N$oo BarNI tiene sus &ro&ios arc>ivos de con@iguracinI >el&ersI
arc>ivos de idiomaI *i*liotecas , modelos. Para usar estos recursos en sus controladoresI &rimero necesita decirle
a la Clase 7oad -ue va a cargar recursos desde un &a-ueteI al agregarle la ruta del &a-uete.
?t=is@Aload@AaddBpa%IageBpat=+,
1sta @uncin instru,e a la Clase 7oad a ante&oner una ruta dada &ara las solicitudes su*secuentes de recursos.
Como e%em&loI el &a-uete de a&licacin N$oo BarN anterior tiene una *i*lioteca llamada >ooB"ar.p=p. 1n su
controladorI >aremos lo siguienteG
$this->load->add_package_path(@FFF@+I.'tird_part>)foo_!ar)');
$this->load->library('foo_bar');
?t=is@Aload@Are$oveBpa%IageBpat=+,
Cuando su controlador >a,a terminado de usar recursos de un &a-uete de a&licacin , &articularmenteI si tiene
otros &a-uetes de a&licacin con los -ue -uiere tra*a%arI &uede desear -uitar la ruta del &a-uete &ara -ue la Clase
7oad no *us-ue m0s recursos en esa car&eta. Para -uitar la :ltima ruta agregadaI sim&lemente llame al mtodo
sin &ar0metros.
?t=is@Aload@Are$oveBpa%IageBpat=+,
) &ara eliminar una ruta de &a-uete es&ecH@icaI indi-ue la misma ruta dada &reviamente a addBpa%IageBpat=+,
&ara un &a-ueteG
$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');
0r%=ivos de Vista del 3a4uete
Por de@ectoI las rutas de arc>ivos de vista de &a-uetes se esta*lecen cuando se llama a addBpa%IageBpat=+,.
6as rutas de vistas ciclan , una ve" -ue se encuentra una coincidencia se carga esa vista.
1n este e%em&loI es &osi*le -ue ocurran colisiones de nom*res de vistas , &osi*lemente se cargue el &a-uete
incorrecto. Para asegurarse contra estoI esta*le"ca el segundo &ar0metro o&cional a >076E al llamar a
addBpa%IageBpat=+,.
// ... guardar la ruta de la vista original, y establecerla a nuestra carpeta de
// vista del paquete Foo Bar
$orig_view_path = $this->load->_ci_view_path;
$this->load->_ci_view_path = APPPATH.'third_party/foo_bar/views/';
// ... cdigo que usa los archivos de vista del paquete
// ... luego devolver la ruta de vista a la ruta de vista original de la
// aplicacin
$this->load->_ci_view_path = $orig_view_path;
Gua del Usuario de CodeIgniter Versin 2.1.3 212
Clase Higration
6as migraciones son una @orma conveniente de alterar la *ase de datos de una @orma estructurada , organi"ada.
PodrHa editar @ragmentos de 2L6 a manoI &ero serHa res&onsa*le de decirle a otros desarrolladores -ue necesitan ir
, e%ecutarlos. Cam*in tendrHa -ue seguir la &ista de los cam*ios necesarios &ara e%ecutar nuevamente en las
m0-uinas de &roduccin la &r<ima ve" -ue se im&lemente.
6a migracin de ta*las de *ase de datos sa*e cuales migraciones ,a se e%ecutaronI &or lo tanto todo lo -ue tiene
-ue >acer es actuali"ar los arc>ivos de la a&licacin , llamar a ?t=is@A$igrate@A%urrent+, &ara resolver -u
migraciones se de*erHan e%ecutar. 6a versin actual se encuentra en %on#ig$igration.p=p.
Crear una Higra%in
1sta ser0 la &rimera migracin &ara un sitio nuevo -ue tiene un *log. Codas las migraciones van en la car&eta
appli%ation$igrations , tienen nom*res tales comoG 001BaddB"log.p=p.
defined('BASEPATH') OR exit('No direct script access allowed');
class Migration_Add_blog extends CI_Migration {
public function up()
{
$this->dbforge->add_field(array(
'blog_id' => array(
'type' => 'INT',
'constraint' => 5,
'unsigned' => TRUE,
'auto_increment' => TRUE
),
'blog_title' => array(
'type' => 'VARCHAR',
'constraint' => '100',
),
'blog_description' => array(
'type' => 'TEXT',
'null' => TRUE,
),
));
$this->dbforge->create_table('blog');
}
public function down()
{
$this->dbforge->drop_table('blog');
}
1ntonces esta*lecer ?%on#igKL$igrationBversionLM e 1 en appli%ation%on#ig$igration.p=p.
EDe$plo de Uso
1n este e%em&loI se coloca algo de cdigo sim&le en appli%ation%ontrollers$igrate.p=p &ara actuali"ar el
es-uema.
Gua del Usuario de CodeIgniter Versin 2.1.3 213
$this->load->library('migration');
if ( ! $this->migration->current())
{
show_error($this->migration->error_string());
}
Re#eren%ia de >un%iones
?t=is@A$igration@A%urrent+,
6a migracin actual es la indicada &or ?%on#igKL$igrationBversionLM en appli%ation%on#ig$igration.p=p.
?t=is@A$igration@Alatest+,
1sto @unciona mu, &arecido a %urrent+, &eroI en lugar de *uscar en ?%on#igKL$igrationBversionLMI la clase
Higration usar0 la migracin m0s reciente encontrada en el sistema de arc>ivos.
?t=is@A$igration@Aversion+,
Version+, se &uede usar &ara des>acer los cam*ios o &ara avan"ar >acia adelante &rogram0ticamente a versiones
es&ecH@icas. $unciona igual -ue %urrent+,I &ero ignora a ?%on#igKL$igrationBversionLM.
$this->load->library('migration');
$this->migration->version(5);
3re#eren%ias de Higra%in
6a siguiente es la lista de todas las o&ciones de con@iguracin &ara las migraciones.
Pre@erencia !alor &or De@ecto )&ciones Descri&cin
migrationBena*led $A621 C871 O $A621 9a*ilita o des>a*ilita las migraciones.
migrationBversion 0 3inguna !ersin actual -ue su *ase de datos de*erHa usar.
migrationB&at> APPPAC9.YmigrationsOY 3inguna 8uta a su car&eta de migraciones.
Gua del Usuario de CodeIgniter Versin 2.1.3 214
Clase Gutput
6a Clase Gutput es una clase &e-ue+a con una @uncin &rinci&alG 1nviar la &0gina =e* terminada al navegador. 1s
res&onsa*le de almacenar en cac> las &0ginas =e*I si se usa esta @uncionalidad.
:ota< 1l sistema iniciali"a autom0ticamente esta claseI &or lo -ue no >a, necesidad de >acerlo manualmente.
Ba%o circunstancias normales no notar0 a la Clase GutputI ,a -ue @unciona de @orma trans&arente sin su
intervencin. Por e%em&loI cuando usa la clase 7oad &ara cargar un arc>ivo de vistaI se &asa autom0ticamente a la
Clase GutputI a la cual llamar0 autom0ticamente CodeIgniter al @inal de la e%ecucin del sistema. 2in em*argoI es
&osi*le -ue 7d intervenga manualmente con la salida si lo necesitaI usando cuales-uiera de las siguientes dos
@uncionesG
?t=is@Aoutput@AsetBoutput+,
6e &ermite esta*lecer manualmente la cadena de salida @inal. 1%em&lo de 7soG
$this->output->set_output($data);
I$portante< 2i esta*lece manualmente la salidaI tiene -ue ser la :ltima cosa >ec>a en la @uncin -ue la llama.
Por e%em&loI si arma una &0gina en una de sus @unciones controladorI no esta*le"ca la salida >asta el @in.
?t=is@Aoutput@AsetB%ontentBt;pe+,
6e &ermite esta*lecer el ti&o mime de su &0gina &ara -ue sirva datos D2)3I DP1AYsI E'6I etc. @0cilmente.
$this->output
->set_content_type('application/json')
->set_output(json_encode(array('foo' => 'bar')));
$this->output
->set_content_type('jpeg') // Tambin podra usar ".jpeg" que tendr el punto
// eliminado antes de buscar en config/mimes.php
->set_output(file_get_contents('files/algo.jpg'));
I$portante< Asegurarse -ue ninguna cadena no(mime -ue &ase a este mtodo e<iste en %on#ig$i$es.p=p o
no tendr0 e@ecto.
?t=is@Aoutput@AgetBoutput+,
6e &ermite recu&erar manualmente cual-uier salida -ue >a,a sido enviada &ara almacenar en la clase Gutput.
1%em&lo de 7soG
$string = $this->output->get_output();
Advierta -ue los datos solamente se recu&erar0n con esta @uncin si &reviamente @ueron enviados a la clase
Gutput &or una de las @unciones de CodeIgniterI como ?t=is@Aload@AvieC+,.
Gua del Usuario de CodeIgniter Versin 2.1.3 215
?t=is@Aoutput@AappendBoutput+,
Agrega datos en la cadena de salida. 1%em&lo de 7soG
$this->output->append_output($data);
?t=is@Aoutput@AsetB=eader+,
6e &ermite esta*lecer manualmente los enca*e"ados de servidorI -ue la clase Gutput enviar0 cuando im&rima la
&antalla @inal renderi"ada. 1%em&loG
$this->output->set_header("HTTP/1.0 200 OK");
$this->output->set_header("HTTP/1.1 200 OK");
$this->output->set_header('Last-Modified: '.gmdate('D, d M Y H:i:s',
$last_update).' GMT');
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");
?t=is@Aoutput@AsetBstatusB=eader+%odigoJ Lte1toL,
6e &ermite esta*lecer manualmente el enca*e"ado de estado del servidor. 1%em&loG
$this->output->set_status_header('401');
// Establecer el encabezado como: No Autorizado
!er a-uH la lista com&leta de enca*e"ados.
?t=is@Aoutput@Aena"leBpro#iler+,
6e &ermite >a*ilitarOdes>a*ilitar el Per@iladorI el cual mostrar0 &rue*as de desem&e+o , otros datos al @inal de las
&0ginas con @ines de de&uracin , o&timi"acin.
Para >a*ilitar el &er@iladorI u*i-ue la siguiente @uncin en cual-uier &arte dentro de sus @unciones controladorG
$this->output->enable_profiler(TRUE);
Cuando est >a*ilitadoI se generar0 un in@orme , se lo mostrar0 al @inal de las &0ginas.
Para des>a*ilitar el &er@iladorI usar0G
$this->output->enable_profiler(FALSE);
t=is@Aoutput@AsetBpro#ilerBse%tions+,
6e &ermite >a*ilitarOdes>a*ilitar secciones es&ecH@icas del Per@ilador cuando est >a*ilitado. 8e@erirse a la
documentacin del Per@ilador &ara ma,or in@ormacin.
?t=is@Aoutput@A%a%=e+,
6a *i*lioteca Gutput de CodeIgniter tam*in controla el almacenamiento en cac>. Para ma,or in@ormacinI vea
la documentacin del almacenamiento en cac>.
Gua del Usuario de CodeIgniter Versin 2.1.3 216
0nali8ar las Varia"les de EDe%u%in
CodeIgniter anali"ar0 las seudo(varia*les \elapsedBti$e] , \$e$or;Busage] en su salida &or de@ecto. Para
des>a*ilitar estoI esta*lecer la &ro&iedad de clase ?parseBe1e%Bvars a >076E en su controlador.
$this->output->parse_exec_vars = FALSE;
Gua del Usuario de CodeIgniter Versin 2.1.3 217
Clase 3agination
6a clase 3agination de CodeIgniter es mu, @0cil de usar , es 100d &ersonali"a*leI sea din0micamente o &or
medio de &re@erencias almacenadas.
2i no est0 @amiliari"ado con el trmino N&aginacinNI se re@iere a enlaces -ue le &ermiten navegar de &0gina a
&0ginaI como estoG
Primera < 1 2 3 4 5 > ltima
EDe$plo
1ste es un e%em&lo -ue muestra cmo crear una &aginacin en una de sus @unciones controladorG
$this->load->library('pagination');
$config['base_url'] = 'http://ejemplo.com/index.php/prueba/pagina/';
$config['total_rows'] = '200';
$config['per_page'] = '20';
$this->pagination->initialize($config);
echo $this->pagination->create_links();
:otas<
1l arra, ?%on#ig contiene sus varia*les de con@iguracin. 2e lo &asa a la @uncin ?t=is@Apagination@Ainitiali8e
seg:n se muestra antes. Aun-ue >a, alrededor de veinte items &ara con@igurarI como mHnimoI se necesitan
con@igurar los tres mostrados. A-uH >a, una descri&cin de esos HtemsG
"aseBurl< 1sta es la 786 com&leta &ara la claseO@uncin controlador -ue contiene su &aginacin. 1n el
e%em&lo anteriorI est0 a&untando a un controlador llamado N&rue*aN , a una @uncin llamada N&aginaN.
Cenga &resente -ue &uede re(rutear su 78I si necesita una estructura di@erente.
totalBroCs< 1ste n:mero re&resenta la cantidad total de @ilas -ue >a, en el con%unto resultado
esta*lecido &ara el -ue est0 creando la &aginacin. 3ormalmente este n:mero ser0 la cantidad total de
@ilas -ue la consulta de *ase de datos devuelva.
perBpage< 6a cantidad de Htems -ue &iensa mostrar &or &0gina. 1n el e%em&lo anteriorI se mostrarHan /0
Htems &or &0gina.
6a @uncin %reateBlinIs+, devuelve una cadena vacHa cuando no >a, &aginacin &ara mostrar.
Esta"le%er las 3re#eren%ias en un 0r%=ivo de Con#igura%in
2i &re@iere no esta*lecer &re@erencias usando el mtodo anteriorI en su lugar &uede &onerlas en un arc>ivo de
con@iguracin. 2im&lemente cree un nuevo arc>ivo llamado pagination.p=p , agregue el arra, ?%on#ig en ese
arc>ivo. 6uego guarde el arc>ivo en %on#igpagination.p=& , se lo usar0 autom0ticamente. :G necesitar0 usar
la @uncin ?t=is@Apagination@Ainitiali8e si guarda las &re@erencias en un arc>ivo de con@iguracin.
Gua del Usuario de CodeIgniter Versin 2.1.3 218
3ersonali8ar la 3agina%in
6a siguiente es la lista de todas las &re@erencias -ue &uede &asarle a la @uncin de iniciali"acin &ar ada&tar la
visuali"acin.
$config['uri_segment'] = 3;
6a @uncin de &aginacin determina autom0ticamente -u segmento de 78I contiene el n:mero de &0gina. 2i
necesita algo di@erenteI &uede es&eci@ic0rselo.
$config['num_links'] = 2;
6a cantidad de enlaces de NdHgitoN -ue -uisiera antes , des&us del n:mero de la &0gina seleccionada. Por
e%em&loI el n:mero / &ondr0 dos dHgitos a am*os ladosI como en el e%em&lo de la &0gina anterior.
$config['page_query_string'] = TRUE;
Por de@ectoI la *i*lioteca de &aginacin asume -ue est0 usando segmentos 78I , arma los enlaces algo como estoG
http://ejemplo.com/index.php/prueba/pagina/20
2i tiene ?%on#igKLena"leB4uer;BstringsLM esta*lecido a !RUEI sus enlaces se rescri*ir0n autom0ticamente
usando Luer, 2trings. 1sta o&cin tam*in se &uede esta*lecer e<&lHcitamente. 1sta*leciendo
?%on#igKLpageB4uer;BstringLM a !RUEI se convertir0 el enlace de &aginacin.
http://ejemplo.com/index.php?c=prueba&m=pagina&per_page=20
Advierta -ue N&erB&ageN es el -uer, string &asado &or de@ectoI sin em*argo se &uede con@igurar usando
?%on#igKL4uer;BstringBseg$entLM e YsuBcadenaY.
0gregar Har%a%in de Cierre
2i -uisiera rodear la &aginacin com&leta con alg:n marcadoI &uede >acerlo con estas dos &re@erenciasG
$config['full_tag_open'] = '<p>';
6a eti-ueta de a&ertura colocada en la &arte i"-uierda de todo el resultado.
$config['full_tag_close'] = '</p>';
6a eti-ueta de a&ertura colocada en la &arte derec>a de todo el resultado.
Gua del Usuario de CodeIgniter Versin 2.1.3 219
3ersonali8ar el Enla%e P3ri$eraP
$config['first_link'] = 'Primera';
Ce<to -ue -uisiera mostrar en el enlace N&rimeraNI en la i"-uierda. 2i no -uiere -ue este enlace se muestreI &uede
esta*lecer su valor a $A621.
$config['first_tag_open'] = '<div>';
6a eti-ueta de a&ertura &ara el enlace N&rimeraN.
$config['first_tag_close'] = '</div>';
6a eti-ueta de cierre &ara el enlace N&rimeraN.
3ersonali8ar el Enla%e Pclti$aP
$config['last_link'] = 'ltima';
Ce<to -ue -uisiera mostrar en el enlace N:ltimaNI en la derec>a. 2i no -uiere -ue este enlace se muestreI &uede
esta*lecer su valor a $A621.
$config['last_tag_open'] = '<div>';
6a eti-ueta de a&ertura &ara el enlace N:ltimaN.
$config['last_tag_close'] = '</div>';
6a eti-ueta de cierre &ara el enlace N:ltimaN.
3ersonali8ar el Enla%e P6iguienteP
$config['next_link'] = '&gt;';
Ce<to -ue -uisiera mostrar en el enlace de &0gina NsiguienteN. 2i no -uiere -ue este enlace se muestreI &uede
esta*lecer su valor a $A621.
$config['next_tag_open'] = '<div>';
6a eti-ueta de a&ertura &ara el enlace NsiguienteN.
$config['next_tag_close'] = '</div>';
6a eti-ueta de cierre &ara el enlace NsiguienteN.
Gua del Usuario de CodeIgniter Versin 2.1.3 220
3ersonali8ar el Enla%e P0nteriorP
$config['prev_link'] = '&lt;';
Ce<to -ue -uisiera mostrar en el enlace de &0gina NanteriorN. 2i no -uiere -ue este enlace se muestreI &uede
esta*lecer su valor a $A621.
$config['prev_tag_open'] = '<div>';
6a eti-ueta de a&ertura &ara el enlace NanteriorN.
$config['prev_tag_close'] = '</div>';
6a eti-ueta de cierre &ara el enlace NanteriorN.
3ersonali8ar el Enla%e P3'gina 0%tualP
$config['cur_tag_open'] = '<b>';
6a eti-ueta de a&ertura &ara el enlace NactualN.
$config['cur_tag_close'] = '</b>';
6a eti-ueta de cierre &ara el enlace NactualN.
3ersonali8ar el Enla%e PFgitoP
acon@igkYnumBtagBo&enYl e YgdivjY`
6a eti-ueta de a&ertura &ara el enlace NdHgitoN.
acon@igkYnumBtagBcloseYl e YgOdivjY`
6a eti-ueta de cierre &ara el enlace NdHgitoN.
G%ultar las 3'ginas
2i -uiere -ue no se listen &0ginas es&ecH@icas J&or e%em&loI -uiere solamente los enlaces NsiguienteN , NanteriorNKI
&uede su&rimir su &resentacin al agregarG
acon@igkYdis&la,B&agesYl e $A621`
0gregar una Clase a %ada 0n%la
2i -uiere agregar un atri*uto de clase a cada enlace &resentado &or la Clase 3aginationI &uede esta*lecer el
Hndice Nanc>orBclassN del arra, con@ig igual al nom*re de clase -ue desea.
Gua del Usuario de CodeIgniter Versin 2.1.3 221
Clase 3arser
6a Clase 3arser le &ermite anali"ar seudo(varia*les contenidas dentro de los arc>ivos de vistas. Puede anali"ar
varia*les sim&les o &ares de eti-uetas varia*les. 2i nunca us un motor de &lantillasI las seudo(varia*les se ven
asHG
<html>
<head>
<title>:!log_title;</title>
</head>
<body>
<h3>:!log_eading;</h3>
:!log_entries;
<h5>:title;</h5>
<p>:!od>;</p>
:)!log_entries;
</body>
</html>
1stas varia*les no son realmente varia*les de P9PI sino re&resentaciones en te<to &lano -ue le &ermiten eliminar el
P9P de sus &lantillas Jarc>ivos de vistasK.
:ota< CodeIgniter no le o*liga a usar esta clase ,a -ue usando P9P &uro en sus &0ginas de vista les &ermite
correr un &oco m0s r0&ido. 2in em*argoI algunos desarrolladores &re@ieren usar un motor de &lantillas si
tra*a%an con dise+adores -uienes sienten alguna con@usin al tra*a%ar con P9P.
0dvierta ta$"i9n< 6a Clase 3arser no es una solucin de an0lisis de &lantillas com&letamente desarrollada.
9emos tratado de mantenerla magra a @in de mantener el m0<imo rendimiento.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la clase 3arser se iniciali"a en su controlador usando la @uncin
?t=is@Aload@Ali"rar;G
$this->load->library('parser');
7na ve" cargadaI el o*%eto de la *i*lioteca 3arser estar0 dis&oni*le usandoG ?t=is@Aparser.
6as siguientes @unciones est0n dis&oni*les en esta *i*liotecaG
?t=is@Aparser@Aparse+,
1ste mtodo ace&ta un nom*re de &lantilla , un arra, de datos como entrada , genera la versin anali"ada.
1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 222
$this->load->library('parser');
$data = array(
'blog_title' => 'El Titulo de mi Blog',
'blog_heading' => 'El Encabezado de mi Blog'
);
$this->parser->parse('blog_template', $data);
1l &rimer &ar0metro contiene el nom*re del arc>ivo de vista Jen este e%em&lo el arc>ivo se llamarHa
"logBte$plate.p=pKI , el segundo &ar0metro contiene un arra, asociativo de datos a reem&la"arse en la
&lantilla. 1n el e%em&lo anteriorI la &lantilla contendrHa dos varia*lesG \"logBtitle] , \"logB=eading]
3o >a, necesidad de >acer Nec>oN o >acer algo con los datos devueltos &or ?t=is@Aparser@Aparse+,. 2e lo &asa
autom0ticamente a la Clase )ut&ut &ara ser enviado al navegador. 2in em*argoI si -uiere -ue los datos sean
devueltos en lugar de ser enviados a la Clase )ut&utI &uede &asar !RUE J*ooleanoK al tercer &ar0metroG
$string = $this->parser->parse('blog_template', $data, TRUE);
?t=is@Aparser@AparseBstring+,
1ste mtodo tra*a%a e<actamente igual -ue parse+,I solo -ue ace&ta una cadena como &rimer &ar0metro en lugar
de un arc>ivo de vista.
3ares de Varia"les
1l e%em&lo de cdigo anterior &ermite -ue se reem&lacen varia*les sim&les. ]Lu &asa si deseara -ue se re&ita un
*lo-ue entero de varia*lesI con cada iteracin conteniendo nuevos valores^ Considere el e%em&lo de la &lantilla -ue
mostramos al comien"o de la &0ginaG
<html>
<head>
<title>:!log_title;</title>
</head>
<body>
<h3>:!log_eading;</h3>
:!log_entries;
<h5>:title;</h5>
<p>:!od>;</p>
:)!log_entries;
</body>
</html>
1n el cdigo anterior advertir0 un &ar de varia*lesG \"logBentries] datos... \"logBentries]. 1n un caso como
esteI la &orcin entera de datos entre ese &ar se re&etirHa varias vecesI corres&ondiendo a la cantidad de @ilas en
un resultado.
1l an0lisis de &ares de varia*les se reali"a usando el mismo cdigo mostrado antes &ara anali"ar varia*les sim&lesI
e<ce&to -ue agregar0 un arra, multidimensional corres&ondiente a los datos de &ar de varia*les. Considere este
e%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 223
$this->load->library('parser');
$data = array(
'blog_title' => 'My Blog Title',
'blog_heading' => 'My Blog Heading',
'blog_entries' => array(
array('title' => 'Title 1', 'body' => 'Body 1'),
array('title' => 'Title 2', 'body' => 'Body 2'),
array('title' => 'Title 3', 'body' => 'Body 3'),
array('title' => 'Title 4', 'body' => 'Body 4'),
array('title' => 'Title 5', 'body' => 'Body 5')
)
);
$this->parser->parse('blog_template', $data);
2i sus datos de N&arN vienen de los resultados de una *ase datosI lo -ue ,a es un arra, multidimensionalI
sim&lemente &uede usar la @uncin de *ase de datos resultBarra;+,G
$query = $this->db->query("SELECT * FROM blog");
$this->load->library('parser');
$data = array(
'blog_title' => 'El Titulo de mi Blog',
'blog_heading' => 'El Encabezado de mi Blog',
'blog_entries' => $query->result_array()
);
$this->parser->parse('blog_template', $data);
Gua del Usuario de CodeIgniter Versin 2.1.3 224
Clase 6e%urit;
6a Clase 6e%urit; contiene mtodos -ue lo a,udan a crear una a&licacin seguraI &rocesando los datos de entrada
&ara *rindarle seguridad.
>iltrado Y66
CodeIgniter viene con un @iltro &ara evitar Cross 2ite 2cri&ting 9ac; -ue &uede correr autom0ticamente tanto &ara
@iltrar todos los datos 3G6! , CGGXIE -ue se encuentren como &or Htem. Por de@ectoI no corre glo*almente ,a
-ue genera una &e-ue+a so*recarga de &rocesamientoI , &uede -ue no lo necesite en todos los casos.
1l @iltro E22 *usca tcnicas com:nmente usadas &ara dis&arar Davascri&t u otro ti&o de cdigo -ue intenta
secuestrar coo;ies o >acer cosas maliciosas. 2i se encuentra algo no &ermitidoI se lo &resenta en @orma segura al
convertir los datos a entidades de caracter.
:ota< 1sta @uncin solamente se de*erHa usar &ara tratar los datos enviados. 3o es algo -ue se de*erHa usar
&ara &rocesamiento general en tiem&o de e%ecucin dada la so*recarga de &rocesamiento -ue causa.
Para @iltrar datos mediante el @iltro E22I use esta @uncinG
?t=is@Ase%urit;@A1ssB%lean+,
A-uH >a, un e%em&lo de usoG
$data = $this->security->xss_clean($data);
2i desea -ue el @iltro @uncione autom0ticamente cada ve" -ue encuentra datos 3G6! o CGGXIEI &uede >a*ilitarlo
al a*rir su arc>ivo appli%ation%on#ig%on#ig.p=p , con@igurando estoG
$config['global_xss_filtering'] = TRUE;
:ota< 2i usa la Clase >or$BvalidationI sta tam*in le da la &osi*ilidad de $iltrado E22.
7n segundo &ar0metro o&cionalI isBi$ageI le &ermite a esta @uncin ser usada &ara &ro*ar im0genes contra
&otenciales ata-ues E22I :til &ara la seguridad de su*idas de arc>ivos. Cuando se esta*lece a !RUE este segundo
&ar0metroI en lugar de devolver una cadena alteradaI la @uncin devuelve !RUE si la imagen es segura , >076E si
contiene in@ormacin &otencialmente maliciosa -ue un navegador &odrHa e%ecutar.
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
// el archivo fall la prueba XSS
}
?t=is@Ase%urit;@Asaniti8eB#ilena$e+,
Al ace&tar nom*res de arc>ivo desde la entrada del usuarioI es me%or descontaminarlos &ara evitar el recorrido de
directorios , otros &ro*lemas de seguridad. Para >acerloI use el mtodo saniti8eB#ilena$e+, de la Clase
6e%urit;. 1ste es un e%em&loG
$filename = $this->security->sanitize_filename($this->input->post('filename'));
Gua del Usuario de CodeIgniter Versin 2.1.3 225
2i es ace&ta*le &ara la entrada del usuario incluir rutas relativasI &or e%em&lo
ar%=ivoenalguna%arpetaapro"ada.t1tI &uede esta*lecer el segundo &ar0metro o&cionalI ?relativeBpat=
a !RUE.
$filename = $this->security->sanitize_filename($this->input->post('filename'),
TRUE);
Cross@site re4uest #orger; +C6R>,
Puede >a*ilitar la &roteccin C28$ a*riendo su arc>ivo appli%ation%on#ig%on#ig.p=p , con@igurando estoG
$config['csrf_protection'] = TRUE;
2i usa el >el&er @orm la @uncin #or$Bopen+, insertar0 autom0ticamente un cam&o C28$ oculto en su @ormulario.
Gua del Usuario de CodeIgniter Versin 2.1.3 226
Clase 6ession
6a Clase 6ession le &ermite mantener el NestadoN del usuario , seguir su actividad mientras visita su sitio. 6a
Clase 6ession almacena la in@ormacin de las sesiones &ara cada usuario como datos seriali"ados J,
o&cionalmente encri&tadosK en una coo;ie. Cam*in &uede almacenar los datos de sesin en una ta*la de *ase de
datos &ara ma,or seguridadI ,a -ue esto &ermite -ue el ID de sesin en la coo;ie del usuario se com&are con el ID
de sesin almacenado. Por de@ecto solamente se guarda la coo;ie. 2i eli%e usar la o&cin de *ase de datosI
necesitar0 crear la ta*la de sesin como se indica m0s a*a%o.
:ota< 6a Clase 6ession no usa sesiones nativas de P9P. Aenera sus &ro&ios datos de sesinI o@reciendo m0s
@le<i*ilidad a los desarrolladores.
:ota< A:n cuando no use sesiones encri&tadasI tiene -ue esta*lecer una clave de encri&tacin en su arc>ivo
de con@iguracinI -ue se usa &ara a,udar a evitar la mani&ulacin de los datos de sesin.
Ini%iali8ar una 6esin
6as sesiones se e%ecutar0n normalmente en @orma glo*al con cada carga de &0ginaI &or lo -ue la Clase 6ession
tiene -ue iniciali"arse en los constructores de sus controladores o ser cargada autom0ticamente &or el sistema.
Para la ma,or &arteI la Clase 6ession se e%ecutar0 desatendida en segundo &lanoI &or lo -ue sim&lemente
iniciali"ar la clase &rovocar0 leerI crear , actuali"ar sesiones.
Para iniciali"ar manualmente la Clase 6ession en el constructor de su controladorI use la @uncin ?t=is@Aload@
Ali"rar;G
$this->load->library('session');
7na ve" cargadaI el o*%eto de la *i*lioteca 6ession estar0 dis&oni*le usandoG ?t=is@Asession.
2C$o !ra"aDan las 6esiones5
Cuando se carga una &0ginaI la Clase 6ession veri@icar0 si e<isten datos de sesin v0lidos en la coo;ie de sesin
del usuario. 2i no e<isten los datos de sesin Jo si e<&iraronK se crear0 una nueva sesin , se guardar0 en la
coo;ie. 2i e<iste la sesinI su in@ormacin se actuali"ar0 , la coo;ie tam*in se actuali"ar0. Con cada actuali"acinI
se regenerar0 el sessionBid.
1s im&ortante com&render -ue una ve" iniciali"adaI la Clase 6ession corre autom0ticamente. 3o >a, nada -ue se
necesite >acer &ara -ue ocurra el com&ortamiento anterior. Como veremos a continuacinI &uede tra*a%ar con los
datos de sesin o inclusive agregar sus &ro&ios datos a la sesin del usuarioI &ero el &roceso de lecturaI escritura ,
actuali"acin de una sesin es autom0tico.
2Nu9 son los Fatos de 6esin5
7na sesinI &or lo -ue a CodeIgniter se re@iereI es sim&lemente un arra, -ue contiene la siguiente in@ormacinG
1l ID :nico de 2esin del usuario J-ue es una cadena estadHsticamente aleatoria con una entro&Ha mu,
@uerteI codi@icada con 'D4 &ara darle &orta*ilidadI , regenerada ( &or de@ecto ( cada cinco minutosK
6a direccin IP del usuario
6os datos del Agente de 7suario Jlos &rimeros 1/0 caracteres de la cadena de datos del navegadorK
6a marca de tiem&o de la N:ltima actividadN.
6os datos anteriores se almacenan en una coo;ie como un arra, seriali"ado con el siguiente &rototi&oG
Gua del Usuario de CodeIgniter Versin 2.1.3 227
[array]
(
'session_id' => cdigo aleatorio,
'ip_address' => 'cadena - direccin IP del usuario',
'user_agent' => 'cadena - datos del agente de usuario',
'last_activity' => marca de tiempo
)
2i tiene >a*ilitada la o&cin de encri&tacinI el arra, seriali"ado se encri&tar0 antes de ser almacenado en la
coo;ieI >aciendo los datos altamente seguros e im&ermea*les &ara -ue alguien los lea o altere. A-uH se &uede
encontrar mas in@ormacin acerca de encri&tacinI aun-ue la Clase 6ession se encargar0 de iniciali"ar , encri&tar
los datos autom0ticamente.
:ota< 6as coo;ies de sesin solamente se actuali"an cada cinco minutos &or de@ecto &ara reducir la carga del
&rocesador. 2i carga re&etidamente una &0gina advertir0 -ue la >ora N:ltima actividadN solo se actuali"a si &asaron
cinco minutos o m0s desde la :ltima ve" -ue se escri*i la coo;ie. 1ste tiem&o es con@igura*le cam*iando la lHnea
?%on#igKLsessBti$eBtoBupdateLM en su arc>ivo appli%ation%on#ig%on#ig.p=p.
Re%uperar los Fatos de 6esin
Cual-uier &ie"a de in@ormacin desde un arra, de sesin est0 dis&oni*le usando la siguiente @uncinG
$this->session->userdata('item');
Donde ite$ es el Hndice del arra, corres&ondiente al Htem -ue desea recu&erar. Por e%em&loI &ara recu&erar el ID
de sesinI >ar0 estoG
$session_id = $this->session->userdata('session_id');
:ota< 6a @uncin devuelve >076E J*ooleanoK si el Htem -ue est0 tratando de acceder no e<iste.
0gregar Fatos de 6esin 3ersonali8ados
7n as&ecto :til del arra, de sesiones es -ue 7d &uede agregar sus &ro&ios datos a l , se guardar0 en la coo;ie
del usuario. ]Por -u -uerrHa >acer esto^ A-uH >a, un e%em&loG
Digamos -ue un usuario en &articular inicia sesin en su sitio. 7na ve" autenticadoI 7d &odrHa agregar su nom*re
de usuario , direccin de email a la coo;ie de sesinI >aciendo -ue esos datos sean glo*alesI sin tener -ue correr
una consulta de *ase de datos cuando los necesite.
Agregar sus datos al arra, de sesin im&lica &asar un arra, conteniendo sus nuevos datos a esta @uncinG
$this->session->set_userdata(%arra>);
Donde ?arra; es el arra, asociativo -ue contiene sus nuevos datos. A-uH >a, un e%em&loG
$newdata = array(
'username' => 'joseperez',
'email' => 'joseperez@algun-sitio.com',
'logged_in' => TRUE
);
$this->session->set_userdata(%ne<data);
Gua del Usuario de CodeIgniter Versin 2.1.3 228
2i -uiere agregar los datos del usuario de a un dato &or ve"I setBuserdata+, tam*in so&orta esta sinta<is.
$this->session->set_userdata('algun_nombre', 'algun_valor');
:ota< 6as coo;ies solamente &ueden mantener #hB de datosI &or lo -ue >a, -ue ser cuidadoso de no e<ceder
la ca&acidad. 1n &articularI el &roceso de encri&tacin &roduce cadenas de datos m0s grandes -ue el originalI
&or lo -ue >a, -ue &restar atencin a cmo se almacenan los datos.
Re%uperar todos los Fatos de 6esin
2e &uede recu&erar un arra, de todos los userdata como se muestra a continuacinG
$this->session->all_userdata()
R devuelve un arra, asociativo como el siguienteG
Array
(
[session_id] => 4a5a5dca22728fb0a84364eeb405b601
[ip_address] => 127.0.0.1
[user_agent] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7;
[last_activity] => 1303142623
)
Eli$inar Fatos de 6esin
AsH como setBuserdata+, se &uede usar &ara agregar in@ormacin a una sesinI unsetBuserdata+, se &uede
usar &ara eliminarla &as0ndole la clave de sesin. Por e%em&loI si -uiere eliminar YalgunBnom*reY de la in@ormacin
de sesinG
$this->session->unset_userdata('algun_nombre');
A esta @uncin tam*in se le &uede &asar un arra, asociativo de Htems &ara eliminar.
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
>las=data
CodeIgniter so&orta N@las>dataNI o datos de sesin -ue estar0n dis&oni*les solamente &ara la &r<ima solicitud del
servidorI , se eliminan autom0ticamente. 1stos &ueden ser mu, :tiles , se usan normalmente &ara mensa%es de
estado o in@ormativos J&or e%em&loG Nregistro / *orradoNK.
:ota< 6as varia*les @las> est0n &recedidas con N#las=BN &or lo tanto evite usar este &re@i%o en sus nom*res de
sesin.
Para agregar @las>dataG
$this->session->set_flashdata('item', 'valor');
Gua del Usuario de CodeIgniter Versin 2.1.3 229
Cam*in se le &uede &asar un arra, a setB#las=data+,I de la misma @orma -ue setBuserdata+,.
Para leer una varia*le @las>dataG
$this->session->flashdata('item');
2i ve -ue necesita &reservar una varia*le @las>data a travs de una solicitud adicionalI &uede >acerlo usando la
@uncin IeepB#las=data+,.
$this->session->keep_flashdata('item');
Guardar Fatos de 6esin en una &ase de Fatos
'ientras -ue el arra, almacenado de datos de sesin en la coo;ie del usuario contiene un ID de sesinI no >a,
@orma de validarloI a menos -ue almacene los datos de sesin en una *ase de datos. Para algunas a&licaciones
-ue tienen &oca o ninguna seguridadI &uede no necesitarse la validacin del ID de sesinI &ero si la a&licacin
necesita seguridadI la validacin es o*ligatoria. 2i noI el usuario &odrHa restaurar una sesin vie%a modi@icando las
coo;ies.
Cuando los datos de sesin est0n dis&oni*les en una *ase de datosI cada ve" -ue se encuentra una sesin v0lida
en la coo;ie del usuarioI se e%ecuta una consulta de *ase de datos &ara ver si coincide. 2i el ID de sesin no
coincideI la sesin se destru,e. 6os ID de sesin nunca se &ueden actuali"arI solamente se &ueden generar cuando
se crea una sesin nueva.
Con el @in de almacenar sesionesI &rimero tiene -ue crear una ta*la de *ase de datos &ara este &ro&sito. A-uH
est0 el &rototi&o *0sico J&ara ',2L6K re-uerido &or la Clase 6essionG
CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);
:ota< 6a ta*la se llama &or de@ecto %iBsessionsI &ero &uede llamarla como -uiera siem&re , cuando actualice el
arc>ivo appli%ation%on#ig%on#ig.p=p &ara -ue contenga el nom*re -ue eligi. 7na ve" -ue cre la ta*la de
*ase de datos &uede >a*ilitar la o&cin de *ase de datos en su arc>ivo %on#ig.p=pI de este modoG
$config['sess_use_database'] = TRUE;
7na ve" >a*ilitadaI la clase 6ession almacenar0 datos de sesin en la *ase de datos.
Aseg:rese de es&eci@icar el nom*re de la ta*la tam*in en su arc>ivo de con@iguracinG
$config['sess_table_name'] = 'ci_sessions';
:ota< 6a clase 6ession tiene incor&orado un recolector de *asura -ue *orra las sesiones -ue caducaronI &or lo
-ue no necesita escri*ir su &ro&ia rutina &ara >acerlo.
Gua del Usuario de CodeIgniter Versin 2.1.3 230
Festruir una 6esin
Para *orrar la sesin actualG
$this->session->sess_destroy();
:ota< 1sta @uncin de*erHa ser la :ltima en llamarse. 2i lo :nico -ue desea es destruir algunos HtemsI &ero no
todosI use unsetBuserdata+,.
3re#eren%ias de 6esiones
1ncontrar0 las siguientes &re@erencias relacionadas a las sesiones en su arc>ivo appli%ation%on#ig%on#ig.p=pG
3re#eren%ia 3or Fe#e%to Gp%iones Fes%rip%in
sessB%ooIieBna$e ciBsession 3inguno 3om*re con el -ue -uiere guardar la sesin.
sessBe1piration 7/00 3inguno
6a cantidad de segundos -ue -uisiera -ue la sesin
dure. 1l valor &or de@ecto es de / >oras J7/00
segundosK. 2i -uisiera -ue la sesin no e<&ireI
esta*lecer el valor a ceroG 0
sessBe1pireBonB%lose $A621
C871O$A621
J*ooleanoK
2i &rovocar -ue la sesin e<&ire autom0ticamente
cuando se cierra la ventana del navegador.
sessBen%r;ptB%ooIie $A621
C871O$A621
J*ooleanoK
2i encri&tar o no los datos de sesin.
sessBuseBdata"ase $A621
C871O$A621
J*ooleanoK
2i guardar o no los datos de sesin en una *ase de
datos. Ciene -ue crear la ta*la antes de >a*ilitar esta
o&cin.
sessBta"leBna$e ciBsessions
Cual-uier
nom*re v0lido
de ta*la 2L6
3om*re de la ta*la de *ase de datos &ara la sesin.
sessBti$eBtoBupdate 00
Ciem&o en
segundos
1sta o&cin controla cuan @recuentemente la Clase
2ession se regenerar0 a sH misma , crear0 un nuevo
ID de sesin.
sessB$at%=Bip $A621
C871O$A621
J*ooleanoK
2i tiene -ue coincidir la direccin IP del usuario al leer
los datos de sesin. Advierta -ue algunos I2P
cam*ian la IP din0micamenteI &or lo -ue si -uiere
una sesin -ue no e<&ireI &ro*a*lemente tenga -ue
esta*lecer esto a $A621.
sessB$at%=Buseragent C871
C871O$A621
J*ooleanoK
2i tiene -ue coincidir el Agente de 7suario al leer los
datos de sesin.
Gua del Usuario de CodeIgniter Versin 2.1.3 231
Clase !a"le
6a clase !a"le &rovee @unciones &ara &ermitirle generar ta*las 9C'6 autom0ticamente desde arra,s o con%untos
de resultados de *ase de datos.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la clase !a"le se iniciali"a en su controlador usando la @uncin
?t=is@Aload@Ali"rar;G
$this->load->library('table');
7na ve" cargadaI el o*%eto de la *i*lioteca !a"le estar0 dis&oni*le usandoG ?t=is@Ata"le.
EDe$plos
A-uH >a, un e%em&lo -ue muestra cmo se &uede crear una ta*la desde un arra, mutidimensional. Advierta -ue el
&rimer Hndice del arra, se convertir0 en el enca*e"ado de la ta*la Jo &uede esta*lecer sus &ro&ios enca*e"ados
usando la @uncin setB=eading+, descri&ta en la 8e@erencia de $unciones m0s a*a%oK.
$this->load->library('table');
$data = array(
array('Nombre', 'Color', 'Tamao'),
array('Lucas', 'Azul', 'S'),
array('Miriam', 'Rojo', 'L'),
array('Jose', 'Verde', 'M')
);
echo $this->table->generate($data);
A-uH est0 un e%em&lo de una ta*la creada desde el resultado de una consulta de *ase de datos. 6a clase !a"le
generar0 autom0ticamente los enca*e"ados *asados en los nom*res de ta*la Jo &uede esta*lecer sus &ro&ios
enca*e"ados usando la @uncin setB=eading+, descri&ta en la 8e@erencia de $unciones m0s a*a%oK.
$this->load->library('table');
$query = $this->db->query("SELECT * FROM mi_tabla");
echo $this->table->generate($query);
A-uH >a, un e%em&lo -ue muestra cmo &odrHa crear una ta*la usando &ar0metros discretosG
$this->load->library('table');
$this->table->set_heading('Nombre', 'Color', 'Tamao');
$this->table->add_row('Lucas', 'Azul', 'S');
$this->table->add_row('Miriam', 'Rojo', 'L');
$this->table->add_row('Jose', 'Verde', 'M');
echo $this->table->generate();
Gua del Usuario de CodeIgniter Versin 2.1.3 232
A-uH est0 el mismo e%em&loI salvo -ue en lugar de &ar0metros individualesI se usan arra,sG
$this->load->library('table');
$this->table->set_heading(array('Nombre', 'Color', 'Tamao'));
$this->table->add_row(array('Lucas', 'Azul', 'S'));
$this->table->add_row(array('Miriam', 'Rojo', 'L'));
$this->table->add_row(array('Jose', 'Verde', 'M'));
echo $this->table->generate();
Ca$"iar el 0spe%to de su !a"la
6a Clase !a"le le &ermite esta*lecer una &lantilla de ta*la con la -ue &uede es&eci@icar el dise+o de su
distri*ucin. 1ste es el &rototi&o de la &lantillaG
$tmpl = array (
'table_open' => '<table border="0" cellpadding="4"
cellspacing="0">',
'heading_row_start' => '<tr>',
'heading_row_end' => '</tr>',
'heading_cell_start' => '<th>',
'heading_cell_end' => '</th>',
'row_start' => '<tr>',
'row_end' => '</tr>',
'cell_start' => '<td>',
'cell_end' => '</td>',
'row_alt_start' => '<tr>',
'row_alt_end' => '</tr>',
'cell_alt_start' => '<td>',
'cell_alt_end' => '</td>',
'table_close' => '</table>'
);
$this->table->set_template($tmpl);
:ota< Advertir0 -ue >a, dos con%untos de *lo-ues de N@ilasN en la &lantilla. 1stos le &ermiten crear colores
alternativos de @ilas o elementos de dise+o -ue alternan con cada iteracin de los datos de la @ila.
3) est0 o*ligado a enviar la &lantilla com&leta. 2i solo necesita cam*iar &artes del dise+oI sim&lemente &uede
enviar esos elementos. 1n el e%em&loI se cam*ia solamente la eti-ueta de a&ertura de la ta*laG
$tmpl = array ( 'table_open' => '<table border="1" cellpadding="2"
cellspacing="1" class="mytable">' );
$this->table->set_template($tmpl);
Gua del Usuario de CodeIgniter Versin 2.1.3 233
Re#eren%ia de >un%iones
?t=is@Ata"le@Agenerate+,
Devuelve una cadena -ue contiene la ta*la generada. Ace&ta un &ar0metro o&cional -ue &uede ser un arra, o un
o*%eto de resultado de *ase de datos.
?t=is@Ata"le@AsetB%aption+,
6e &ermite agregar un tHtulo a la ta*la.
$this->table->set_caption('Colores');
?t=is@Ata"le@AsetB=eading+,
6e &ermite esta*lecer el enca*e"ado de la ta*la. Puede enviar un arra, o &ar0metros discretosG
$this->table->set_heading('Nombre', 'Color', 'Tamao');
$this->table->set_heading(array('Nombre', 'Color', 'Tamao'));
?t=is@Ata"le@AaddBroC+,
6e &ermite agregar una @ila a su ta*la. Puede enviar un arra, o &ar0metros discretosG
$this->table->add_row('Azul', 'Rojo', 'Verde');
$this->table->add_row(array('Azul', 'Rojo', 'Verde'));
2i -uisiera esta*lecer atri*utos de eti-uetas de una celda individualI &uede usar un arra, asociativo &ara esa celda.
6a clave asociativa LdataL de@ine los datos de la celda. Cual-uier otro &ar %lave SA valor se agregar0 como
atri*uto %laveSLvalorL a la eti-uetaG
$cell = array('data' => 'Azul', 'class' => 'highlight', 'colspan' => 2);
$this->table->add_row($cell, 'Rojo', 'Verde');
// genera
// <td class='highlight' colspan='2'>Azul</td><td>Rojo</td><td>Verde</td>
?t=is@Ata"le@A$aIeB%olu$ns+,
1sta @uncin toma como entrada un arra, unidimensional , crea un arra, multidimensional con una &ro@undidad
igual a la cantidad deseada de columnas. 1sto &ermite -ue un arra, sim&le con varios elementos se muestre en
una ta*la -ue tiene una cantidad @i%a de columnas. Considere este e%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 234
$list = array('uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho',
'nueve', 'diez', 'once', 'doce');
$new_list = $this->table->make_columns($list, 3);
$this->table->generate($new_list);
// Genera una tabla con este prototipo
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td>uno</td><td>dos</td><td>tres</td>
</tr><tr>
<td>cuatro</td><td>cinco</td><td>seis</td>
</tr><tr>
<td>siete</td><td>ocho</td><td>nueve</td>
</tr><tr>
<td>diez</td><td>once</td><td>doce</td></tr>
</table>
?t=is@Ata"le@AsetBte$plate+,
6e &ermite esta*lecer su &lantilla. Puede enviar una &lantilla com&leta o &arcial.
$tmpl = array ( 'table_open' => '<table border="1" cellpadding="2"
cellspacing="1" class="mytable">' );
$this->table->set_template($tmpl);
?t=is@Ata"le@AsetBe$pt;+,
6e &ermite esta*lecer un valor &or de@ecto &ara usar en cual-uier celda de ta*la -ue est vacHa. PuedeI &or
e%em&loI esta*lecer un es&acio de no se&aracinG
$this->table->set_empty("&nbsp;");
?t=is@Ata"le@A%lear+,
6e &ermite vaciar el enca*e"ado de la ta*la , los datos de @ila. 2i necesita mostrar varias ta*las con datos
di@erentesI de*erHa llamar a esta @uncin des&us -ue cada ta*la se >a,a generado &ara vaciar la in@ormacin
anterior de la ta*la. 1%em&loG
$this->load->library('table');
$this->table->set_heading('Nombre', 'Color', 'Tamao');
$this->table->add_row('Lucas', 'Azul', 'S');
$this->table->add_row('Miriam', 'Rojo', 'L');
$this->table->add_row('Jose', 'Verde', 'M');
echo $this->table->generate();
%tis-3ta!le-3clear&'5
$this->table->set_heading('Nombre', 'Da', 'Entrega');
$this->table->add_row('Lucas', 'Mircoles', 'Expreso');
Gua del Usuario de CodeIgniter Versin 2.1.3 235
$this->table->add_row('Miriam', 'Lunes', 'Areo');
$this->table->add_row('Jose', 'Sbado', 'Nocturno');
echo $this->table->generate();
?t=is@Ata"le@A#un%tion
6e &ermite es&eci@icar @unciones nativas de P9P o un o*%etoI arra, o @uncin v0lidos &ara a&licarse a todos los
datos de las celdas.
athis->load->library('table');
$this->table->set_heading('Nombre', 'Color', 'Tamao');
$this->table->add_row('Lucas', '<strong>Blue</strong>', 'Small');
$this->table->function = 'htmlspecialchars';
echo $this->table->generate();
1n el e%em&lo anteriorI a todos los datos de las celdas se les e%ecut la @uncin =t$lspe%ial%=ars+, de P9PI
resultando enG
<td>Lucas</td><td>&lt;strong&gt;Azul&lt;/strong&gt;</td><td>S</td>
Gua del Usuario de CodeIgniter Versin 2.1.3 236
Clase !ra%I"a%I
6a Clase !ra%I"a%I &rovee @unciones -ue le &ermiten enviar , reci*ir datos Crac;*ac;.
2i no est0 @amiliari"ado con los Crac;*ac;sI encontrar0 m0s in@ormacin a-uH.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la Clase !ra%I"a%I se iniciali"a en su controlador usando la @uncin
?t=is@Aload@Ali"rar;G
$this->load->library('trackback');
7na ve" cargadaI el o*%eto de la *i*lioteca !ra%I"a%I estar0 dis&oni*le usandoG ?t=is@Atra%I"a%I.
Enviar !ra%I"a%Is
2e &uede enviar un Crac;*ac; desde cual-uier @uncin controlador usando un cdigo similar a este e%em&loG
$this->load->library('trackback');
$tb_data = array(
'ping_url' => 'http://ejemplo.com/trackback/456',
'url' => 'http://www.mi-ejemplo.com/blog/entrada/123',
'title' => 'Ttulo de mi Entrada',
'excerpt' => 'Contenido de la Entrada.',
'blog_name' => 'Mi Nombre de Blog',
'charset' => 'utf-8'
);
if ( ! $this->trackback->send($tb_data))
{
echo $this->trackback->display_errors();
}
else
{
echo 'Se envi el Trackback!';
}
Descri&cin de los datos del arra,G
pingBurl ( 786 de su sitio a donde est0 enviando el Crac;*ac;. Puede enviar Crac;*ac;s a varias 786sI
se&arando cada 786 con una coma.
url ( 786 a 27 sitio donde se &uede ver la entrada del =e*log.
title ( CHtulo de su entrada del =e*log.
E1%erpt ( Contenido de su entrada del =e*log. :ota< 6a Clase Crac;*ac; enviar0 autom0ticamente solo
los &rimeros 400 caracteres de su entrada. Cam*in eliminar0 todo el 9C'6.
"logBna$e ( 3om*re de su =e*log.
%=arset ( Codi@icacin de caracteres con la -ue se escri*e en su =e*log. 2i se omiteI se usar0 U!>@V.
6a @uncin -ue envHa un Crac;*ac; devuelve !RUE>076E J*ooleanoK en caso de <ito o @alla. 2i @allaI se &uede
recu&erar un mensa%e de error usandoG
$this->trackback->display_errors();
Gua del Usuario de CodeIgniter Versin 2.1.3 237
Re%i"ir !ra%I"a%Is
Antes de -ue &ueda reci*ir Crac;*ac;s de*e crear un =e*log. 2i usted no tiene un *log -ue no >a, ra"n &ara
continuar.
8eci*ir Crac;*ac;s es un &oco m0s com&le%o -ue enviarlosI solamente &or-ue necesitar0 una ta*la de *ase de
datos donde almacenarlos , necesitar0 validar los datos del trac;*ac; entrante. 6o animamos a im&lementar un
&roceso cuidadoso de validacin &ara &rotegerse contra el s&am , los datos du&licados. Cam*in &uede desear
limitar la cantidad de Crac;*ac;s -ue &ermite desde una IP en &articular en un la&so de tiem&o determinado &ara
reducir a:n m0s el s&am. 1l &roceso de reci*ir un Crac;*ac; es *astante sim&le` la validacin es lo -ue se lleva el
ma,or es@uer"o.
6u UR7 de 3ing
A @in de ace&tar Crac;*ac;s tiene -ue mostrar la 786 del Crac;*ac; al lado de cada entrada de su =e*log. 1sta
ser0 la 786 -ue la gente usar0 &ara enviarle sus Crac;*ac;s Jnos re@erimos a esto como su N786 de PingNK.
2u 786 de Ping tiene -ue a&untar a una @uncin controlador donde est locali"ado su cdigo -ue reci*e Crac;*ac;s
, la 786 tiene -ue contener el n:mero ID &ara cada entrada en &articularI de modo -ue cuando se reci*e el
Crac;*ac; usted ser0 ca&a" de asociarlo con una entrada en &articular.
Por e%em&loI si su clase controlador se llama !ra%I"a%I , la @uncin -ue reci*e se llama re%eiveI sus 786s de
Ping lucir0n como estoG
http://ejemplo.com/index.php/trackback/receive/entr>_id
Donde entr;Bid re&resenta el n:mero ID individual &ara cada una de las entradas.
Crear una !a"la de !ra%I"a%I
Antes -ue &ueda reci*ir los Crac;*ac;s tiene -ue crear una ta*la donde almacenarlos. A-uH >a, un &rototi&o *0sico
de esa ta*laG
CREATE TABLE trackbacks (
tb_id int(10) unsigned NOT NULL auto_increment,
entry_id int(10) unsigned NOT NULL default 0,
url varchar(200) NOT NULL,
title varchar(100) NOT NULL,
excerpt text NOT NULL,
blog_name varchar(100) NOT NULL,
tb_date int(10) NOT NULL,
ip_address varchar(16) NOT NULL,
PRIMARY KEY `tb_id` (`tb_id`),
KEY `entry_id` (`entry_id`)
);
6a es&eci@icacin de Crac;*ac; solo re-uiere cuatro &ie"as de in@ormacin a enviarse en un Crac;*ac; JurlI titleI
e<cer&tI *logBnameKI &ero &ara >acer m0s :tiles los datosI >emos agregado unos &ocos cam&os m0s en el
es-uema de la ta*la anterior JdateI IP addressI etc.K.
Gua del Usuario de CodeIgniter Versin 2.1.3 238
3ro%esar el !ra%I"a%I
A-uH >a, un e%em&lo de cmo reci*ir0 , &rocesar0 un Crac;*ac;. 1l siguiente cdigo est0 &ensado &ara usarse
dentro de la @uncin controlador donde es&era reci*ir Crac;*ac;s.
$this->load->library('trackback');
$this->load->database();
if ($this->uri->segment(3) == FALSE)
{
$this->trackback->send_error("Imposible determinar el ID de la entrada");
}
if ( ! $this->trackback->receive())
{
$this->trackback->send_error("El Trackback no contena datos vlidos");
}
$data = array(
'tb_id' => '',
'entry_id' => $this->uri->segment(3),
'url' => $this->trackback->data('url'),
'title' => $this->trackback->data('title'),
'excerpt' => $this->trackback->data('excerpt'),
'blog_name' => $this->trackback->data('blog_name'),
'tb_date' => time(),
'ip_address' => $this->input->ip_address()
);
$sql = $this->db->insert_string('trackbacks', $data);
$this->db->query($sql);
$this->trackback->send_success();
:otas<
1l n:mero entr;Bid se es&era en el tercer segmento de su 786. 1st0 *asado en el e%em&lo de 78I -ue dimos
antesG
http://ejemplo.com/index.php/trackback/receive/entr>_id
Advierta -ue entr;Bid est0 en el tercer segmento 78II el cual &uede recu&erar usandoG
$this->uri->segment(3);
1n nuestro cdigo anterior -ue reci*e el Crac;*ac;I si @alta el tercer segmentoI se emitir0 un error. 2in un ID de
entrada v0lidoI no >a, ra"n &ara continuar.
6a @uncin ?t=is@Atra%I"a%I@Are%eive+, es sim&lemente una @uncin de validacin -ue mira al dato entrante ,
se asegura -ue contenga las cuatro &ie"as de datos re-ueridas JurlI titleI e<cer&tI *logBnameK. Devuelve !RUE en
caso de <ito , >076E en caso de @alla. 2i @allaI se emitir0 un mensa%e de error.
6os datos entrantes del Crac;*ac; se &ueden recu&erar usando esta @uncinG
$this->trackback->data('Jtem');
Gua del Usuario de CodeIgniter Versin 2.1.3 239
Donde te$ re&resenta una de estas cuatro &ie"as de in@ormacinG urlI titleI e<cer&tI o *logBname
2i los datos del Crac;*ac; se reci*ieron correctamenteI se emitir0 un mensa%e de <ito usandoG
$this->trackback->send_success();
:ota< 1l cdigo anterior no contiene validacin de datosI lo -ue le recomendamos agregarlo.
Gua del Usuario de CodeIgniter Versin 2.1.3 240
Clase !;pograp=;
6a clase !;pograp=; &rovee @unciones -ue le a,udan a @ormatear te<to.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la clase !;pograp=; se iniciali"a en su controlador usando la
@uncin ?t=is@Aload@Ali"rar;G
$this->load->library('typography');
7na ve" cargadaI el o*%eto de la *i*lioteca !;pograp=; estar0 dis&oni*le usandoG ?t=is@At;pograp=;.
autoBt;pograp=;+,
$ormatea te<to &ara -ue sea 9C'6 sem0ntica , ti&ogr0@icamente correctos. Coma como entrada una cadena , la
devuelve con el siguiente @ormatoG
8odea &0rra@os dentro de g&jgO&j J*usca saltos de lHnea do*les &ara identi@icar &0rra@osK.
6os saltos de lHnea sim&les se convierten en g*r OjI e<ce&to a-uellos -ue a&arecen dentro de eti-uetas
g&rej.
6os elementos a nivel de *lo-ueI como las eti-uetas gdivjI no tienen saltos de lHnea autom0tico dentro de
los &0rra@osI &ero sH su te<to contenidoI si contiene &0rra@os.
6as comillas se convierten correctamente en comillas ti&ogr0@icas en@rentadasI e<ce&to a-uellas -ue
a&arecen dentro de las eti-uetas.
6os a&stro@es se convierten en a&stro@es ti&ogr0@icos.
6os guiones do*les Jsea como (( estos o como estos((otrosK se convierten en estos_guiones.
Cres &untos correlativos sea &recediendo o siguiendo a una &ala*rasI se convierten en &untos sus&ensivos

6os es&acios do*les siguiendo sentencias se convierten en Tn"spU -ue imitan el do*le es&aciado.
1%em&lo de 7soG
$string = $this->typography->auto_typography($string);
3ar'$etros
9a, un &ar0metro o&cional -ue determina si el anali"ador sint0ctico de*erHa reducir de dos saltos de lHnea
consecutivos a dos. 7sar el *ooleano !RUE o >076E.
Por de@ectoI el anali"ador sint0ctico no reduce los saltos de lHnea. 1n otras &ala*rasI si no se envHan &ar0metros es
lo mismo -ue >acer estoG
$string = $this->typography->auto_typography($string, FALSE);
:ota< 1l @ormateo ti&ogr0@ico &uede ser intensivo en el uso del &rocesadorI &articularmente si >a, muc>o
contenido a @ormatear. 2i elige esta @uncin &uede -uerer considerar cac>ear sus &0ginas.
Gua del Usuario de CodeIgniter Versin 2.1.3 241
#or$atB%=ara%ters+,
1sta @uncin es similar a la autoBt;pograp=;+, anteriorI e<ce&to -ue solamente >ace conversin de caracteresG
6as comillas se convierten correctamente a comillas ti&ogr0@icas en@rentadasI e<ce&to &ara a-uellas -ue
a&arecen dentro de eti-uetas.
6os a&stro@es se convierten a a&stro@es ti&ogr0@icos.
6os guiones do*les Jsea como (( estos o como estos((otrosK se convierten en estos_guiones.
Cres &untos correlativos sea &recediendo o siguiendo a una &ala*rasI se convierten en &untos sus&ensivos

6os es&acios do*les siguiendo sentencias se convierten en Tn"spU -ue imitan el do*le es&aciado.
1%em&lo de 7soG
$string = $this->typography->format_characters($string);
nl2"rBe1%eptBpre+,
Convierte caracteres de nueva lHnea en eti-uetas E"r A a menos -ue a&are"can dentro de eti-uetas EpreA.
1sta @uncin es idntica a la @uncin nl2"r+, nativa de P9PI e<ce&to -ue ignora las eti-uetas EpreA.
1%em&lo de 7soG
$string = $this->typography->nl2br_except_pre($string);
prote%tB"ra%edB4uotes
Al usar la *i*lioteca !;pograp=; %unto con la Clase 3arserI a veces &uede ser desea*le &roteger las comillas
sim&les , do*les con llaves. Para >a*ilitar estoI esta*lecer la &ro&iedad prote%tB"ra%edB4uotes de la clase a
!RUE.
1%em&lo de 7soG
$this->load->library('typography');
$this->typography->protect_braced_quotes = TRUE;
Gua del Usuario de CodeIgniter Versin 2.1.3 242
Clase UnitBtest
6as &rue*as de unidad son un en@o-ue de la ingenierHa del so@t=are en el -ue se escri*en &rue*as &ara cada
@uncin en su a&licacin. 2i no est0 @amiliari"ado con este conce&toI &odrHa >acer una &e-ue+a investigacin
googleando el tema.
6a clase UnitBtest de CodeIgniter es *astante sim&leI consistiendo de una @uncin de evaluacin , dos @unciones
de resultado. 3o es la intencin -ue sea un con%unto de &rue*as com&letamente desarrolladoI sino m0s *ien un
mecanismo sencillo &ara evaluar el cdigo &ara determinar si se est0 &roduciendo el ti&o de datos correcto , el
resultado.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la clase UnitBtest se iniciali"a en su controlador usando la @uncin
?t=is@Aload@Ali"rar;G
$this->load->library('unit_test');
7na ve" cargadaI el o*%eto 7nitBtest estar0 dis&oni*le usandoG ?t=is@Aunit.
Correr 3rue"as
6a e%ecucin de una &rue*a consiste en suministrar una &rue*a , un resultado es&erado a la siguiente @uncinG
?t=is@Aunit@Arun+ prue"aJ resultado esperadoJ Lno$"re de la prue"aLJ LnotasL,
Donde prue"a es el resultado del cdigo -ue desea &ro*arI resultado esperado es el ti&o de dato -ue es&eraI
no$"re de la prue"a es un nom*re o&cional -ue le da a su &rue*a , notas son notas o&cionales. 1%em&loG
$prueba = 1 + 1;
$resultado_esperado = 2;
$nombre_prueba = 'Suma una ms uno';
$this->unit->run($prueba, $resultado_esperado, $nombre_prueba);
1l resultado es&erado -ue suministra &uede ser tanto una coincidencia literal como de ti&o de datos. A-uH >a, un
e%em&lo con un literalG
$this->unit->run('Foo', 'Foo');
A-uH >a, un e%em&lo de coincidencia de ti&o de datoG
$this->unit->run('Foo', 'is_string');
]Advierte el uso de NisBstringN en el segundo &ar0metro^ 6e dice a la @uncin a evaluar si la &rue*a est0
&roduciendo una cadena como resultado. A-uH est0 la lista de ti&os de com&araciones &ermitidasG
Gua del Usuario de CodeIgniter Versin 2.1.3 243
isBo*%ect
isBstring
isB*ool
isBtrue
isB@alse
isBint
isBnumeric
isB@loat
isBdou*le
isBarra,
isBnull
Genera%in de In#or$es
Puede tanto mostrar los resultados des&us de cada &rue*aI como correr varias &rue*as , generar un in@orme al
@inal. Para mostrar un in@orme directamenteI sim&lemente im&rima o devuelva la @uncin run+,G
echo $this->unit->run($test, $expected_result);
Para correr un in@orme com&leto de todas las &rue*asI >aga estoG
echo $this->unit->report();
1l in@orme se @ormatear0 en una ta*la 9C'6. 2i &re@iere los datos en crudo &uede recu&erar un arra, usandoG
echo $this->unit->result();
Hodo Estri%to
Por de@ectoI la clase UnitBtest eval:a las coincidencias literales vagamente. Considere este e%em&loG
$this->unit->run(1, TRUE);
6a &rue*a se eval:a como enteroI &ero el resultado es&erado es *ooleano. P9PI sin em*argoI de*ido a sus ti&os de
dato rela%ados evaluar0 el cdigo anterior como !RUE usando la &rue*a igualdad normalG
if (1 == TRUE) echo 'Esto se evala como TRUE';
2i lo &re@iereI &uede &oner la clase UnitBtest en modo estrictoI lo -ue com&arar0 los ti&os de dato tanto como el
valorG
if (1 === TRUE) echo 'Esto se evala como FALSE';
Para >a*ilitar el modo estrictoI use estoG
$this->unit->use_strict(TRUE);
Gua del Usuario de CodeIgniter Versin 2.1.3 244
.a"ilitarFes=a"ilitar la 3rue"a de Unidad
2i -uisiera de%ar algunas &rue*as en sus scri&tsI &ero no tener -ue correrlas a menos -ue lo necesiteI &uede
des>a*ilitar las &rue*as de unidad usandoG
$this->unit->active(FALSE);
Visuali8a%in de la 3rue"a de Unidad
Al visuali"ar los resultados de la &rue*a de unidadI se muestran los siguientes Htems &or de@ectoG
3om*re de la Prue*a JtestBnameK
Ci&o de Dato de Prue*a JtestBdatat,&eK
Ci&o de Dato 1s&erado JresBdatat,&eK
8esultado JresultK
3om*re de Arc>ivo J@ileK
3:mero de 6Hnea JlineK
Cual-uier nota -ue >a,a ingresado &ara la &rue*a JnotesK
Puede &ersonali"ar lo -ue de esos Htems se muestre usando ?t=is@Aunit@AsetBite$s+,. Por e%em&loI si solo
-uiere el nom*re de la &rue*a , el resultado mostradoG
3ersonali8ar las 3rue"as Hostradas
$this->unit->set_test_items(array('test_name', 'result'));
Crear una 3lantilla
2i -uisiera -ue los resultados de sus &rue*as se @ormatearan de modo di@erenteI entonces &uede esta*lecer su
&ro&ia &lantilla. A-uH >a, un e%em&lo de una &lantilla sencilla. Advierta las seudo(varia*les re-ueridasG
$str = '
<table border="0" cellpadding="4" cellspacing="1">
:ro<s;
<tr>
<td>:item;</td>
<td>:result;</td>
</tr>
:)ro<s;
</table>';
$this->unit->set_template($str);
:ota< 2u &lantilla tiene -ue estar declarada antes de correr el &roceso de la &rue*a de unidad.
Gua del Usuario de CodeIgniter Versin 2.1.3 245
Clase Upload
6a Clase Upload de CodeIgniter &ermite su*ir arc>ivos. 2e &ueden esta*lecer varias &re@erencias restringiendo el
ti&o , tama+o de los arc>ivos.
El 3ro%eso
2u*ir un arc>ivo involucra el siguiente &roceso generalG
2e muestra un @ormulario &ara su*ir arc>ivosI &ermitindole al usuario elegir un arc>ivo &ara su*ir.
Cuando se envHa el @ormularioI el arc>ivo se su*e al destino es&eci@icado.
Adem0sI el arc>ivo se valida &ara asegurarse -ue se le &ermite su*ir en *ase a las &re@erencias
esta*lecidas.
7na ve" su*idoI se le muestra al usuario un mensa%e de <ito.
Para mostrar este &rocesoI a-uH >a, un *reve tutorial. Des&us encontrar0 in@ormacin de re@erencia.
Crear el >or$ulario de 6u"ida
7sando un editor de te<toI crear un @ormulario llamado uploadB#or$.p=p. Dentro su,oI colocar este cdigo ,
guardarlo en su car&eta appli%ationvieCsG
<html>
<head>
<title>Formulario de Subida</title>
</head>
<body>
<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<input type="file" name="userfile" size="20" />
<br /><br />
<input type="submit" value="upload" />
</form>
</body>
</html>
Advertir0 -ue estamos usando un >el&er @orm &ara crear la eti-ueta de a&ertura del @ormulario. 6as su*idas de
arc>ivos necesitan de un @ormulario Nmulti&artNI &or lo tanto el >el&er crea la sinta<is adecuada &ara ello. Cam*in
advertir0 -ue usamos la varia*le ?error. 1sto es &ara -ue &odamos mostrar mensa%es de error en caso -ue el
usuario >aga algo mal.
7a 3'gina de a1ito
7sando un editor de te<toI crear un @ormulario llamado uploadBsu%%ess.p=p. Dentro su,oI colocar este cdigo ,
guardarlo en su car&eta appli%ationvieCsG
Gua del Usuario de CodeIgniter Versin 2.1.3 246
<html>
<head>
<title>Formulario de Subida</title>
</head>
<body>
<h3>El archivo se transfiri correctamente!</h3>
<ul>
<?php foreach ($upload_data as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?php endforeach; ?>
</ul>
<p><?php echo anchor('upload', 'Transferir otro archivo!'); ?></p>
</body>
</html>
El Controlador
7sando un editor de te<toI crear un controlador llamado upload.p=p. Dentro su,oI colocar este cdigo ,
guardarlo en su car&eta appli%ation%ontrollersG
<?php
class Upload extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
function index()
{
$this->load->view('upload_form', array('error' => ' ' ));
}
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
Gua del Usuario de CodeIgniter Versin 2.1.3 247
$this->load->view('upload_success', $data);
}
}
}
?>
7a Carpeta Upload
3ecesitar0 una car&eta destino &ara las im0genes su*idas. Crear una car&eta en la raH" de su instalacin de
CodeIgniter llamada uploads , esta*le"ca sus &ermisos de arc>ivo a 777.
3ru9"eloO
Para &ro*ar su @ormularioI visite su sitio usando una 786 similar a estaG
ejemplo.com/index.php/upload/
De*erHa ver un @ormulario de su*ida. Intente cargar un arc>ivo de imagen J@ormatos %&gI gi@I o &ngK. 2i la ruta en
su controlador es correctaI de*erHa @uncionar.
Gua de Re#eren%ia
Ini%iali8ar la Clase Upload
Como la ma,orHa de las clases en CodeIgniterI la Clase Upload iniciali"a en su controlador usando la @uncin
?t=is@Aload@Ali"rar;G
$this->load->library('upload');
7na ve" -ue la clase Upload est0 cargadaI el o*%eto estar0 dis&oni*le usandoG ?t=is@Aupload.
Esta"le%er 3re#eren%ias
2imilar a otras *i*liotecasI controlar0 lo -ue est0 &ermitido su*ir *asado en sus &re@erencias. 1n el controlador -ue
constru, antesI esta*lecer estas &re@erenciasG
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
// Alternativamente puede establecer preferencias llamando a la funcin
// initialize(). til si carga automticamente la clase:
// $this->upload->initialize($config);
6as &re@erencias anteriores son *astante claras &or sH mismas. De*a%o est0 la ta*la -ue descri*e todas las
&re@erencias dis&oni*les.
Gua del Usuario de CodeIgniter Versin 2.1.3 248
3re#eren%ias
3re#eren%ia Valor por
Fe#e%to
Gp%iones Fes%rip%in
uploadBpat= 3inguno 3inguno
8uta a la car&eta donde se de*erHan u*icar los arc>ivos su*idos.
6a car&eta tiene -ue ser escri*i*le , la ruta &uede ser a*soluta o
relativa.
alloCedBt;pes 3inguno 3inguno
Ci&o mime corres&ondiente a los ti&os de arc>ivo -ue se
&ermiten su*ir. 3ormalmente la e<tensin del arc>ivo se &uede
usar como ti&o mime. 2e&are varios ti&os con *arras verticales.
#ileBna$e 3inguno
3om*re de
arc>ivo deseado
2i lo esta*leceI CodeIgniter renom*rar0 el arc>ivo su*ido con
este nom*re. 6a e<tensin &rovista en el nom*re de arc>ivo
tiene -ue ser la de un ti&o de arc>ivo &ermitido.
overCrite $A621
C871O$A621
J*ooleanoK
1sta*lecida a C871I si e<iste un arc>ivo con el mismo nom*re
-ue el -ue est0 cargandoI se so*rescri*ir0. 1sta*lecida a $A621I
se le agregar0 un n:mero al nom*re de arc>ivo si e<iste otro con
el mismo nom*re.
$a1Bsi8e 0 3inguno
Cama+o m0<imo Jen ;ilo*,tesK -ue el arc>ivo &uede tener.
1sta*lecer a cero &ara sin lHmite. 3otaG 6a ma,orHa de las
instalaciones de P9P tiene su &ro&io lHmiteI seg:n se es&eci@ica
en el arc>ivo &>&.ini. 3ormalmente &or de@ecto es / 'B Jo /0#8
hBK.
$a1BCidt= 0 3inguno
Anc>o m0<imo Jen &i<elesK -ue el arc>ivo &uede tener.
1sta*lecer a cero &ara sin lHmite.
$a1B=eig=t 0 3inguno
Alto m0<imo Jen &i<elesK -ue el arc>ivo &uede tener. 1sta*lecer
a cero &ara sin lHmite.
$a1B#ilena$e 0 3inguno
6ongitud m0<ima -ue un nom*re de arc>ivo &uede tener.
1sta*lecer a cero &ara sin lHmite.
en%r;ptBna$e $A621
C871O$A621
J*ooleanoK
1sta*lecida a C871 se convertir0 el nom*re del arc>ivo a una
cadena encri&tada aleatoriamente. Puede ser :til si -uisiera -ue
la &ersona -ue su*a el arc>ivo no &ueda discernir su nom*re.
re$oveBspa%es C871
C871O$A621
J*ooleanoK
1sta*lecida a C871I cual-uier es&acio en el nom*re del arc>ivo
se convertir0 en guin de su*ra,ado. 2e recomienda.
Esta"le%er 3re#eren%ias en un 0r%=ivo de Con#igura%in
2i &re@iere no esta*lecer las &re@erencias usando este mtodoI en su lugar &uede &onerlas dentro de un arc>ivo de
con@iguracin. 2im&lemente cree un nuevo arc>ivo llamado upload.p=p , agregue el arra, ?%on#ig a ese arc>ivo.
6uego guarde el arc>ivo en %on#igupload.p=p , se lo utili"ar0 autom0ticamente. :G necesitar0 usar la @uncin
?t=is@Aupload@Ainitiali8e si guarda sus &re@erencias en un arc>ivo de con@iguracin.
Re#eren%ia de >un%iones
1st0n dis&oni*les las siguiente @uncionesG
?t=is@Aupload@AdoBupload+,
8eali"a la su*ida *asada en las &re@erencias -ue se esta*lecieron. :ota< Por de@ecto la rutina de su*ida es&era
-ue los arc>ivos vengan en un cam&o de @ormulario llamado user#ile , el @ormulario tiene -ue ser de ti&o
Nmulti&artNG
Gua del Usuario de CodeIgniter Versin 2.1.3 249
<form method="post" action="alguna_accion" enctype="multipart/form-data" />
2i -uisiera esta*lecer su &ro&io nom*re de arc>ivoI sim&lemente &ase su valor a la @uncin doBupload+,G
$field_name = "algun_nombre_de_campo";
$this->upload->do_upload($field_name);
?t=is@Aupload@Adispla;Berrors+,
8ecu&era cual-uier mensa%e de error si la @uncin doBupload+, devuelve >076E. 6a @uncin no >ace eco
autom0ticamenteI devuelve los datos &ara -ue &ueda asignarlos si resulta necesario.
>or$atear Errores
Por de@ectoI la @uncin anterior envuelve cual-uier error dentro de eti-uetas g&j. Puede esta*lecer sus &ro&ios
delimitadores con estoG
$this->upload->display_errors('<p>', '</p>');
?t=is@Aupload@Adata+,
1sta es una @uncin >el&er -ue devuelve un arra, -ue contiene todos los datos relacionados al arc>ivo -ue su*i.
1ste es el &rototi&o del arra,G
Array
(
[file_name] => mi_pic.jpg
[file_type] => image/jpeg
[file_path] => /ruta/a/su/subida/
[full_path] => /ruta/a/su/subida/jpg.jpg
[raw_name] => mi_pic
[orig_name] => mi_pic.jpg
[client_name] => mi_pic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
)
Gua del Usuario de CodeIgniter Versin 2.1.3 250
E1pli%a%in
1sta es una e<&licacin de los Htems del arra, anterior.
[te$ Fes%rip%in
#ileBna$e 3om*re del arc>ivo -ue se su*iI inclu,endo la e<tensin
#ileBt;pe Ci&o 'ime del arc>ivo
#ileBpat= 8uta a*soluta del servidor al arc>ivo
#ullBpat= 8uta a*soluta del servidor inclu,endo el nom*re de arc>ivo
raCBna$e 3om*re del arc>ivo sin la e<tensin
origBna$e 3om*re original del arc>ivo. 2olamente es :til si usa la o&cin de nom*re encri&tado
%lientBna$e 3om*re de arc>ivo como lo &ro&orciona el agente de usuarioI antes de cual-uier &re&aracin o
incremento del nom*re de arc>ivo
#ileBe1t 1<tensin de arc>ivo con el &unto
#ileBsi8e Cama+o del arc>ivo en ;ilo*,tes
isBi$age 2i el arc>ivo es o no una imagen. 1 e imagen. 0 e no lo es
i$ageBCidt= Anc>o de la imagen
i$ageB=eig=t Altura de la imagen
i$ageBt;pe Ci&o de imagen. 3ormalmente la e<tensin sin el &unto
i$ageBsi8eBstr 7na cadena -ue contiene anc>o , alto. Qtil &ara &onerlo en una eti-ueta de imagen
Gua del Usuario de CodeIgniter Versin 2.1.3 251
Clase URI
6a Clase URI &rovee @unciones -ue los a,udan a recu&erar in@ormacin de las cadenas 78I. 2i usa ruteo 78II
tam*in &uede recu&erar in@ormacin acerca de los segmentos re(ruteados.
:ota< 1l sistema iniciali"a autom0ticamente a esta claseI &or lo -ue no >a, necesidad de >acerlo manualmente.
?t=is@Auri@Aseg$ent+n,
6e &ermite recu&erar un segmento es&ecH@ico. Donde n es el n:mero de segmento -ue desea recu&erar. 6os
segmentos se numeran de i"-uierda a derec>a. Por e%em&lo si la 786 com&leta es estaG
http://ejemplo.com/index.php/noticias/locales/deportes/river-descendio
6os n:meros de segmento de*erHan ser estosG
1. noticias
/. locales
. de&ortes
#. river(descendio
Por de@ectoI la @uncin devuelve >076E J*ooleanoK si el segmento no e<iste. 9a, un segundo &ar0metro o&cional
-ue le &ermite esta*lecer su &ro&io valor &or de@ecto si @alta el segmento. Por e%em&loI esto le dirHa a la @uncin
-ue devuelva el n:mero 0 en caso de @allaG
$product_id = $this->uri->segment(3, 0);
Esto ayuda a evitar tener que codificar algo as:
if ($this->uri->segment(3) === FALSE)
{
$product_id = 0;
}
else
{
$product_id = $this->uri->segment(3);
}
?t=is@Auri@Arseg$ent+n,
1sta @uncin es igual a la anteriorI e<ce&to -ue le &ermite recu&erar un segmento es&ecH@ico de la 78I re(ruteada
en caso -ue est usando la @uncionalidad 8uteo 78I de CodeIgniter.
?t=is@Auri@Aslas=Bseg$ent+n,
1sta @uncin es casi idntica a ?t=is@Auri@Aseg$ent+,I e<ce&to -ue agrega las *arras al comien"o ,Oo @inal
seg:n el valor del segundo &ar0metro. 2i no se usa este &ar0metroI se agrega una *arra al @inal. 1%em&losG
$this->uri->slash_segment(3);
$this->uri->slash_segment(3, 'leading');
$this->uri->slash_segment(3, 'both');
Gua del Usuario de CodeIgniter Versin 2.1.3 252
DevuelveG
1. segmentoO
/. Osegmento
. OsegmentoO
?t=is@Auri@Aslas=Brseg$ent+n,
1sta @uncin es idntica a la anteriorI e<ce&to -ue le &ermite agregar *arras a un segmento es&ecH@ico desde su
78I re(ruteada en el caso de -ue est usando la @uncionalidad 8uteo 78I de CodeIgniter.
?t=is@Auri@AuriBtoBasso%+n,
1sta @uncin le &ermite convertir segmentos 78I en arra,s asociativos de &ares %lavevalor. Considere esta 78IG
index.php/usuario/buscar/nombre/jose/lugar/UK/sexo/masculino
7sando esta @uncinI &uede convertir la 78I en un arra, asociativo con este &rototi&oG
[array]
(
'nombre' => 'jose'
'lugar' => 'UK'
'sexo' => 'masculino'
)
1l &rimer &ar0metro de la @uncin le &ermite esta*lecer un des&la"amiento. Por de@ectoI se esta*lece a ,a -ue
normalmente su 78I contendr0 un controladorO@uncin en los &rimero , segundo segmentos. 1%em&loG
$array = $this->uri->uri_to_assoc(3);
echo $array['nombre'];
1l segundo &ar0metro le &ermite esta*lecer nom*res de clave &or de@ectoI &or lo -ue el arra, devuelto &or la
@uncin siem&re contendr0 los Hndices es&eradosI a:n si desa&arecen de la 78I. 1%em&loG
$default = array('nombre', 'sexo', 'lugar', 'tipo', 'orden');
$array = $this->uri->uri_to_assoc(3, $default);
2i la 78I no contiene un valor en su de@ectoI un Hndice de arra, se esta*lecer0 a ese nom*reI con el valor de
>076E.
Por :ltimoI si no se encuentra un valor corres&ondiente &ara una clave dada Jsi >a, un n:mero im&ar de
segmentos de 78IK el valor se esta*lecer0 a >076E J*ooleanoK.
?t=is@Auri@AruriBtoBasso%+n,
1sta @uncin es idntica a la anteriorI e<ce&to -ue crea un arra, asociativo usando la 78I re(ruteada en el caso -ue
est usando la @uncionalidad 8uteo 78I de CodeIgniter.
Gua del Usuario de CodeIgniter Versin 2.1.3 253
?t=is@Auri@Aasso%BtoBuri+,
Coma como entrada un arra, asociativo , genera una cadena 78I de l. 6as claves del arra, se incluir0n en la
cadena. 1%em&loG
$array = array('producto' => 'zapatos', 'tamao' => 'large', 'color' => 'rojo');
$str = $this->uri->assoc_to_uri($array);
// Produce: producto/zapatos/tamao/large/color/rojo
?t=is@Auri@AuriBstring+,
Devuelve una cadena con la 78I com&leta. Por e%em&loI si esta es su 78I com&letaG
http://ejemplo.com/index.php/noticias/locales/345
6a @uncin devolverHa estoG
/noticias/locales/345
?t=is@Auri@AruriBstring+,
1sta @uncin es idntica a la anteriorI e<ce&to -ue devuelve la 78I re(ruteada en el caso -ue est usando la
@uncionalidad 8uteo 78I de CodeIgniter.
?t=is@Auri@AtotalBseg$ents+,
Devuelve la cantidad total de segmentos.
?t=is@Auri@AtotalBrseg$ents+,
1sta @uncin es idntica a la anteriorI e<ce&to -ue devuelve la cantidad total de segmentos en su 78I re(ruteada en
el caso -ue est usando la @uncionalidad 8uteo 78I de CodeIgniter.
?t=is@Auri@Aseg$entBarra;+,
Devuelve un arra, conteniendo los segmentos 78I. Por e%em&loG
$segs = $this->uri->segment_array();
foreach ($segs as $segment)
{
echo $segment;
echo '<br />';
}
?t=is@Auri@Arseg$entBarra;+,
1sta @uncin es igual a la anteriorI salvo -ue devuelve el arra, de segmentos en su 78I re(ruteada en caso de usar
la @uncionalidad 8uteo 78I de CodeIgniter.
Gua del Usuario de CodeIgniter Versin 2.1.3 254
Clase UserBagent
6a Clase UserBagent &ro&orciona @unciones -ue a,udan a identi@icar in@ormacin acerca de navegadoresI
dis&ositivos mvilesI o ro*ots -ue visitan su sitio. Adem0s &uede o*tener in@ormacin del re@erenteI asH como del
idioma , con%unto de caracteres so&ortados.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI t>e Clase UserBagent se iniciali"a en su controlador usando la
@uncin ?t=is@Aload@Ali"rar;G
$this->load->library('user_agent');
7na ve" cargadaI el o*%eto estar0 dis&oni*le usandoG ?t=is@Aagent.
Fe#ini%iones del 0gente de Usuario
6as de@iniciones de nom*re de agente de usuario se locali"an en un arc>ivo de con@iguracin u*icado enG
appli%ation%on#iguserBagents.p=p. 2i se necesitaI &uede agregar Htems a varios arra,s de agentes de
usuario.
EDe$plo
Cuando se iniciali"a la Clase UserBagent se intentar0 determinar si el agente de usuario navegando su sitio es un
navegador =e*I un dis&ositivo mvil o un ro*ot. Cam*in se reunir0 la in@ormacin de &lata@orma si est0
dis&oni*le.
$this->load->library('user_agent');
if ($this->agent->is_browser())
{
$agent = $this->agent->browser().' '.$this->agent->version();
}
elseif ($this->agent->is_robot())
{
$agent = $this->agent->robot();
}
elseif ($this->agent->is_mobile())
{
$agent = $this->agent->mobile();
}
else
{
$agent = 'Agente de Usuario NO Identificado';
}
echo $agent;
// Informacin de la plataforma (Windows, Linux, Mac, etc.)
echo $this->agent->platform();
Gua del Usuario de CodeIgniter Versin 2.1.3 255
Re#eren%ia de >un%iones
?t=is@Aagent@AisB"roCser+,
Devuelve !RUE>076E J*ooleanoK si el agente de usuario es un navegador conocido.
if ($this->agent->is_browser('Safari'))
{
echo 'Est usndose Safari.';
}
else if ($this->agent->is_browser())
{
echo 'Est usando un navegador.';
}
:ota< 6a cadena N2a@ariN en este e%em&lo es una clave de arra, en la lista de de@iniciones de navegadores.
Puede encontrar esta lista en appli%ation%on#iguserBagents.p=p si -uiere agregar nuevos navegadores o
cam*iar las cadenas.
?t=is@Aagent@AisB$o"ile+,
Devuelve !RUE>076E J*ooleanoK si el agente de usuario es un dis&ositivo mvil conocido.
if ($this->agent->is_mobile('iphone'))
{
$this->load->view('iphone/home');
}
else if ($this->agent->is_mobile())
{
$this->load->view('mobile/home');
}
else
{
$this->load->view('web/home');
}
?t=is@Aagent@AisBro"ot+,
Devuelve !RUE>076E J*ooleanoK si el agente de usuario es un ro*ot conocido.
:ota< 6a *i*lioteca UserBagent solamente contiene las de@iniciones de ro*ot m0s comunes. 3o es una lista
com&leta de *ots. 9a, cientos de ellosI &or lo -ue *uscar a cada uno &odrHa no ser mu, e@iciente. 2i encuentra
-ue algunos *ots -ue visitan normalmente su sitio est0n @altando en la listaI &uede agregarlos a su arc>ivo
appli%ation%on#iguserBagents.p=p.
?t=is@Aagent@AisBre#erral+,
Devuelve !RUE>076E J*ooleanoK si el agente de usuario @ue remitido desde otro sitio.
?t=is@Aagent@A"roCser+,
Devuelve una cadena -ue contiene el nom*re del navegador -ue est0 viendo su sitio.
Gua del Usuario de CodeIgniter Versin 2.1.3 256
?t=is@Aagent@Aversion+,
Devuelve una cadena conteniendo el n:mero de versin del navegador -ue est0 viendo su sitio.
?t=is@Aagent@A$o"ile+,
Devuelve una cadena -ue contiene el nom*re del dis&ositivo mvil -ue est0 viendo su sitio.
?t=is@Aagent@Aro"ot+,
Devuelve una cadena -ue contiene el nom*re del ro*ot -ue est0 viendo su sitio.
?t=is@Aagent@Aplat#or$+,
Devuelve una cadena -ue contiene la &lata@orma -ue est0 viendo su sitio J6inu<I ?indo=sI )2 EI etc.K.
?t=is@Aagent@Are#errer+,
1l re@erenteI si el agente de usuario @ue remitido desde otro sitio. 3ormalmente se &rue*a de la siguiente maneraG
if ($this->agent->is_referral())
{
echo $this->agent->referrer();
}
?t=is@Aagent@AagentBstring+,
Devuelve una cadena conteniendo el agente de usuario com&leto. 3ormalmente ser0 algo como estoG
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.4) Gecko/20060613
Camino/1.0.2
?t=is@Aagent@Aa%%eptBlang+,
6e &ermite determinar si el agente de usuario ace&ta un idioma en &articular. 1%em&loG
if ($this->agent->accept_lang('en'))
{
echo 'Acepta Ingls!';
}
:ota< 3ormalmente esta @uncin no es mu, con@ia*leI ,a -ue algunos navegadores no &roveen in@ormacin del
idioma e incluso entre a-uellos -ue lo >acenI no siem&re es e<acta.
?t=is@Aagent@Aa%%eptB%=arset+,
6e &ermite determinar si el agente de usuario ace&ta un con%unto de caracteres en &articular. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 257
if ($this->agent->accept_charset('utf-8'))
{
echo 'Su navegador soporta UTF-8!';
}
:ota< 3ormalmente esta @uncin no es mu, con@ia*leI ,a -ue algunos navegadores no &roveen in@ormacin
acerca del con%unto de caracteres e incluso entre a-uellos -ue lo >acenI no siem&re es e<acta.
Gua del Usuario de CodeIgniter Versin 2.1.3 258
Clases YH7@R3C ; 6ervidor de YH7@R3C
6a Clase YH7R3C de CodeIgniter le &ermite enviar solicitudes a otro servidorI o con@igurar su &ro&io servidor E'6(
8PC &ara reci*ir solicitudes.
2Nu9 es YH7@R3C5
2im&lemente es una @orma en -ue dos com&utadoras se comuni-uen &or Internet usando E'6. 7na com&utadoraI
-ue llamaremos %lienteI envHa una soli%itud E'6(8PC a otra com&utadoraI -ue llamaremos servidor. 7na ve"
-ue el servidor reci*e , &rocesa la solicitudI enviar0 de regreso al cliente una respuesta.
Por e%em&loI usando la API de 'eta?e*logI un Cliente E'6(8PC Jusualmente una >erramienta de &u*licacin de
escritorioK enviar0 una solicitud a un 2ervidor E'6(8PC -ue corre en su sitio. 1sta solicitud &uede ser una nueva
entrada al =e*log enviada &or la &u*licacinI o &odrHa ser una solicitud &ara editar una entrada e<istente. Cuando
el 2ervidor E'6(8PC reci*e la solicitudI la e<aminar0 &ara determinar -ue claseOmtodo de*erHa llamar &ara
&rocesar la solicitud. 7na ve" &rocesadaI el servidor envHa de regreso un mensa%e de res&uesta.
Para leer las es&eci@icaciones detalladasI &uede visitar el sitio de E'6(8PC.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI las clases YH7@R3C , EH7@R3C6 se iniciali"an en su controlador
usando la @uncin ?t=is@Aload@Ali"rar;G
Para cargar la Clase E'68PC se usar0G
$this->load->library('xmlrpc');
7na ve" cargadaI el o*%eto de la *i*lioteca 1$l@rp% estar0 dis&oni*le usandoG ?t=is@A1$lrp%.
Para cargar la Clase del 2ervidor E'6(8PC se usar0G
$this->load->library('xmlrpc');
$this->load->library('xmlrpcs');
7na ve" cargadaI el o*%eto de la *i*lioteca 1$l@rp%s estar0 dis&oni*le usandoG ?t=is@A1$lrp%s.
:ota< Al usar la Clase del 2ervidor E'6(8PC tiene -ue cargar 0H&06 Clases E'68PC.
Enviar 6oli%itudes YH7@R3C
Para enviar una solicitud a un 2ervidor E'6(8PC tiene -ue es&eci@icar la siguiente in@ormacinG
6a 786 del servidor
1l mtodo del servidor -ue desea invocar
6os datos de la solicitud Jse e<&lica m0s a*a%oK
1ste es un e%em&lo -ue envHa un &ing sim&le de ?e*logs.com &ara Ping(o('atic.
Gua del Usuario de CodeIgniter Versin 2.1.3 259
$this->load->library('xmlrpc');
$this->xmlrpc->server('http://rpc.pingomatic.com/', 80);
$this->xmlrpc->method('weblogUpdates.ping');
$request = array('Mi Photoblog', 'http://www.mi-sitio.com/photoblog/');
$this->xmlrpc->request($request);
if ( ! $this->xmlrpc->send_request())
{
echo $this->xmlrpc->display_error();
}
E1pli%a%in
1l cdigo anterior iniciali"a la Clase YH7R3CI esta*lece la 786 del servidor , el mtodo a llamarse
J=e*log7&dates.&ingK. 6a solicitud Jen este casoI el tHtulo , la 786 de su sitioK se coloca en un arra, &ara
trans&ortarloI , se com&ila usando la @uncin re4uest+,. $inalmenteI se envHa la solicitud com&leta. 2i el mtodo
sendBre4uest+, devuelve >076E mostraremos en mensa%e de error devuelto &or el 2ervidor E'6(8PC.
0nato$a de una 6oli%itud
7na soli%itud E'6(8PC es sim&lemente los datos enviados al 2ervidor E'6(8PC. 7n par'$etro de soli%itud es
cada &ie"a de datos en una solicitud. 1l e%em&lo anterior tiene dos &ar0metrosG la 786 , el tHtulo de su sitio.
Cuando el 2ervidor E'6(8PC reci*e su solicitudI *uscar0 los &ar0metro -ue necesita.
6os &ar0metro de solicitud se tienen -ue &oner en un arra, &ara trans&ortarlos , cada &ar0metro solo &uede ser
de uno de los siete ti&os de dato JcadenasI n:merosI @ec>asI etcK. 2i sus &ar0metros son algo distinto a cadenasI
tendr0 -ue incluir los ti&os de datos en el arra, de la solicitud.
1ste es un e%em&lo de un arra, sim&le con tres &ar0metrosG
$request = array('Jose', 'Perez', 'www.algun-sitio.com');
$this->xmlrpc->request($request);
2i usa ti&os de datos distintos a cadenasI o si tiene varios ti&os de datos di@erentesI colocar0 cada &ar0metro en su
&ro&io arra,I con el ti&o de dato en la segunda &osicinG
$request = array (
array('Jose', 'string'),
array('Perez', 'string'),
array(FALSE, 'boolean'),
array(12345, 'int')
);
$this->xmlrpc->request($request);
6a seccin ti&os de Datos m0s a*a%o tiene la lista com&leta de los ti&os de datos.
Crear un 6ervidor YH7@R3C
7n 2ervidor E'6(8PC act:a como un &olicHa de tr0nsitoI es&erando solicitudes entrantes , redireccion0ndolas a la
@uncin adecuada &ara su &rocesamiento.
Crear su &ro&io 2ervidor E'6(8PC im&lica iniciali"ar la Clase de 2ervidor E'6(8PC en su controlador donde es&era
-ue a&are"ca la solicitud entranteI luego con@igurar un arra, con instrucciones ma&eadas &ara -ue las solicitudes
Gua del Usuario de CodeIgniter Versin 2.1.3 260
entrantes se &uedan enviar a la clase , mtodo a&ro&iados &ara &rocesarse.
A-uH >a, un e%em&loG
$this->load->library('xmlrpc');
$this->load->library('xmlrpcs');
$config['functions']['nuevo_mensaje'] = array('function' =>
'Mi_blog.nueva_entrada'),
$config['functions']['actualiza_mensaje'] = array('function' =>
'Mi_blog.actualiza_entrada');
$config['object'] = $this;
$this->xmlrpcs->initialize($config);
$this->xmlrpcs->serve();
1l e%em&lo anterior contiene un arra, -ue es&eci@ica dos solicitudes de mtodo -ue el 2ervidor &ermite. 6os
mtodos &ermitidos est0n en el lado i"-uierdo del arra,. Cuando cual-uiera de ellos se reci*eI ser0 ma&eado a la
clase , mtodo en la derec>a.
6a clave Yo"De%tY es una clave es&ecial a la -ue se le &asa un o*%eto de clase instanciadoI -ue es necesario cuando
el mtodo -ue se est0 ma&eando no es &arte del su&er o*%eto CodeIgniter.
1n otras &ala*ras si un Clente E'6(8PC envHa una solicitud &ara el mtodo nuevoB$ensaDeI su servidor cargar0
la clase HiB"log , llamar0 a la @uncin nuevaBentrada. 2i la solicitud es &ara el mtodo a%tuali8aB$ensaDeI
su servidor cargar0 la clase HiB"log , llamar0 a la @uncin a%tuali8aBentrada.
6os nom*res de @uncin en el e%em&lo anterior son ar*itrarios. 7d decidir0 cmo se de*erHan llamar en su servidor
o si est0 usando APIs estandari"adasI como Blogger o 'eta?e*logI usar0 sus nom*res de @uncin.
9a, dos claves de con@iguracin adicionales -ue &uede usar al iniciali"ar la clase del servidorG de"ug se &uede
esta*lecer a !RUE a @in de >a*ilitar la de&uracin , 1ssB%lean -ue se &uede esta*lecer a >076E &ara evitar el
envHo de datos data a travs de la @uncin 1ssB%lean+, de la *i*lioteca 2ecurit,.
3ro%esar las 6oli%itudes del 6ervidor
Cuando el 2ervidor E'6(8PC reci*e una solicitud , carga la claseOmtodo &ara &rocesarI &asar0 un o*%eto a ese
mtodo conteniendo los datos enviados &or el cliente.
Al usar el e%em&lo anteriorI si se solicita el mtodo nuevoB$ensaDeI el servidor es&erar0 una clase -ue e<ista con
este &rototi&oG
class Gi_!log extends CI_Controller {
function nue*o_mensa7e($request)
{
}
}
6a varia*le ?re4uest es un o*%eto com&ilado &or el 2ervidorI -ue contiene los datos enviados &or el Cliente E'6(
8PC. 7sando este o*%etoI tendr0 acceso a los &ar0metros de solicitud &ermitindole &rocesar la solicitud. Cuando lo
>a,a >ec>oI enviar0 una res&uesta de regreso al Cliente.
A*a%o >a, un e%em&lo del mundo real -ue usa la API de Blogger. 7no de los mtodos en la API de Blogger es
getUserIn#o+,. 7sando este mtodoI un Cliente E'6(8PC &uede enviar al 2ervidor un nom*re de usuario ,
contrase+a , de regreso el 2ervidor devuelve in@ormacin acerca de ese usuario en &articular Ja&odoI ID de
Gua del Usuario de CodeIgniter Versin 2.1.3 261
usuarioI direccin de emailI etcK. A-uH se muestra cmo lucirHa la @uncin de &rocesamientoG
class Gi_!log extends CI_Controller {
function get-serInfo(%reCuest)
{
$username = 'pirulo';
$password = 'pirulo_pass';
$this->load->library('xmlrpc');

$parameters = $request->output_parameters();

if ($parameters['1'] != $username AND $parameters['2'] != $password)
{
return $this->xmlrpc->send_error_message('100', 'Acceso invlido');
}

$response = array(array(
'nickname' => array('Pirulo','string'),
'userid' => array('99','string'),
'url' => array('http://www.su-
sitio.com','string'),
'email' => array('jperez@su-sitio.com','string'),
'lastname' => array('Perez','string'),
'firstname' => array('Jose','string')
),
'struct');
return $this->xmlrpc->send_response($response);
}
}
:otas<
6a @uncin outputBpara$eters+, recu&era un arra, inde<ado corres&ondiente a los &ar0metros de solicitud
enviados &or el cliente. 1n el e%em&lo anteriorI los &ar0metros de salida ser0n el nom*re del usuario , la
contrase+a.
2i el nom*re del usuario , contrase+a enviados &or el cliente no @ueran v0lidosI se devuelve un mensa%e de error
usando sendBerrorB$essage+,.
2i la o&eracin @ue e<itosaI al cliente le ser0 enviado un arra, de res&uesta conteniendo la in@ormacin del usuario.
>or$atear una Respuesta
2imilar a las 2olicitudesI las 8es&uestas se tienen -ue @ormatear como un arra,. 2in em*argoI a di@erencia de las
solicitudesI una res&uesta es un arra; 4ue %ontiene un te$ si$ple. 1ste Htem &uede ser un arra, con varios
arra,s adicionalesI &ero solamente &uede >a*er un Hndice &rimario. 1n otras &ala*rasI el &rototi&o *0sico es esteG
$response = array('Datos de respuesta', 'array');
2in em*argoI las res&uestas normalmente contienen varias &ie"as de in@ormacin. Para lograr esto >a, -ue &oner
la res&uesta en su &ro&io arra, &ara -ue el arra, &rimario siga conteniendo una sola &ie"a de datos. 1ste es un
e%em&lo -ue muestra cmo se &uede lograrG
Gua del Usuario de CodeIgniter Versin 2.1.3 262
$response = array (
array(
'first_name' => array('Jose', 'string'),
'last_name' => array('Perez', 'string'),
'member_id' => array(123435, 'int'),
'todo_list' => array(array('limpiar la casa',
'llamar a mam', 'regar las plantas'), 'array'),
),
'struct'
);
Advierta -ue el arra, anterior est0 @ormateado como una stru%t. 1ste es el ti&o de dato m0s com:n &ara
res&uestas.
Como con las solicitudesI una res&uesta tiene -ue ser de uno de los siete ti&os de datos listados en la seccin
Ci&os de Dato.
Enviar una Respuesta de Error
2i necesita enviar al cliente un res&uesta de errorI usar0 lo siguienteG
return $this->xmlrpc->send_error_message('123', 'Dato solicitado no disponible');
1l &rimer &ar0metro es el n:mero del errorI mientras -ue el segundo &ar0metro es el mensa%e del error.
Crear sus 3ropios Cliente ; 6ervidor
Para a,udarlo a com&render todo lo tratado >asta el momentoI crearemos un &ar de controladores -ue act:an
como Cliente , 2ervidor E'6(8PC. 7sar0 el Cliente &ara enviar una solicitud al 2ervidor , reci*ir0 una res&uesta.
El Cliente
7sando un editor de te<toI crear un controlador llamado 1$lrp%B%lient.p=p. Dentro su,oI colocar este cdigo ,
guardarlo en su car&eta appli%ation%ontrollersG
<?php
class Xmlrpc_client extends CI_Controller {
function index()
{
$this->load->helper('url');
$server_url = site_url('xmlrpc_server');
$this->load->library('xmlrpc');
$this->xmlrpc->server($server_url, 80);
$this->xmlrpc->method('Greetings');
$request = array('Cmo le est yendo?');
$this->xmlrpc->request($request);
if ( ! $this->xmlrpc->send_request())
{
echo $this->xmlrpc->display_error();
Gua del Usuario de CodeIgniter Versin 2.1.3 263
}
else
{
echo '<pre>';
print_r($this->xmlrpc->display_response());
echo '</pre>';
}
}
}
?>
:ota< 1n el cdigo anterior se est0 usando un N>el&er urlN. Puede encontrar m0s in@ormacin en la &0gina
$unciones 9el&er.
El 6ervidor
7sando un editor de te<toI crear un controlador llamado 1$lrp%Bserver.p=p. Dentro su,oI colocar este cdigo ,
guardarlo en su car&eta appli%ation%ontrollersG
<?php
class Xmlrpc_server extends CI_Controller {
function index()
{
$this->load->library('xmlrpc');
$this->load->library('xmlrpcs');
$config['functions']['Greetings'] = array('function' =>
'Xmlrpc_server.process');
$this->xmlrpcs->initialize($config);
$this->xmlrpcs->serve();
}
function process($request)
{
$parameters = $request->output_parameters();
$response = array(
array(
'you_said' => $parameters['0'],
'i_respond' => 'No del todo mal.'),
'struct');
return $this->xmlrpc->send_response($response);
}
}
?>
3ru9"eloO
A>ora visite su sitio usando una 786 similar a estaG
ejemplo.com/index.php/xmlrpc_client/
Gua del Usuario de CodeIgniter Versin 2.1.3 264
A>ora de*erHa ver el mensa%e -ue envHa al servidor , la res&uesta -ue le devuelve.
1l cliente -ue cre envHa un mensa%e JN]Cmo le est0 ,endo^NK al servidorI %unto con una solicitud &ara le mtodo
NAreetingsN. 1l 2ervidor reci*e la solicitud , la ma&ea en la @uncin pro%ess+,I donde se devuelve una res&uesta.
Usar 0rra;s 0so%iativos en un 3ar'$etro de 6oli%itud
2i desea usar un arra, asociativo en los &ar0metro del mtodoI necesitar0 usar un ti&o de dato structG
$request = array(
array(
// Param 0
array(
'nombre'=>'Jose'
),
'struct'
),
array(
// Param 1
array(
'tamao'=>'L',
'forma'=>'redonda'
),
'struct'
)
);
$this->xmlrpc->request($request);
Puede recu&erar un arra, asociativo al &rocesar la solicitud en el 2ervidor.
$parameters = $request->output_parameters();
$name = $parameters['0']['nombre'];
$size = $parameters['1']['tamao'];
$size = $parameters['1']['forma'];
Re#eren%ia de >un%iones YH7@R3C
?t=is@A1$lrp%@Aserver+,
1sta*lece la 786 , el n:mero de &uerto del servidor al -ue se enviar0 una solicitudG
$this->xmlrpc->server('http://www.aveces.com/pings.php', 80);
?t=is@A1$lrp%@Ati$eout+,
1sta*lece el tiem&o de es&era Jen segundosK des&us del cual se cancelar0 la solicitudG
$this->xmlrpc->timeout(6);
Gua del Usuario de CodeIgniter Versin 2.1.3 265
?t=is@A1$lrp%@A$et=od+,
1sta*lece el mtodo -ue se solicitar0 desde el servidor E'6(8PCG
$this->xmlrpc->method('metodo');
Donde $etodo es el nom*re del mtodo.
?t=is@A1$lrp%@Are4uest+,
Coma un arra, de datos , constru,e la solicitud a enviarse al servidor E'6(8PCG
$request = array(array('Mi Photoblog', 'string'),
'http://www.su-sitio.com/photoblog/');
$this->xmlrpc->request($request);
?t=is@A1$lrp%@AsendBre4uest+,
6a @uncin de envHo de la solicitud. Devuelve el *ooleano !RUE o >076E *asado en el <ito o @racasoI &ermitiendo
usarlo en sentencias condicionales.
?t=is@A1$lrp%@AsetBde"ug+!RUE,
9a*ilita la de&uracinI mostrando una variedad de in@ormacin , datos de error :tiles durante el desarrollo.
?t=is@A1$lrp%@Adispla;Berror+,
Devuelve un mensa%e de error como una cadena si la solicitud @alla &or alguna ra"n.
echo $this->xmlrpc->display_error();
?t=is@A1$lrp%@Adispla;Bresponse+,
Devuelve la res&uesta desde el servidor remoto una ve" -ue se reci*e la solicitud. 6a res&uesta normalmente ser0
un arra, asociativo.
$this->xmlrpc->display_response();
?t=is@A1$lrp%@AsendBerrorB$essage+,
1sta @uncin le &ermite enviar un mensa%e de error desde su servidor al cliente. 1l &rimer &ar0metro es el n:mero
del errorI mientras -ue el segundo &ar0metro es el mensa%e de error.
return $this->xmlrpc->send_error_message('123',
'Datos solicitados no disponibles');
Gua del Usuario de CodeIgniter Versin 2.1.3 266
?t=is@A1$lrp%@AsendBresponse+,
6e &ermite enviar una res&uesta desde su servidor al cliente. Con este mtodo se tiene -ue enviar un arra, de
datos v0lidos.
$response = array(
array(
'flerror' => array(FALSE, 'boolean'),
'message' => "Thanks for the ping!"
)
'struct');
return $this->xmlrpc->send_response($response);
!ipos de Fato
De acuerdo a la es&eci@icacin E'6(8PC >a, siete ti&os de valores -ue se &ueden enviar mediante E'6(8PCG
int o i#
*oolean
string
dou*le
dateCime.iso8601
*ase6#
struct Jcontiene arra, de valoresK
arra, Jcontiene arra, de valoresK
Gua del Usuario de CodeIgniter Versin 2.1.3 267
Clase dip
6a Clase dip de CodeIgniter le &ermite crear arc>ivos Fi&. 6os arc>ivos se &uede descargar a su escritorio o
guardarlos en un directorio.
Ini%iali8ar la Clase
Como la ma,orHa de las clases en CodeIgniterI la clase dip se iniciali"a en su controlador usando la @uncin ?t=is@
Aload@Ali"rar;G
$this->load->library('zip');
7na ve" cargadoI el o*%eto de la *i*lioteca dip estar0 dis&oni*le usandoG ?t=is@A8ip.
EDe$plo de Uso
1ste e%em&lo muestra como com&rimir un arc>ivoI guardarlo en una car&eta de su servidor , descargarlo a su
escritorio.
$name = 'mis_datos.txt';
$data = 'Una cadena de info';
$this->zip->add_data($name, $data);
// Escribe el archivo zip a una carpeta en el servidor. Llmelo "mi_backup.zip"
$this->zip->archive('/ruta/al/directorio/mi_backup.zip');
// Descarga el archivo a su escritorio. Llmelo "mi_backup.zip"
$this->zip->download('mi_backup.zip');
Re#eren%ia de >un%iones
?t=is@A8ip@AaddBdata+,
6e &ermite agregar datos al arc>ivo Fi&. 1l &rimer &ar0metro tiene -ue contener el nom*re -ue -uisiera darle al
arc>ivo , el segundo &ar0metro tiene -ue contener los datos en @orma de cadenaG
$name = 'mi_bio.txt';
$data = 'Nac en un ascensor...';
$this->zip->add_data($name, $data);
2e le &ermite varias llamadas a esta @uncin con el @in de a+adir varios arc>ivos a su arc>ivo com&rimido. 1%em&loG
$name = 'mis_datos1.txt';
$data = 'Una cadena de datos';
$this->zip->add_data($name, $data);
$name = 'mis_datos2.txt';
$data = 'Otra cadena de datos';
$this->zip->add_data($name, $data);
Gua del Usuario de CodeIgniter Versin 2.1.3 268
) &uede &asar varios arc>ivos usando un arra,G
$data = array(
'mis_datos1.txt' => 'Una cadena de datos',
'mis_datos2.txt' => 'Otra cadena de datos'
);
$this->zip->add_data($data);
$this->zip->download('mi_backup.zip');
2i -uisiera organi"ar sus datos com&rimidos en su*car&etasI incluir la ruta como &arte del arc>ivoG
$name = 'personal)mi_bio.txt';
$data = 'Nac en un ascensor...';
$this->zip->add_data($name, $data);
1l e%em&lo anterior u*icar0 $iB"io.t1t dentro de la car&eta llamada personal.
?t=is@A8ip@AaddBdir+,
6e &ermite agregar un directorio. 7sualmente esta @uncin es innecesaria ,a -ue &uede u*icar sus datos en
car&etas al usar ?t=is@A8ip@AaddBdata+,I &ero si -uisiera crear una car&eta vacHa &uede >acerlo. 1%em&loG
$this->zip->add_dir('mi_carpeta'); // Crea una carpeta llamada "mi_carpeta"
?t=is@A8ip@AreadB#ile+,
6e &ermite com&rimir un arc>ivo -ue ,a e<iste en alguna &arte de su servidor. 2uministre la ruta al arc>ivo , la
clase Fi& -ue leer0 , agregar0 el arc>ivoG
$path = '/ruta/a/la/foto.jpg';
$this->zip->read_file($path);
// Descarga el archivo a su escritorio. Llmelo "mi_backup.zip"
$this->zip->download('mi_backup.zip');
2i -uisiera -ue el arc>ivo Fi& mantenga la estructura de directorios del arc>ivo en lI &ase !RUE J*ooleanoK en el
segundo &ar0metro. 1%em&loG
$path = '/ruta/a/la/foto.jpg';
$this->zip->read_file($path, TRUE);
// Descarga el archivo a su escritorio. Llmelo "mi_backup.zip"
$this->zip->download('mi_backup.zip');
1n el e%em&lo anteriorI #oto.Dpg se u*icar0 dentro de tres car&etasG rutaala
Gua del Usuario de CodeIgniter Versin 2.1.3 269
?t=is@A8ip@AreadBdir+,
6e &ermite com&rimir una car&eta J, sus com&onentesK -ue ,a e<isten en alguna &arte del servidor. 2uministre la
ruta de arc>ivo al directorio , la clase "i& -ue recursivamente lo leer0 , recrear0 como arc>ivo Fi&. Codos los
arc>ivos contenidos dentro de la ruta suministrada se codi@icar0nI asH como cual-uier su*car&eta contenida dentro
su,o. 1%em&loG
$path = '/ruta/a/su/directorio/';
$this->zip->read_dir($path);
// Descarga el archivo a su escritorio. Llmelo "mi_backup.zip"
$this->zip->download('mi_backup.zip');
Por de@ectoI el arc>ivo Fi& u*icar0 todos los directorios listados en el &rimer &ar0metro dentro del "i&. 2i -uiere
-ue el 0r*ol -ue &recede a la car&eta destino se ignoreI &uede &asar >076E J*ooleanoK en el segundo &ar0metro.
1%em&loG
$path = '/ruta/a/su/directorio/';
$this->zip->read_dir($path, FALSE);
1sto crear0 un FIP con la car&eta dire%torio dentroI luego todas las su*car&etas almacenadas correctamente
dentro de ellaI &ero no incluir0 las car&etas rutaasu.
?t=is@A8ip@Aar%=ive+,
1scri*e al directorio de su servidor un arc>ivo codi@icado en Fi&. 1nvHa una ruta v0lida del servidor terminando en el
nom*re del arc>ivo. Aseg:rese -ue el directorio es escri*i*le Jusualmente 666 o 777 est0 *ienK. 1%em&loG
$this->zip->archive('/ruta/a/la/carpeta/mi_archivo.zip');
// Crea un archivo llamado mi_archivo.zip
?t=is@A8ip@AdoCnload+,
Provoca -ue el arc>ivo Fi& sea descargado de su servidor. A la @uncin de*erHa &as0rsele el nom*re -ue -uisiera
-ue el arc>ivo Fi& tuviera. 1%em&loG
$this->zip->download('algun_nombre.zip');
// El archivo se llamar "algun_nombre.zip"
:ota< 3o mostrar ning:n dato en el controlador en -ue llamada esta @uncinI ,a -ue envHa varios enca*e"ados
de servidor -ue causan la descarga ocurra , el arc>ivo sea tratado como *inario.
?t=is@A8ip@AgetB8ip+,
Devuelve los datos del arc>ivo com&rimido con Fi&. 1n generalI usted no necesitar0 esta @uncin a menos -ue
-uiera >acer algo :nico con los datos. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 270
$name = 'mi_bio.txt';
$data = 'Nac en un ascensor...';
$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();
?t=is@A8ip@A%learBdata+,
6a clase dip cac>ea sus datos "i& &ara -ue no se necesite recom&ilar el arc>ivo Fi& &ara cada @uncin -ue use. 2in
em*argoI si necesita crear varios Fi&sI cada uno con datos di@erentesI &uede *orrar el cac> entre llamadas.
1%em&loG
$name = 'mi_bio.txt';
$data = 'Nac en un ascensor...';
$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();
%tis-3#ip-3clear_data&'5
$name = 'foto.jpg';
$this->zip->read_file("/ruta/a/foto.jpg"); // Lee el contenido del archivo
$this->zip->download('mis_fotos.zip');
Gua del Usuario de CodeIgniter Versin 2.1.3 271
Friver de 0l$a%ena$iento en Ca%=9
CodeIgniter cuenta con =ra&&ers &ara las @ormas m0s &o&ulares de cac>s din0micos , r0&idos. CodosI e<ce&to el
cac> *asados en arc>ivosI necesitan re-uisitos de servidor es&ecH@icos. 2e lan"ar0 una 1<ce&cin $atal si no se
cum&len los re-uisitos del servidor.
EDe$plo de Uso
1l e%em&lo siguiente cargar0 el driver de cac> de 03C ,I si no se encuentra dis&oni*le en el entorno de
alo%amientoI recurrir0 al cac> *asado en arc>ivo.
$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
if ( ! $foo = $this->cache->get('foo'))
{
echo 'Guardando en el cach!<br />';
$foo = 'foobarbaz!';
// Guardar en el cache por 5 minutos
$this->cache->save('foo', $foo, 300);
}
echo $foo;
Re#eren%ia de >un%iones
isBsupported+driverKLstringLM,
1sta @uncin se activa autom0tivamente cuando se accede a los drivers mediante ?t=is@A%a%=e@Aget+,. 2in
em*argoI si se usa un driver individualI llame a esta @uncin &ara estar seguro -ue el entorno de alo%amiento
so&orta este driver.
if ($this->cache->apc->is_supported())
{
if ($data = $this->cache->apc->get('my_cache'))
{
// hacer cosas.
}
}
get+idKLstringLM,
1sta @uncin intentar0 o*tener un Htem desde el cac>. 2i el Htem no e<isteI la @uncin devolver0 >076E.
$foo = $this->cache->get('tem_en_cach');
save+idKLstringLMJ dataKL$i1edLMJ ttlKLintLM,
1sta @uncin guardar0 un Htem en el cac>. 2i la o&eracin @allaI la @uncin devolver0 >076E. 1l tercer &ar0metro
o&cional JVCime Co 6iveWK se esta*lece &or de@ecto a 60 segundos.
Gua del Usuario de CodeIgniter Versin 2.1.3 272
$this->cache->save('cache_item_id', 'datos_para_guardar');
delete+idKLstringLM,
1sta @uncin *orrar0 un Htem es&ecH@ico del cac>. 2i la o&eracin @allaI la @uncin devolver0 >076E.
$this->cache->delete('cache_item_id');
%lean+,
1sta @uncin li$piar' todo el cac>. 2i la o&eracin @allaI la @uncin devolver0 >076E.
$this->cache->clean();
%a%=eBin#o+,
1sta @uncin devolver0 in@ormacin del cac> entero.
var_dump($this->cache->cache_info());
getB$etadata+idKLstringLM,
1sta @uncin devolver0 in@ormacin detallada de un Htem es&ecH@ico en el cac>.
var_dump($this->cache->get_metadata('tem_en_cach'));
Frivers
Ca%=9 0lternativo de 3.3 +03C,
Codas las @unciones mencionadas anteriormente se &ueden acceder sin &asar un ada&tador es&ecH@ico al cargador
del driverI de la siguiente maneraG
$this->load->driver('cache');
$this->cache->apc->save('foo', 'bar', 10);
Para m0s in@ormacin acerca de APCI &or @avor ver http://php.net/apc
Ca%=9 "asado en ar%=ivos
A di@erencia del almacenamiento en cac> de la Clase GutputI el driver del cac> *asado en arc>ivos &ermite -ue
se almacenen en cac> &orciones de arc>ivos de vistas. 7se esto con cuidado , aseg:rese medir el rendimiento de
su a&licacinI &ara determinar el &unto en -ue las o&eraciones 1O2 al disco neutralicen el *ene@icio o*tenido &or el
cac>.
Codas las @unciones mencionadas anteriormente se &ueden acceder sin &asar un ada&tador es&ecH@ico al cargador
del driverI de la siguiente maneraG
Gua del Usuario de CodeIgniter Versin 2.1.3 273
$this->load->driver('cache');
$this->cache->file->save('foo', 'bar', 10);
Ca%=9 He$%a%=ed
2e &ueden es&eci@icar varios servidores de 'emcac>ed en el arc>ivo de con@iguracin $e$%a%=ed.p=pI u*icado
en el directorio appli%ation%on#ig.
Codas las @unciones mencionadas anteriormente se &ueden acceder sin &asar un ada&tador es&ecH@ico al cargador
del driverI de la siguiente maneraG
$this->load->driver('cache');
$this->cache->memcached->save('foo', 'bar', 10);
Para m0s in@ormacin acerca de 'emcac>edI &or @avor ver http://php.net/memcached
Ca%=9 #i%ti%io
2e trata de un *ac;end de cac> -ue siem&re Y@altar0Y. 3o almacena datosI &ero le &ermite mantener el cdigo del
almacenamiento en cac> en entornos -ue no so&ortan el cac> -ue 7d eligi.
Gua del Usuario de CodeIgniter Versin 2.1.3 274
Re#eren%ia de .elpers
Gua del Usuario de CodeIgniter Versin 2.1.3 275
.elper 0rra;
1l arc>ivo del 9el&er Arra, contiene @unciones -ue lo a,udan a tra*a%ar con arra,s.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('array');
1st0n dis&oni*les las siguientes @uncionesG
ele$ent+,
6e &ermite e<traer un elemento desde un arra,. 6a @uncin &rue*a si el Hndice del arra, est0 esta*lecido , si tiene
valor. 2i el valor e<iste se devuelve. 2i el valor no e<isteI devuelve >076EI o lo -ue >a,a es&eci@icado como valor
&or de@ecto en el tercer &ar0metro. 1%em&loG
$array = array('color' => 'red', 'shape' => 'round', 'size' => '');
// Devuelve "red"
echo element('color', $array);
// Devuelve NULL
echo element('size', $array, NULL);
rando$Bele$ent+,
Coma como entrada un arra, , devuelve un elemento su,o al a"ar. 1%em&lo de usoG
$quotes = array(
"Me parece que cuanto trabajo ms duro, ms suerte parezco tener.
- Thomas Jefferson",
"No te quedes en la cama, a menos que puedas hacer dinero en ella.
- George Burns",
"No perdimos el juego, simplemente nos quedamos sin tiempo.
- Vince Lombardi",
"Si todo parece bajo control, usted no va lo suficientemente rpido.
- Mario Andretti",
"La realidad es simplemente una ilusin, aunque una muy persistente.
- Albert Einstein",
"La suerte favorece a la mente preparada.
- Louis Pasteur",
"Hay algo mal que no est bien.
- Ricardo Bravo"
);
echo random_element($quotes);
ele$ents+,
6e &ermite e<traer una cantidad de elementos desde un arra,. 6a @uncin &rue*a si cada uno de los Hndices del
arra, est0 esta*lecido. 2i un Hndice no e<iste se esta*lece a >076EI o lo -ue sea -ue se >a,a es&eci@icado como
valor &or de@ecto a travs del tercer &ar0metro. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 276
$array = array(
'color' => 'red',
'shape' => 'round',
'radius' => '10',
'diameter' => '20'
);
$my_shape = elements(array('color', 'shape', 'height'), $array);
6o anterior devolver0 el siguiente arra,G
array(
'color' => 'red',
'shape' => 'round',
'height' => FALSE
);
Puede esta*lecer el tercer &ar0metro a cual-uier valor &or de@ecto -ue -uieraG
$my_shape = elements(array('color', 'shape', 'height'), $array, NULL);
6o anterior devolver0 el siguiente arra,G
array(
'color' => 'red',
'shape' => 'round',
'height' => NULL
);
1sto es :til al enviar el arra, ?B3G6! a uno de sus 'odelos. 1sto im&ide -ue los usuarios envHen datos 3G6!
adicionales &ara ingresarse en las ta*lasG
$this->load->model('post_model');
$this->post_model->update(elements(array('id', 'title', 'content'), $_POST));
1sto asegura -ue solamente los cam&os idI title , content se enviar0n &ara actuali"arse.
Gua del Usuario de CodeIgniter Versin 2.1.3 277
.elper C03!C.0
1l arc>ivo del 9el&er CAPCC9A contiene @unciones -ue lo a,udan en la creacin de im0genes CAPCC9A.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('captcha');
1st0n dis&oni*les las siguientes @uncionesG
%reateB%apt%=a+?data,
Coma como entrada un arra, de in@ormacin &ara generar el CAPCC9A , crea la imagen &ara sus es&eci@icacionesI
devolviendo un arra, asociativo de datos acerca de la imagen.
[array]
(
'image' => IMAGE TAG
'time' => TIMESTAMP (in microtime)
'word' => CAPTCHA WORD
)
i$age es la eti-ueta de imagen realG
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
ti$e es la marca de tiem&o usada como nom*re de la imagen sin la e<tensin del arc>ivo. 2er0 un n:mero como
esteG 11.61/144.#//
Cord es la &ala*ra -ue a&arece en la imagen ca&tc>aI -ue si no se la suministra a la @uncinI ser0 una cadena
aleatoria.
Usar el .elper C03!C.0
7na ve" cargadoI &uede generar un ca&tc>a asHG
$vals = array(
'word' => 'Random word',
'img_path' => './captcha/',
'img_url' => 'http://example.com/captcha/',
'font_path' => './path/to/fonts/texb.ttf',
'img_width' => '150',
'img_height' => 30,
'expiration' => 7200
);
$cap = create_captcha($vals);
echo $cap['image'];
Gua del Usuario de CodeIgniter Versin 2.1.3 278
6a @uncin ca&tc>a necesita la *i*lioteca de imagen AD.
2olamente son o*ligatorios i$gBpat= e i$gBurl.
2i no se suministra N=ordNI la @uncin generar0 una cadena A2CII aleatoria. PodrHa ad%untar su &ro&ia
*i*lioteca de &ala*ras de la -ue di*u%ar aleatoriamente.
2i no se es&eci@ica una ruta a una @uente Crue C,&eI se usar0 la es&antosa @uente nativa de AD.
6a car&eta Nca&tc>aN tiene -ue ser escri*i*le J666 o 777K
e1piration Jen segundosK indica cuanto tiem&o una imagen &ermanecer0 en la car&eta ca&tc>a antes -ue
se la *orre. 1l valor &or de@ecto es dos >oras.
0gregar a una &ase de Fatos
Para -ue la @uncin ca&tc>a evite -ue alguien &ueda enviarI necesitar0 agregar la in@ormacin devuelta &or la
@uncin %reateB%apt%=a+, a la *ase de datos. 6uegoI cuando el usuario envHa los datos del @ormularioI necesitar0
veri@icar -ue los datos e<isten en la *ase de datos , -ue no e<&iraron.
1ste es el &rototi&o de la ta*laG
CREATE TABLE captcha (
captcha_id bigint(13) unsigned NOT NULL auto_increment,
captcha_time int(10) unsigned NOT NULL,
ip_address varchar(16) default '0' NOT NULL,
word varchar(20) NOT NULL,
PRIMARY KEY `captcha_id` (`captcha_id`),
KEY `word` (`word`)
);
1ste es un e%em&lo de uso con una *ase de datos. 1n la &0gina donde se mostrar0 el CAPCC9AI >a*r0 algo como
estoG
$this->load->helper('captcha');
$vals = array(
'img_path' => './captcha/',
'img_url' => 'http://example.com/captcha/'
);
$cap = create_captcha($vals);
$data = array(
'captcha_time' => $cap['time'],
'ip_address' => $this->input->ip_address(),
'word' => $cap['word']
);
$query = $this->db->insert_string('captcha', $data);
$this->db->query($query);
echo 'Submit the word you see below:';
echo $cap['image'];
echo '<input type="text" name="captcha" value="" />';
6uegoI en la &0gina -ue ace&ta el envHoI -ue tendr0 algo como estoG
// Primero, borrar las captchas viejas
$expiration = time()-7200; // Lmite de dos horas
$this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
// Luego, ver si existe un captcha:
Gua del Usuario de CodeIgniter Versin 2.1.3 279
$sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ?
AND captcha_time > ?";
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();
if ($row->count == 0)
{
echo "Tiene que suministrar la palabra que aparece en la imagen";
}
Gua del Usuario de CodeIgniter Versin 2.1.3 280
.elper CooIie
1l arc>ivo del 9el&er Coo;ie contiene @unciones -ue lo a,udan a tra*a%ar con coo;ies.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('cookie');
1st0n dis&oni*les las siguientes @uncionesG
setB%ooIie+,
1sta @uncin le da al arc>ivo de vista una sinta<is amiga*le &ara con@igurar las coo;ies del navegador. 8e@erirse a la
Clase In&ut &ara o*tener un descri&cin de uso ,a -ue esta @uncin es un alias &ara ?t=is@Ainput@
AsetB%ooIie+,.
getB%ooIie+,
1sta @uncin le da al arc>ivo de vista una sinta<is amiga*le &ara o*tener las coo;ies del navegador. 8e@erirse a la
Clase In&ut &ara o*tener un descri&cin de uso ,a -ue esta @uncin es un alias &ara ?t=is@Ainput@A%ooIie+,.
deleteB%ooIie+,
6e &ermite *orrar una coo;ie. A menos -ue >a,a esta*lecido una ruta &ersonali"ada u otros valoresI slo se
necesita el nom*re de la coo;ieG
delete_cookie("name");
1sta @uncin es idntica a setB%ooIie+,I salvo -ue no tiene los &ar0metros de valor , caducidad. Puede enviar un
arra, de valores en el &rimer &ar0metro o &uede esta*lecer &ar0metros discretos.
delete_cookie($name, $domain, $path, $prefix);
Gua del Usuario de CodeIgniter Versin 2.1.3 281
.elper Fate
1l arc>ivo del 9el&er Date contiene @unciones -ue lo a,udan a tra*a%ar con @ec>as.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('date');
1st0n dis&oni*les las siguientes @uncionesG
noC+,
Devuelve la >ora actual como una marca de tiem&o de 7ni< Jsea la >ora local de su servidor como la A'CK *asada
en el valor Nti$e re#eren%eN del arc>ivo de con@iguracin. 2i no tiene la intencin de esta*lecer su tiem&o de
re@erencia maestro a A'C Jlo -ue normalmente >arHa si e%ecuta un sitio -ue le &ermite a cada usuario esta*lecer la
con@iguracin de su &ro&ia "ona >orariaKI no >a, *ene@icio de usar esta @uncin res&ecto de la @uncin ti$e+, de
P9P.
$date+,
1sta @uncin es idntica a la date+, de P9PI salvo -ue le &ermite usar cdigos de @ec>a de estilo ',2L6I donde
cada letra de cdigo est0 &recedida &or un signo de &orcenta%eG dR dm dd etc.
1l *ene@icio de >acer las @ec>as de esta @orma es -ue no >a, -ue &reocu&arse de esca&ar los caracteres -ue no
son cdigos de @ec>aI como tendrHa -ue >acerlo normalmente con la @uncin date+,. 1%em&loG
$datestring = "Year: %Y Month: %m Day: %d - %h:%i %a";
$time = time();
echo mdate($datestring, $time);
2i no se inclu,e una marca de tiem&o en el segundo &ar0metroI se usar0 la @ec>aO>ora actual.
standardBdate+,
6e &ermite generar una cadena de @ec>a en uno de varios @ormatos estandari"ados. 1%em&loG
$format = 'DATE_RFC822';
$time = time();
echo standard_date($format, $time);
1l &rimer &ar0metro tiene -ue contener el @ormato , el segundo la @ec>a como marca de tiem&o de 7ni<.
$ormatos 2o&ortadosG
Gua del Usuario de CodeIgniter Versin 2.1.3 282
Constante Fes%rip%in EDe$plo
F0!EB0!GH Atom /004(08(14C16G1G0M0000
F0!EBCGGXIE Coo;ies 9CCP DomI 1# Ago /004 16G1G0 7CC
F0!EBI6GV`01 I2)(8601 /004(08(1#C16G1G0M00G00
F0!EBR>CV22 8$C 8// DomI 1# Ago 04 16G1G0 7CC
F0!EBR>CV)0 8$C 840 DomingoI 1#(Ago(04 16G1G0 7CC
F0!EBR>C103` 8$C 106 DomingoI 1#(Ago(04 16G1G0 7CC
F0!EBR>C1123 8$C 11/ DomI 1# Ago /004 16G1G0 7CC
F0!EBR>C2V22 8$C /8// DomI 1# Ago /004 16G1G0 M0000
F0!EBR66 822 DomI 1# Ago /004 16G1G0 7CC
F0!EBW3C Consorcio ?orld ?ide ?e* /004(08(1#C16G1G0M0000
lo%alBtoBg$t+,
Coma como entrada una marca de tiem&o de 7ni< , la devuelve como A'C. 1%em&loG
$now = time();
$gmt = local_to_gmt($now);
g$tBtoBlo%al+,
Coma como entrada una marca de tiem&o de 7ni< J-ue >ace re@erencia a la >ora A'CKI , la convierte a una marca
de tiem&o locali"ada *asada en "ona >oraria , el >orario de verano enviados. 1%em&loG
$timestamp = '1140153693';
$timezone = 'UM8';
$daylight_saving = TRUE;
echo gmt_to_local($timestamp, $timezone, $daylight_saving);
:ota< Para ver la lista de "onas >orariasI va,a al @inal de este ca&Htulo.
$;s4lBtoBuni1+,
Coma una marca de tiem&o de ',2L6 como entrada , la devuelve como de 7ni<. 1%em&loG
$mysql = '20061124092345';
$unix = mysql_to_unix($mysql);
uni1BtoB=u$an+,
Coma una marca de tiem&o de 7ni< como entrada , devuelve un @ormato >umanamente legi*le con este &rototi&oG
YYYY-MM-DD HH:MM:SS AM/PM
Gua del Usuario de CodeIgniter Versin 2.1.3 283
1s :til cuando se necesita mostrar una @ec>a en un cam&o de @ormulario &ara enviarse.
1sta >ora se &uede @ormatear con o sin segundosI , &uede estar en @ormato 1uro&eo o de 1177. 2i se envHa
solamente la marca de tiem&oI devolver0 la >ora sin segundos @ormateados &ara 1177. 1%em&losG
$now = time();
echo unix_to_human($now); // Hora de EEUU sin segundos
echo unix_to_human($now, TRUE, 'us'); // Hora de EEUU con segundos
echo unix_to_human($now, TRUE, 'eu'); // Hora de Europea con segundos
=u$anBtoBuni1+,
6o o&uesto a la @uncin anterior. Coma una >ora N>umanaN como entrada , la devuelve como 7ni<. 1sta @uncin es
:til si ace&ta @ec>as @ormateadas como N>umanasN enviadas desde un @ormulario. Devuelve >076E J*ooleanoK si la
cadena de la @ec>a &asada no est0 @ormateada como se indica m0s arri*a. 1%em&loG
$now = time();
$human = unix_to_human($now);
$unix = human_to_unix($human);
ti$espan+,
$ormatea una marca de tiem&o de 7ni< &ara -ue &are"ca similar a estoG
1 ao, 10 meses, 2 semanas, 5 das, 10 horas, 16 minutos
1l &rimer &ar0metro tiene -ue contener una marca de tiem&o de 7ni<. 1l segundo &ar0metro tiene -ue contener
una marca de tiem&o ma,or -ue la &rimera. 2i el segundo &ar0metro est0 vacHoI se usar0 la >ora actual. 1l
&ro&sito m0s com:n &ara esta @uncin es mostrar cuanto tiem&o &as desde alg:n momento en el &asado >asta
a>ora. 1%em&loG
$post_date = '1079621429';
$now = time();
echo timespan($post_date, $now);
:ota< 1l te<to contenido en el men: est0 en el siguiente arc>ivo de idiomaG
languageEsuBidio$aAdateBlang.p=p.
da;sBinB$ont=+,
Devuelve la cantidad de dHas en un dado mesOa+o. Ciene en cuenta los a+os *isiestos. 1%em&loG
echo days_in_month(06, 2005);
2i el segundo &ar0metro est0 vacHoI se usar0 el a+o actual.
Gua del Usuario de CodeIgniter Versin 2.1.3 284
ti$e8ones+,
Coma una re@erencia de "ona >oraria como entrada J&ara la lista de "onas >orarias v0lidas ver m0s a*a%o
N8e@erencia de Fonas 9orariasNK , devuelve el des@asa%e de >oras res&ecto de 7CC.
echo timezones('UM5');
1sta @uncin es :til al usarse con ti$e8oneB$enu+,.
ti$e8oneB$enu+,
Aenera un men: des&lega*le de "onas >orarias como esteG
1ste men: es :til &ara sitios donde se les &ermite a los usuarios esta*lecer el valor de su "ona >oraria local.
1l &rimer &ar0metro le &ermite esta*lecer el estado &or de@ecto del men:. Por e%em&loI &ara esta*lecer &or de@ecto
la >ora del PacH@ico de*er0 >acer estoG
echo timezone_menu('UM8');
Por @avor lea m0s a*a%o la re@erencia de "onas >orarias &ara conocer los valores de este men:.
1l segundo &ar0metro le &ermite esta*lecer un nom*re de clase C22 &ara el men:.
:ota< 1l te<to contenido en el men: est0 en el siguiente arc>ivo de idiomaG
languageEsuBidio$aAdateBlang.p=p.
Re#eren%ia de donas .orarias
6a siguiente ta*la indica cada "ona >oraria , su u*icacin.
dona
.oraria
U"i%a%in
7'1/ J7CC ( 1/G00K 1nit=eto;I h=a%alien
7'11 J7CC ( 11G00K 3omeI Isla 'id=a,I 2amoa
7'10 J7CC ( 10G00K 9a=aii
7'. J7CC ( .G00K Alas;a
7'8 J7CC ( 8G00K 9ora del PacH@ico
7'7 J7CC ( 7G00K 9ora de la 'onta+a
7'6 J7CC ( 6G00K 9ora del CentroI Ciudad de '<ico
7'4 J7CC ( 4G00K 9ora del 1steI Bogot0I 6imaI Luito
7'# J7CC ( #G00K 9ora del Atl0nticoI CaracasI 6a Pa"
7'/4 J7CC ( G0K 3ueva@oundland
7' J7CC ( G00K BrasilI Buenos AiresI Aeorgeto=nI Islas 'alvinas
7'/ J7CC ( /G00K Atl0ntico 'edioI Isla AscensinI 2anta 9elena
Gua del Usuario de CodeIgniter Versin 2.1.3 285
dona
.oraria
U"i%a%in
7'1 J7CC ( 1G00K Islas A"oresI Islas Ca*o !erde
7CC J7CCK Casa*lancaI Du*linI 1din*urgoI 6ondresI 6is*oaI 'onrovia
7P1 J7CC M 1G00K BerlHnI BrusselasI Co&en>agenI 'adridI ParHsI 8oma
7P/ J7CC M /G00K haliningradoI 2ud0@ricaI !arsovia
7P J7CC M G00K BagdadI 8i>adI 'osc:I 3airo*i
7P/4 J7CC M G0K Ce>er0n
7P# J7CC M #G00K Adu D>a*iI Ba;uI 'uscatI C*ilisi
7P4 J7CC M #G0K ha*ul
7P4 J7CC M 4G00K Islama*adI harac>iI Cas>;ent
7P#4 J7CC M 4G0K Bom*a,I CalcuttaI 'adr0sI 3ueva Del>i
7P6 J7CC M 6G00K Almat,I Colom*aI D>a;a
7P7 J7CC M 7G00K Bang;o;I 9anoiI Da;arta
7P8 J7CC M 8G00K Bei%ingI 9ong hongI Pert>I 2inga&urI Cai&ei
7P. J7CC M .G00K )sa;aI 2a&&oroI 2e:lI Co;ioI Ra;uts;
7P84 J7CC M .G0K AdelaidaI Dar=in
7P10 J7CC M 10G00K 'el*ourneI Pa&ua 3ueva AuineaI 2,dne,I !ladivosto;
7P11 J7CC M 11G00K 'agadanI 3ueva CaledoniaI Islas 2olomon
7P1/ J7CC M 1/G00K Auc;landI ?ellingtonI $i%iI Isla 'ars>all
Gua del Usuario de CodeIgniter Versin 2.1.3 286
.elper Fire%tor;
1l arc>ivo del 9el&er Director, contiene @unciones -ue lo a,udan a tra*a%ar con directorios.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('directory');
1st0n dis&oni*les las siguientes @uncionesG
dire%tor;B$ap+Ldire%torio #uenteL,
1sta @uncin lee la ruta del directorio es&eci@icado en el &rimer &ar0metro , arma un arra, con l , todo su
contenido. 1%em&loG
$map = directory_map('./midirectorio/');
:ota< 6as rutas son casi siem&re relativas al arc>ivo inde1.p=p &rinci&al.
6as su*car&etas contenidas dentro del directorio tam*in se ma&ear0n. 2i desea controlar la &ro@undidad de la
recursinI &uede >acer eso usando el segundo &ar0metro Jun enteroK. 7na &ro@undidad de 1 ma&ear0 solamente
el directorio de nivel su&eriorG
$map = directory_map('./midirectorio/', 1);
Por de@ectoI los arc>ivos ocultos no se incluir0n en el arra, devuelto. Para anular este com&ortamientoI &uede
esta*lecer un tercer &ar0metro a !RUE J*ooleanoKG
$map = directory_map('./midirectorio/', FALSE, TRUE);
Cada nom*re de car&eta ser0 un Hndice del arra,I mientras -ue sus arc>ivos contenidos se inde<ar0n
numricamente. 1ste es un e%em&lo de un arra, tH&icoG
Array
(
[libraries] => Array
(
[0] => benchmark.html
[1] => config.html
[database] => Array
(
[0] => active_record.html
[1] => binds.html
[2] => configuration.html
[3] => connecting.html
[4] => examples.html
[5] => fields.html
[6] => index.html
[7] => queries.html
Gua del Usuario de CodeIgniter Versin 2.1.3 287
)
[2] => email.html
[3] => file_uploading.html
[4] => image_lib.html
[5] => input.html
[6] => language.html
[7] => loader.html
[8] => pagination.html
[9] => uri.html
)
Gua del Usuario de CodeIgniter Versin 2.1.3 288
.elper FoCnload
1l 9el&er Do=nload le &ermite descargar datos a su escritorio.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('download');
1st0n dis&oni*les las siguientes @uncionesG
#or%eBdoCnload+Lno$"reBdeBar%=ivoLJ LdatosL,
Aenera enca*e"ados de servidor -ue @uer"an a -ue los datos se descarguen a su escritorio. Qtil con descargas de
arc>ivos. 1l &rimer &ar0metro es el nom*re -ue -uiere darle al arc>ivo descargadoI el segundo &ar0metro son los
datos del arc>ivo. 1%em&loG
$data = 'Esto es un texto cualquiera';
$name = 'mitexto.txt';
force_download($name, $data);
2i -uiere descargar un arc>ivo e<istente desde el servidorI necesitar0 leer el arc>ivo a una cadenaG
$data = file_get_contents("/path/to/photo.jpg"); // Lee el contenido del archivo
$name = 'myphoto.jpg';
force_download($name, $data);
Gua del Usuario de CodeIgniter Versin 2.1.3 289
.elper E$ail
1l 9el&er 1mail &rovee algunas @unciones -ue lo a,udan a tra*a%ar con emails. Para una solucin de email m0s
ro*ustaI vea la Clase 1mail de CodeIgniter.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('email');
1st0n dis&oni*les las siguientes @uncionesG
validBe$ail+Le$ailL,
!eri@ica si un email es un email correctamente @ormateado. Advierta -ue en realidad no &rue*a -ue el email se
va,a a reci*irI solamente -ue la direccin est0 correctamente @ormada.
Devuelve !RUE>076E
$this->load->helper('email');
if (valid_email('email@somesite.com'))
{
echo 'el email es vlido';
}
else
{
echo 'el email no es vlido';
}
sendBe$ail+LdestinatarioLJ LasuntoLJ L$ensaDeL,U
1nvHa un email usando la @uncin $ail+, nativa de P9P. Para una solucin de email m0s ro*ustaI vea la Clase 1mail
de CodeIgniter.
Gua del Usuario de CodeIgniter Versin 2.1.3 290
.elper >ile
1l arc>ivo del 9el&er $ile contiene @unciones -ue lo a,udan a tra*a%ar con arc>ivos.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('file');
1st0n dis&oni*les las siguientes @uncionesG
readB#ile+LrutaL,
Devuelve los datos contenidos en el arc>ivo es&eci@icado en la ruta. 1%em&loG
$string = read_file('./ruta/al/archivo.php');
6a ruta &uede ser relativa o a*soluta. Devuelve >076E J*ooleanoK en caso de @allar.
:ota< 6a ruta es relativa a su arc>ivo inde1.p=p &rinci&al de su sitioI :G a sus arc>ivos de controladores o
vistas. CodeIgniter usa un controlador @rontalI &or lo -ue las rutas siem&re son relativas al Hndice &rinci&al del
sitio.
2i el servidor est0 e%ecutando una restriccin openB"asedir esta @uncin &uede no @uncionar si 7d est0 tratando
de acceder a un arc>ivo antes de llamar al scri&t.
CriteB#ile+LrutaLJ ?data,
1scri*e los datos al arc>ivo es&eci@icado en la ruta. 2i el arc>ivo no e<isteI la @uncin lo crear0. 1%em&loG
$data = 'Algn dato del archivo';
if ( ! write_file('./ruta/al/archivo.php', $data))
{
echo 'No se puede escribir el archivo';
}
else
{
echo 'Se escribi el archivo!';
}
)&cionalmente se &uede esta*lecer el modo de escritura mediante el tercer &ar0metroG
write_file('./ruta/al/archivo.php', $data, 'r+');
1l modo &or de@ecto es =*. Por @avor ver la AuHa del 7suario de P9P &ara o*tener las o&ciones del modo.
:ota< Para -ue esta @uncin escri*a los datos a un arc>ivo sus &ermisos de arc>ivo tiene -ue estar esta*lecidos
de la @orma -ue se &ueda escri*ir J666I 777I etc.K. 2i el arc>ivo a:n no e<isteI el directorio contenedor tiene -ue
ser escri*i*le.
Gua del Usuario de CodeIgniter Versin 2.1.3 291
:ota< 6a ruta es relativa a su arc>ivo inde1.p=p &rinci&al de su sitioI 3) a sus arc>ivos de controladores o
vistas. CodeIgniter usa un controlador @rontalI &or lo -ue las rutas siem&re son relativas al Hndice &rinci&al del
sitio.
deleteB#iles+LrutaL,
Borra C)D)2 los arc>ivos contenidos en la ruta suministrada. 1%em&loG
delete_files('./ruta/al/directorio/');
2i el segundo &ar0metro se esta*lece a !RUEI tam*in se *orrar0 cual-uier directorio contenido dentro de la ruta
suministrada. 1%em&loG
delete_files('./ruta/al/directorio/', TRUE);
:ota< 6os arc>ivos tienen -ue ser escri*i*les o ser de &ro&iedad del sistema &ara -ue se &uedan *orrar.
getB#ilena$es+Lrutaaldire%torioL,
Coma como entrada una ruta de servidor , devuelve un arra, conteniendo los nom*res de todos los arc>ivos
contenidos en l. 6a ruta de arc>ivo se &uede agregar o&cionalmente a los nom*res de arc>ivos al esta*lecer el
segundo &ar0metro como !RUE.
getBdirB#ileBin#o+Lrutaaldire%torioLJ ?topBlevelBonl; S !RUE,
6ee el directorio es&eci@icado , arma un arra, conteniendo los nom*resI tama+osI @ec>as , &ermisos de los
arc>ivos. 6as su*car&etas contenidas dentro de la ruta es&eci@icada solamente se leen si se lo @uer"a enviando el
segundo &ar0metroI ?topBlevelBonl; en >076EI ,a -ue esta &uede ser una o&eracin intensiva.
getB#ileBin#o+Lrutaalar%=ivoLJ ?#ileBin#or$ation,
Dados un arc>ivo , una rutaI devuelve el nom*reI rutaI tama+oI , @ec>a de modi@icacin. 1l segundo &ar0metro le
&ermite declarar e<&lHcitamente la in@ormacin -ue -uiere devolver. 6as o&ciones sonG nameI serverB&at>I si"eI
dateI reada*leI =rita*leI e<ecuta*leI @ile&erms. Devuelve >076E si no se encuentra el arc>ivo.
:ota< 6a o&cin N=rita*leN usa la @uncin isBCrita"le+, de P9P -ue es conocida &or tener &ro*lemas en el
servidor =e* II2. 1n su lugarI considere usar N@ile&ermsNI -ue devuelve in@ormacin de la @uncin #ileper$s+,
de P9P.
getB$i$eB";Be1tension+L#ileL,
Craduce una e<tensin de arc>ivo a un ti&o mime *asado en %on#ig$i$es.p=p. Devuelve >076E si no se &uede
determinar al ti&oI o a*rir el arc>ivo de con@iguracin mime.
$file = "somefile.png";
echo $file . ' tiene un tipo mime de ' . get_mime_by_extension($file);
Gua del Usuario de CodeIgniter Versin 2.1.3 292
:ota< 1sta no es una @orma e<acta de determinar el ti&o mime del arc>ivoI estando a-uH estrictamente &or
conveniencia. Por cuestiones de seguridadI no se de*erHa usar.
s;$"oli%Bper$issions+?per$s,
Coma &ermisos numricos Jtales como los devueltas &or #ileper$s+, , devuelve la notacin sim*lica est0ndar de
los &ermisos de arc>ivo.
echo symbolic_permissions(fileperms('./index.php')); // -rw-r--r--
o%talBper$issions+?per$s,
Coma &ermisos numricos Jtales como los devueltas &or #ileper$s+, , devuelve la notacin octal de tres
caracteres de los &ermisos de arc>ivo.
echo octal_permissions(fileperms('./index.php')); // 644
Gua del Usuario de CodeIgniter Versin 2.1.3 293
.elper >or$
1l arc>ivo del 9el&er $orm contiene @unciones -ue lo a,udan a tra*a%ar con @ormularios.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('form');
1st0n dis&oni*les las siguientes @uncionesG
#or$Bopen+,
Crea una eti-ueta de a&ertura de @ormulario con una 786 *ase %onstruida a partir de sus pre#eren%ias de
%on#igura%in. )&cionalmente se le &ermitir0 agregar atri*utos de @ormulario , cam&os de entrada ocultosI ,
siem&re se agregar0 el atri*uto a%%ept@%=arset *asado en el valor del con%unto de caracteres en su arc>ivo de
con@iguracin.
1l *ene@icio &rinci&al de usar esta eti-ueta en lugar de codi@icar su &ro&io 9C'6I es -ue le &ermite a su sitio ser
m0s &orta*le si cam*ian las 786s.
A-uH >a, un e%em&lo sim&leG
echo form_open('email/send');
1l e%em&lo anterior crearHa un @ormulario -ue a&unta a su 786 *aseI m0s el segmento de 78I NemailOsendNG
<form method="post" accept-charset="utf-8"
action="http:/example.com/index.php/email/send" />
0gregar 0tri"utos
6os atri*utos se &ueden agregar al &asar un arra, asociativo al segundo &ar0metroG
$attributes = array('class' => 'email', 'id' => 'mi_form');
echo form_open('email/send', $attributes);
1l e%em&lo anterior crearHa un @ormulario similar a estoG
<form method="post" accept-charset="utf-8"
action="http:/example.com/index.php/email/send" class="email" id="mi_form" />
0gregar Ca$pos de Entrada G%ultos
6os cam&os ocultos se &ueden agregar al &asar un arra, asociativo al tercer &ar0metroG
$hidden = array('username' => 'Jose', 'member_id' => '234');
echo form_open('email/send', '', $hidden);
Gua del Usuario de CodeIgniter Versin 2.1.3 294
1l e%em&lo anterior crearHa un @ormulario similar a estoG
<form method="post" accept-charset="utf-8"
action="http:/example.com/index.php/email/send">
<input type="hidden" name="username" value="Jose" />
<input type="hidden" name="member_id" value="234" />
#or$BopenB$ultipart+,
1sta @uncin es a*solutamente idntica a #or$Bopen+, anteriorI e<ce&to -ue agrega un atri*uto multi&art -ue es
necesario si -uisiera usar el @ormulario &ara su*ir arc>ivos.
#or$B=idden+,
6e &ermite generar cam&os de entrada ocultos. Puede &resentar una cadena NnameNONvalueN &ara crear un cam&oG
form_hidden('usuario', 'natalia_natalia');
// Producira:
<input type="hidden" name="usuario" value="natalia_natalia" />
) &uede &resentar un arra, asociativo &ara crear varios cam&osG
$data = array(
'name' => 'Natalia Natalia',
'email' => 'nn@example.com',
'url' => 'http://example.com'
);
echo form_hidden($data);
// Producira:
<input type="hidden" name="name" value="Natalia Natalia" />
<input type="hidden" name="email" value="nn@example.com" />
<input type="hidden" name="url" value="http://example.com" />
#or$Binput+,
6e &ermite generar un cam&o de entrada de te<to est0ndar. 'Hnimamente &uede &asarle el nom*re del cam&o , el
valor en el &rimer , segundo &ar0metrosG
echo form_input('usuario', 'natalia_natalia');
) &uede &asarle un arra, asociativo conteniendo cual-uier dato -ue desee -ue su @ormulario contengaG
$data = array(
'name' => 'usuario',
'id' => 'usuario',
'value' => 'natalia_natalia',
'maxlength' => '100',
'size' => '50',
'style' => 'width:50%',
Gua del Usuario de CodeIgniter Versin 2.1.3 295
);
echo form_input($data);
// Producira:
<input type="text" name="usuario" id="usuario" value="natalia_natalia"
maxlength="100" size="50" style="width:50%" />
2i -uisiera -ue su @ormulario contuviera alg:n dato adicionalI como Davascri&tI &odrHa &as0rselo en una cadena
como tercer &ar0metroG
$js = 'onClick="alguna_funcion()"';
echo form_input('usuario', 'natalia_natalia', $js);
#or$BpassCord+,
1sta @uncin es idntica en todos los as&ectos a la @uncin #or$Binput+, anterior salvo -ue &ermite generar un
ti&o N&ass=ordN.
#or$Bupload+,
1sta @uncin es idntica en todos los as&ectos a la @uncin #or$Binput+, anterior salvo -ue &ermite generar un
ti&o N@ileNI &ermitindole usarla &ara su*ir arc>ivos.
#or$Bte1tarea+,
1sta @uncin es idntica en todos los as&ectos a la @uncin #or$Binput+, anterior salvo -ue &ermite generar un
ti&o Nte<tareaN. :ota< 1n lugar de los atri*utos Nma<lengt>N , Nsi"eN del e%em&lo anteriorI de*er0 esta*lecer Nro=sN
, NcolsN.
#or$BdropdoCn+,
6e &ermite crear un cam&o de lista des&lega*le est0ndar. 1l &rimer &ar0metro contendr0 el nom*re del cam&oI el
segundo &ar0metro contendr0 un arra, asociativo de o&ciones , el tercer &ar0metro contendr0 el valor -ue desee
-ue se seleccione. Cam*in &uede &asarle un arra, de varios elementos mediante el tercer &ar0metro ,
CodeIgniter crear0 un selector m:lti&le. 1%em&loG
$opciones = array(
's' => 'Camisa S',
'm' => 'Camisa M',
'l' => 'Camisa L',
'xl'=> 'Camisa XL',
);
$camisas_en_venta = array('s', 'l');
echo form_dropdown('camisas', $opciones, 'l');
// Producira:
select name="camisas">
<option value="s">Camisa S</option>
<option value="m">Camisa M</option>
<option value="l" selected="selected">Camisa L</option>
Gua del Usuario de CodeIgniter Versin 2.1.3 296
<option value="xl">Camisa XL</option>
</select>
echo form_dropdown('camisas', $opciones, $camisas_en_venta);
// Producira:
<select name="camisas" multiple="multiple">
<option value="s" selected="selected">Camisa S</option>
<option value="m">Camisa M</option>
<option value="l" selected="selected">Camisa L</option>
<option value="xl">Camisa XL</option>
</select>
2i -uisiera -ue la a&ertura Esele%tA contuviera datos adicionalesI como un atri*uto id o Dava2cri&tI &uede &asarle
una cadena como cuarto &ar0metroG
$js = 'id="camisas" onChange="alguna_funcion();"';
echo form_dropdown('camisas', $opciones, 'large', $js);
2i el arra, &asado como ?op%iones es multidimensionalI #or$BdropdoCn+, &roducir0 un EoptgroupA con la
clave del arra, como rtulo.
#or$B$ultisele%t+,
6e &ermite crear un cam&o de seleccin m:lti&le est0ndar. 1l &rimer &ar0metro contendr0 el nom*re del cam&oI el
segundo &ar0metro contendr0 un arra, asociativo de o&cionesI , el tercer &ar0metro contendr0 el valor o valores
-ue desea -ue estn seleccionados. 1l uso de &ar0metros es idntico a usar el anterior #or$BdropdoCn+,I salvo
&or su&uesto -ue el nom*re del cam&o tendr0 -ue usar la sinta<is del arra, 3G6!I &or e%em&lo #ooKM.
#or$B#ieldset+,
6e &ermite generar los cam&os N@ieldsetNONlegendN.
echo form_fieldset('Informacin de la direccin');
echo "<p>contenido del conjunto de campos aqu</p>\n";
echo form_fieldset_close();
// Produce
<fieldset>
<legend>Informacin de la direccin</legend>
<p>contenido del conjunto de campos aqu</p>
</fieldset>
2imilar a otras @uncionesI &uede enviar un arra, asociativo en el segundo &ar0metro si &re@iere esta*lecer atri*utos
adicionales.
$attributes = array('id' => 'address_info', 'class' => 'address_info');
echo form_fieldset('Informacin de la direccin', $attributes);
echo "<p>contenido del conjunto de campos aqu</p>\n";
echo form_fieldset_close();
// Produce
<fieldset id="address_info" class="address_info">
Gua del Usuario de CodeIgniter Versin 2.1.3 297
<legend>Informacin de la direccin</legend>
<p>contenido del conjunto de campos aqu</p>
</fieldset>
#or$B#ieldsetB%lose+,
Produce una eti-ueta E#ieldsetA de cierre. 6a :nica venta%a de usar esta @uncin es -ue le &ermite &asar datos
a ellaI los -ue se agregar0n de*a%o de la eti-ueta. Por e%em&loG
$string = "</div></div>";
echo fieldset_close($string);
// Producira:
</fieldset>
</div></div>
#or$B%=e%I"o1+,
6e &ermite generar un cam&o de casilla de veri@icacin. 1%em&lo sencilloG
echo form_checkbox('newsletter', 'accept', TRUE);
// Producira:
<input type="checkbox" name="newsletter" value="accept" checked="checked" />
1l tercer &ar0metro contiene un *ooleano !RUE>076E &ara determinar si la ca%a se de*erHa marcar o no.
2imilar a las otras @unciones de @ormulario en este >el&erI tam*in &uede &asarle a la @uncin un arra, de
atri*utosG
$data = array(
'name' => 'newsletter',
'id' => 'newsletter',
'value' => 'accept',
'checked' => TRUE,
'style' => 'margin:10px',
);
echo form_checkbox($data);
// Producira:
input type="checkbox" name="newsletter" id="newsletter" value="accept"
checked="checked" style="margin:10px" />
Como con otras @uncionesI si -uisiera -ue la eti-ueta contenga datos adicionalesI como Dava2cri&tI &uede &asarle
una cadena como cuarto &ar0metroG
$js = 'onClick="alguna_funcion()"';
echo form_checkbox('newsletter', 'accept', TRUE, $js)
Gua del Usuario de CodeIgniter Versin 2.1.3 298
#or$Bradio+,
1sta @uncin es idntica en todos los as&ectos a la @uncin #or$B%=e%I"o1+, anteriorI salvo -ue esta*lece un ti&o
NradioN.
#or$Bsu"$it+,
6e &ermite generar un *otn enviar est0ndar. 1%em&lo sencilloG
echo form_submit('mi_submit', 'Enviar mensaje');
// Producira:
<input type="submit" name="mi_submit" value="Enviar mensaje" />
2imilar a otras @uncionesI &uede &asar un arra, asociativo en el &rimer &ar0metro si &re@iere esta*lecer sus &ro&ios
atri*utos. 1l tercer &ar0metro le &ermite agregar datos adicionales al @ormularioI como Dava2cri&t.
#or$Bla"el+,
6e &ermite generar un Ela"elA. 1%em&lo sencilloG
echo form_label('Cual es su nombre?', 'username');
// Producira:
<label for="username">Cual es su nombre?</label>
2imilar a otras @uncionesI &uede &asar un arra, asociativo en el tercer &ar0metro si &re@iere esta*lecer sus &ro&ios
atri*utos.
$attributes = array(
'class' => 'mi_clase',
'style' => 'color: #000;',
);
echo form_label('Cual es su nombre?', 'username', $attributes);
// Producira:
<label for="username" class="mi_clase" style="color: #000;">Cual es su nombre?
</label>
#or$Breset+,
6e &ermite generar un *otn est0ndar de reset. 1l uso es idntico a #or$Bsu"$it+,.
#or$B"utton+,
6e &ermite generar un elemento de *otn est0ndar. 'Hnimamente &uede &asar el nom*re del *otn , contenido en
el &rimer , segundo &ar0metrosG
echo form_button('nombre','contenido');
// Producira
<button name="nombre" type="button">contenido</button>
Gua del Usuario de CodeIgniter Versin 2.1.3 299
) &uede &asarle un arra, asociativo conteniendo cual-uier dato -ue desee -ue su @ormulario contengaG
$data = array(
'name' => 'button',
'id' => 'button',
'value' => 'true',
'type' => 'reset',
'content' => 'Reset'
);
echo form_button($data);
// Producira:
<button name="button" id="button" value="true" type="reset">Reset</button>
2i desea -ue su @ormulario contenga algunos datos adicionalesI como Dava2cri&tI &uede &asarlos como una cadena
en el tercer &ar0metroG
$js = 'onClick="alguna_funcion()"';
echo form_button('mi_boton', 'Clic aqu', $js);
#or$B%lose+,
Produce una eti-ueta E#or$A de cierre. 6a :nica venta%a de usar esta @uncin es -ue le &ermite &asar datos a
ellaI los -ue se agregar0n de*a%o de la eti-ueta. Por e%em&loG
$string = "</div></div>";
echo form_close($string);
// Producira:
</form>
</div></div>
#or$Bprep+,
6e &ermite usar con seguridad 9C'6 , caracteres tales como comillas dentro de elementos de @ormulario sin
rom&er el @ormulario. Considere este e%em&loG
$string = 'Aqu hay una cadena que contiene texto entre "comillas".';
<input type="text" name="mi_formulario" value="$string" />
Como la cadena anterior contiene un con%unto de comillasI ese causar0 -ue el @ormulario se rom&a. 6a @uncin
@ormB&re& convierte 9C'6 &ara -ue se &ueda usar en @orma seguraG
<input type="text" name="mi_formulario"
value="<?php echo form_prep($string); ?>" />
:ota< 2i usa alguna de las @unciones del 9el&er $orm listadas en esta &0gina los valores del @ormulario se
&re&arar0n autom0ticamenteI &or lo -ue no >a, necesidad de llamar a esta @uncin. Qsela solamente si est0
Gua del Usuario de CodeIgniter Versin 2.1.3 300
creando sus &ro&ios elementos de @ormulario.
setBvalue+,
6e &ermite esta*lecer el valor de una entrada de @ormulario o de un te<tarea. Ciene -ue suministrar el nom*re del
cam&o mediante el &rimer &ar0metro de la @uncin. 1l segundo &ar0metro Jo&cionalK le &ermite esta*lecer un valor
&or de@ecto &ara el @ormulario. 1%em&loG
<input type="text" name="cantidad"
value="<?php echo set_value('cantidad', '0'); ?>" size="50" />
1l @ormulario anterior mostrar0 N0N cuando se cargue &or &rimera ve".
setBsele%t+,
2i usa un men: Esele%tAI esta @uncin le &ermite mostrar el elemento de men: -ue se seleccion. 1l &rimer
&ar0metro tiene -ue contener el nom*re del men: selectI el segundo &ar0metro tiene -ue contener el valor de
cada elemento , el tercer &ar0metro Jo&cionalK le &ermite esta*lecer un elemento &or de@ecto Jusar el *ooleano
!RUE>076EK. 1%em&loG
<select name="mi_select">
<option value="uno" <?php echo set_select('mi_select', 'uno', TRUE); ?> >
Uno</option>
<option value="dos" <?php echo set_select('mi_select', 'dos'); ?> >
Dos</option>
<option value="tres" <?php echo set_select('mi_select', 'tres'); ?> >
Tres</option>
</select>
setB%=e%I"o1+,
6e &ermite mostrar una casilla de veri@icacin en el estado en -ue se envi. 1l &rimer &ar0metro tiene -ue
contener el nom*re de la casilla de veri@icacinI el segundo &ar0metro tiene -ue contener su valor , el tercer
&ar0metro Jo&cionalK le &ermite esta*lecer un elemento &or de@ecto Jusar el *ooleano !RUE>076EK. 1%em&loG
<input type="checkbox" name="mi_casilla" value="1"
<?php echo set_checkbox('mi_casilla', '1'); ?> />
<input type="checkbox" name="mi_casilla" value="2"
<?php echo set_checkbox('mi_casilla', '2'); ?> />
setBradio+,
6e &ermite mostrar *otones de radio en el estado en -ue se enviaron. 1sta @uncin es idntica a la @uncin
setB%=e%I"o1+, anterior.
<input type="radio" name="mi_radio" value="1"
<?php echo set_radio('mi_radio', '1', TRUE); ?> />
<input type="radio" name="mi_radio" value="2"
<?php echo set_radio('mi_radio', '2'); ?> />
Gua del Usuario de CodeIgniter Versin 2.1.3 301
.elper .!H7
1l arc>ivo del 9el&er 9C'6 contiene @unciones -ue lo a,udan a tra*a%ar con 9C'6.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('html');
1st0n dis&oni*les las siguientes @uncionesG
"r+,
Aenera eti-uetas de corte de lHnea JE"r AK *asada en el n:mero -ue le suministre. 1%em&loG
echo br(3);
6o anterior &roducirHaG E"r AE"r AE"r A
=eading+,
6e &ermite crear eti-uetas E=1A de 9C'6. 1l &rimer &ar0metro contendr0 el dato , el segundo el tama+o del
enca*e"ado. 1%em&loG
echo heading('Hola!', 3);
6o anterior &roducirHaG E=3A9ola[E=3A
i$g+,
6e &ermite crear eti-uetas Ei$g A de 9C'6. 1l &rimer &ar0metro contiene la ruta de la imagen. 1%em&loG
echo img('images/picture.jpg');
// produce <img src="http://site.com/images/picture.jpg" />
9a, un segundo &ar0metro o&cional -ue es un valor !RUE>076E -ue es&eci@ica si sr% de*erHa tener la &0gina
es&eci@icada &or ?%on#igKLinde1BpageLM agregada a la direccin -ue crea. Presumi*lementeI esto serHa si
estuviera usando un controlador de medios.
echo img('images/picture.jpg', TRUE);
// produce <img src="http://site.com/index.php/images/picture.jpg" alt="" />
AdicionalmenteI se &uede &asar un arra, asociativo a la @uncin i$g+, &ara o*tener control total de todos los
atri*utos , valores. 2i no se &rovee un atri*uto altI CodeIgniter generar0 una cadena vacHa.
$image_properties = array(
'src' => 'images/picture.jpg',
'alt' => 'Yo, demostrando como comer cuatro porciones de pizza de una vez',
'class' => 'post_images',
Gua del Usuario de CodeIgniter Versin 2.1.3 302
'width' => '200',
'height' => '200',
'title' => 'Esa fue una gran noche',
'rel' => 'lightbox',
);
img($image_properties);
// <img src="http://site.com/index.php/images/picture.jpg"
// alt="Yo, demostrando como comer cuatro porciones de pizza de una vez"
// class="post_images" width="200" height="200" title="Esa fue una gran noche"
// rel="lightbox" />
linIBtag+,
6e &ermite crear eti-uetas ElinI A de 9C'6. 1sto es :til &ara enlaces de >o%as de estiloI asH como &ara otros
enlaces. 6os &ar0metros son =re#I con rel o&cionalI t;peI titleI $edia e inde1Bpage. inde1Bpage es un valor
!RUE>076E -ue es&eci@ica si el =re# de*erHa tener la &0gina es&eci@icada &or ?%on#igKLinde1BpageLM
agregada a la direccin -ue crea.
echo link_tag('css/mis_estilos.css');
// produce <link href="http://site.com/css/mis_estilos.css" rel="stylesheet"
// type="text/css" />
)tros e%em&losG
echo link_tag('favicon.ico', 'shortcut icon', 'image/ico');

// <link href="http://site.com/favicon.ico" rel="shortcut icon"
// type="image/ico" />
echo link_tag('feed', 'alternate', 'application/rss+xml', 'My RSS Feed');
// <link href="http://site.com/feed" rel="alternate" type="application/rss+xml"
// title="My RSS Feed" />
AdicionalmenteI se &uede &asar un arra, asociativo a la @uncin linI+, &ara o*tener control total de todos los
atri*utos , valores.
$link = array(
'href' => 'css/printer.css',
'rel' => 'stylesheet',
'type' => 'text/css',
'media' => 'print'
);
echo link_tag($link);
// <link href="http://site.com/css/printer.css" rel="stylesheet" type="text/css"
// media="print" />
Gua del Usuario de CodeIgniter Versin 2.1.3 303
n"s+,
Aenera es&acios sin cortes JTn"spUK *asados en el n:mero suministrado. 1%em&loG
echo nbs(3);
6o anterior &roducirHaG Tn"spUTn"spUTn"spU
ol+, ; ul+,
6e &ermite generar listas ordenadas , sin orden de 9C'6 a &artir de un arra, sim&le o multidimensional. 1%em&loG
$this->load->helper('html');
$list = array(
'red',
'blue',
'green',
'yellow'
);
$attributes = array(
'class' => 'boldlist',
'id' => 'mylist'
);
echo ul($list, $attributes);
1l cdigo anterior &roducir0 estoG
<ul class="boldlist" id="mylist">
<li>red</li>
<li>blue</li>
<li>green</li>
<li>yellow</li>
</ul>
1ste es un e%em&lo m0s com&le%oI usando un arra, multidimensionalG
$this->load->helper('html');
$attributes = array(
'class' => 'boldlist',
'id' => 'mylist'
);
$list = array(
'colors' => array(
'red',
'blue',
'green'
),
'shapes' => array(
'round',
'square',
'circles' => array(
Gua del Usuario de CodeIgniter Versin 2.1.3 304
'ellipse',
'oval',
'sphere'
)
),
'moods' => array(
'happy',
'upset' => array(
'defeated' => array(
'dejected',
'disheartened',
'depressed'
),
'annoyed',
'cross',
'angry'
)
)
);
echo ul($list, $attributes);
1l cdigo anterior &roducir0 estoG
<ul class="boldlist" id="mylist">
<li>colors
<ul>
<li>red</li>
<li>blue</li>
<li>green</li>
</ul>
</li>
<li>shapes
<ul>
<li>round</li>
<li>suare</li>
<li>circles
<ul>
<li>elipse</li>
<li>oval</li>
<li>sphere</li>
</ul>
</li>
</ul>
</li>
<li>moods
<ul>
<li>happy</li>
<li>upset
<ul>
<li>defeated
<ul>
<li>dejected</li>
<li>disheartened</li>
<li>depressed</li>
</ul>
</li>
<li>annoyed</li>
<li>cross</li>
Gua del Usuario de CodeIgniter Versin 2.1.3 305
<li>angry</li>
</ul>
</li>
</ul>
</li>
</ul>
$eta+,
6e a,uda a generar meta tags. A la @uncin le &uede &asar cadenasI arra,s sim&les o multidimensionales.
1%em&losG
echo meta('description', 'Mi bonito sitio');
// Genera: <meta name="description" content="Mi bonito sitio" />
echo meta('Content-type', 'text/html; charset=utf-8', 'equiv');
// Advierta el tercer parmetro. Puede ser "equiv" o "name"
// Genera: <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
echo meta(array('name' => 'robots', 'content' => 'no-cache'));
// Genera: <meta name="robots" content="no-cache" />
$meta = array(
array('name' => 'robots', 'content' => 'no-cache'),
array('name' => 'description', 'content' => 'Mi bonito sitio'),
array('name' => 'keywords', 'content' => 'amor, pasin, intriga,
decepcin'),
array('name' => 'robots', 'content' => 'no-cache'),
array('name' => 'Content-type', 'content' => 'text/html; charset=utf-8',
'type' => 'equiv')
);
echo meta($meta);
// Genera:
// <meta name="robots" content="no-cache" />
// <meta name="description" content="Mi bonito sitio" />
// <meta name="keywords" content="amor, pasin, intriga, decepcin" />
// <meta name="robots" content="no-cache" />
// <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
do%t;pe+,
6e a,uda a generar declaraciones de ti&o de documentoI o DCD. Por de@ecto se usa E9C'6 1.0 2trictI &ero >a,
varios ti&os de documentos dis&oni*les.
echo doctype();
// <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
// "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
echo doctype('html4-trans');
// <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
// "http://www.w3.org/TR/html4/strict.dtd">
6a siguiente es la lista de las o&ciones de doct,&e. 1stas son con@igura*les , se e<traen de
appli%ation%on#igdo%t;pes.p=p.
Gua del Usuario de CodeIgniter Versin 2.1.3 306
Fo%t;pe Gp%in Resultado
E9C'6 1.1 doct,&eJY<>tml11YK
g[D)CCRP1 >tml P7B6IC N(OO?COODCD E9C'6 1.1OO13N
N>tt&GOO===.=.orgOC8O<>tml11ODCDO<>tml11.dtdNj
E9C'6 1.0 2trict doct,&eJY<>tml1(strictYK
g[D)CCRP1 >tml P7B6IC N(OO?COODCD E9C'6 1.0 2trictOO13N
N>tt&GOO===.=.orgOC8O<>tml1ODCDO<>tml1(strict.dtdNj
E9C'6 1.0 Cransitional doct,&eJY<>tml1(transYK
g[D)CCRP1 >tml P7B6IC N(OO?COODCD E9C'6 1.0
CransitionalOO13N N>tt&GOO===.=.orgOC8O<>tml1ODCDO<>tml1(
transitional.dtdNj
E9C'6 1.0 $rameset doct,&eJY<>tml1(@rameYK
g[D)CCRP1 >tml P7B6IC N(OO?COODCD E9C'6 1.0
$ramesetOO13N N>tt&GOO===.=.orgOC8O<>tml1ODCDO<>tml1(
@rameset.dtdNj
9C'6 4 doct,&eJY>tml4YK g[D)CCRP1 >tmlj
9C'6 # 2trict doct,&eJY>tml#(strictYK
g[D)CCRP1 9C'6 P7B6IC N(OO?COODCD 9C'6 #.01OO13N
N>tt&GOO===.=.orgOC8O>tml#Ostrict.dtdNj
9C'6 # Cransitional doct,&eJY>tml#(transYK
g[D)CCRP1 9C'6 P7B6IC N(OO?COODCD 9C'6 #.01
CransitionalOO13N N>tt&GOO===.=.orgOC8O>tml#Oloose.dtdNj
9C'6 # $rameset doct,&eJY>tml#(@rameYK
g[D)CCRP1 9C'6 P7B6IC N(OO?COODCD 9C'6 #.01
$ramesetOO13N N>tt&GOO===.=.orgOC8O>tml#O@rameset.dtdNj
Gua del Usuario de CodeIgniter Versin 2.1.3 307
.elper In#le%tor
1l arc>ivo del 9el&er In@lector contiene @unciones -ue le &ermiten cam*iar las &ala*ras a &luralI singularI camel
caseI etc.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('inflector');
1st0n dis&oni*les las siguientes @uncionesG
singular+,
Cam*ia a singular una &ala*ra en &lural. 1%em&loG
$word = "dogs";
echo singular($word); // Devuelve "dog"
plural+,
Cam*ia a &lural una &ala*ra en singular. 1%em&loG
$word = "dog";
echo plural($word); // Devuelve "dogs"
Para @or"ar a una &ala*ra a -ue termine en NesN use !RUE como segundo argumento.
$word = "pass";
echo plural($word, TRUE); // Devuelve "passes"
%a$eli8e+,
Cam*ia una cadena de &ala*ras se&aradas &or es&acios o guiones de su*ra,ado a camel case. 1%em&loG
$word = "my_dog_spot";
echo camelize($word); // Devuelve "myDogSpot"
unders%ore+,
Cam*ia los es&acios -ue se&aran las &ala*ras &or guiones de su*ra,ado. 1%em&loG
$word = "my dog spot";
echo underscore($word); // Devuelve "my_dog_spot"
Gua del Usuario de CodeIgniter Versin 2.1.3 308
=u$ani8e+,
Cam*ia los guiones de su*ra,ado -ue unen las &ala*ras &or es&acios e inicia cada &ala*ra con ma,:sculas.
1%em&loG
$word = "my_dog_spot";
echo humanize($word); // Devuelve "My Dog Spot"
Gua del Usuario de CodeIgniter Versin 2.1.3 309
.elper 7anguage
1l arc>ivo del 9el&er 6anguage contiene @unciones -ue lo a,udan a tra*a%ar con arc>ivos de idiomas.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('language');
1st0n dis&oni*les las siguientes @uncionesG
lang+Llanguage lineLJ Lele$ent idL,
1sta @uncin devuelve una lHnea de te<to desde un arc>ivo de idioma cargado con una sinta<is sim&li@icada -ue
&uede ser m0s desea*le &ara ver arc>ivos -ue llamar a ?t=is@Alang@Aline+,. 1l segundo &ar0metro o&cional
generar0 tam*in una eti-ueta Ela"elA. 1%em&loG
echo lang('language_=e>', 'form_item_id');
// se convierte en <label for="form_item_id">language_key</label>
Gua del Usuario de CodeIgniter Versin 2.1.3 310
.elper :u$"er
1l arc>ivo del 9el&er 3um*er contiene @unciones -ue lo a,udan a tra*a%ar con datos numricos.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('number');
1st0n dis&oni*les las siguientes @uncionesG
";teB#or$at+,
$ormatea un n:mero como *,tesI *asado en el tama+oI , agrega el su@i%o adecuado. 1%em&losG
echo byte_format(456); // Devuelve 456 Bytes
echo byte_format(4567); // Devuelve 4.5 KB
echo byte_format(45678); // Devuelve 44.6 KB
echo byte_format(456789); // Devuelve 447.8 KB
echo byte_format(3456789); // Devuelve 3.3 MB
echo byte_format(12345678912345); // Devuelve 1.8 GB
echo byte_format(123456789123456789); // Devuelve 11,228.3 TB
7n segundo &ar0metro o&cional le &ermite esta*lecer la &recisin del resultado.
echo byte_format(45678, 2); // Devuelve 44.61 KB
:ota< 1l te<to generado &or esta @uncin est0 en el siguiente arc>ivo de idiomaG
languageEsuBidio$aAnu$"erBlang.p=p.
Gua del Usuario de CodeIgniter Versin 2.1.3 311
.elper 3at=
1l arc>ivo del 9el&er Pat> contiene @unciones -ue le &ermiten tra*a%ar con rutas de arc>ivos en el servidor.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('path');
1st0n dis&oni*les las siguientes @uncionesG
setBrealpat=+,
!eri@ica si la ruta e<iste. 1sta @uncin devolver0 una ruta de servidor sin enlaces sim*licos o estructuras de
directorio relativas. 7n segundo &ar0metro causar0 -ue se dis&are un error si no se &uede resolver la ruta.
$directorio = '/etc/passwd';
echo set_realpath($directorio);
// Devuelve "/etc/passwd"
$directorio_inexistente = '/ruta/a/ninguna_parte';
echo set_realpath($directorio_inexistente, TRUE);
// Devuelve un error, porque no se pudo resolver la ruta
echo set_realpath($directorio_inexistente, FALSE);
// Devuelve "/ruta/a/ninguna_parte"
Gua del Usuario de CodeIgniter Versin 2.1.3 312
.elper 6e%urit;
1l arc>ivo del 9el&er 2ecurit, contiene @unciones relacionadas con la seguridad.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('security');
1st0n dis&oni*les las siguientes @uncionesG
1ssB%lean+,
Provee @iltrado contra &iraterHa de scri&ts de sitio cru"ado. 1sta @uncin es un alias a otra en la Clase In&ut. 2e
&uede encontrar m0s in@ormacin a>H.
saniti8eB#ilena$e+,
Provee &roteccin contra el recorrido de directorios. 1sta @uncin es un alias a otra en la Clase 2ecurit,. 2e &uede
encontrar m0s in@ormacin a>H.
doB=as=+,
6e &ermite crear >as>es 29A1 o 'D4 adecuados &ara encri&tar contrase+as. Crear0 29A1 &or de@ecto. 1%em&losG
$str = do_hash($str); // SHA1
$str = do_hash($str, 'md5'); // MD5
:ota< 1sta @uncin se llama*a anteriormente do=as=+,I la cual se marc como o*soleta en @avor de
doB=as=+,.
stripBi$ageBtags+,
1sta es una @uncin de seguridad -ue -uitar0 las eti-uetas de imagen de una cadena. De%a la 786 de la imagen
como te<to &lano.
$string = strip_image_tags($string);
en%odeBp=pBtags+,
1sta es una @uncin de seguridad -ue convierte eti-uetas P9P a entidades. :ota< 6a @uncin de @iltrado E22 >ace
esto autom0ticamente.
$string = encode_php_tags($string);
Gua del Usuario de CodeIgniter Versin 2.1.3 313
.elper 6$ile;
1l arc>ivo del 9el&er 2mile, contiene @unciones -ue le &ermiten administrar smile,s JemoticonesK.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('smiley');
Introdu%%in
1l 9el&er 2mile, tiene un &rocesador -ue toma smile,s de te<to &lano como G(K , los convierte en im0genes como
Cam*in le &ermite mostrar un con%unto de im0genes de smile, -ue al cli-uearlas se insertar0n en un cam&o de
@ormulario. Por e%em&loI si tiene un *log -ue &ermite comentarios del usuarioI &uede mostrar los smile,s cerca del
@ormulario de comentarios. 6os usuarios &ueden >acer clic so*re un smile, , con la a,uda de alg:n Dava2cri&t se
u*icar0n dentro del cam&o de @ormulario.
!utorial de 6$ile;s Cli4uea"les
A-uH >a, un e%em&lo -ue muestra como tiene -ue crear un con%unto de smile,s cli-uea*les cerca de un cam&o de
@ormulario. 1ste e%em&lo necesita -ue &rimero descargue e instale las im0genes de smile, , luego cree un
controlador , la vista seg:n se descri*e.
I$portante< Antes -ue comienceI &or @avor descargue las im0genes de smile, , &ngalas en un lugar
accesi*le &:*licamente en el servidor. 1ste >el&er asume tam*in -ue 7d tiene un arra, de reem&la"o de
smile,s en appli%ation%on#igs$ile;s.p=p.
El Controlador
1n la car&eta appli%ation%ontrollers cree un arc>ivo llamado s$ile;s.p=p , u*i-ue en l el cdigo -ue est0
m0s a*a%o.
I$portante< Cam*iar la 786 en la @uncin getB%li%Ia"leBs$ile;s+, &ara -ue a&unte a la car&eta s$ile;.
Advertir0 -ue adem0s del 2mile, estamos usando la Clase Ca*le.
class Smileys extends CI_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->helper('smiley');
$this->load->library('table');
$image_array = get_clickable_smileys('http://example.com/images/smileys/',
Gua del Usuario de CodeIgniter Versin 2.1.3 314
'comments');
$col_array = $this->table->make_columns($image_array, 8);
$data['smiley_table'] = $this->table->generate($col_array);
$this->load->view('smiley_view', $data);
}
}
?>
1n su car&eta appli%ationvieCsI crear un arc>ivo llamado s$ile;BvieC.p=p , u*icar este cdigo en lG
<html>
<head>
<title>Smileys</title>
<?php echo smiley_js(); ?>
</head>
<body>
<form name="blog">
<textarea name="comments" id="comments" cols="40" rows="4"></textarea>
</form>
<p>Hacer clic para insertar un smiley!</p>
<?php echo $smiley_table; ?>
</body>
</html>
Cuando >a,a creado el controlador , la vistaI c0rguelos visitando >tt&GOO===.e<am&le.comOinde<.&>&Osmile,sO
0lias de Ca$po
Al >acer cam*ios en la vista &uede ser inconveniente tener un id de cam&o en el controlador. Para evitar estoI
&uede darle a sus enlaces de smile, un nom*re genrico -ue se vincular0 a un id es&ecH@ico en la vista.
$image_array = get_smiley_links("http://example.com/images/smileys/",
"comment_textarea_alias");
Para ma&ear el alias al id del cam&oI &0selos %untos en la @uncin s$ile;BDs+,G
$image_array = smiley_js("comment_textarea_alias", "comments");
Re#eren%ia de >un%iones
getB%li%Ia"leBs$ile;s+,
Devuelve un arra, -ue contiene las im0genes smile, envueltas en un enlace. Ciene -ue suministrar la 786 a la
car&eta de smile,s , un id de cam&o o un alias de cam&o.
$image_array = get_smiley_links("http://example.com/images/smileys/", "comment");
Gua del Usuario de CodeIgniter Versin 2.1.3 315
:ota< 1l uso de esta @uncin sin el segundo &ar0metro %unto con DsBinsertBs$ile; @ue marcado como
o*soleto.
s$ile;BDs+,
Aenera el Dava2cri&t -ue &ermite -ue las im0genes se &uedan cli-uear e insertar en un cam&o de @ormulario. 2i
suministra un alias en lugar de un id al generar los enlaces del smile,I necesita &asar el alias , el corres&ondiente
id de @ormulario a la @uncin. 1sta @uncin est0 dise+ada &ara u*icarse dentro del 0rea g>eadj de la &0gina =e*.
<?php echo smiley_js(); ?>
:ota< 1sta @uncin reem&la"a a DsBinsertBs$ile;I la -ue @ue marcada como o*soleta.
parseBs$ile;s+,
Coma una cadena de te<to como entrada , reem&la"a cual-uier smile, de te<to &lano con la imagen e-uivalente.
1l &rimer &ar0metro de*e contener la cadenaI el segundo tiene -ue contener la 786 a la car&eta de smile,sG
$str = 'Estos son algunos smileys: :-) ;-)';
$str = parse_smileys($str, "http://example.com/images/smileys/");
echo $str;
Gua del Usuario de CodeIgniter Versin 2.1.3 316
.elper 6tring
1l arc>ivo del 9el&er 2tring contiene @unciones -ue lo a,udan a tra*a%ar con cadenas de caracteres.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('string');
1st0n dis&oni*les las siguientes @uncionesG
rando$Bstring+,
Aenera una cadena aleatoria *asada en el ti&o , longitud es&eci@icadas. Qtil &ara crear contrase+as o generar
>as>es aleatorios.
1l &rimer &ar0metro es&eci@ica el ti&o de cadenaI el segundo &ar0metro es&eci@ica la longitud. 1st0n dis&oni*les las
siguiente alternativasG
al&>aI alunumI numericI no"eroI uni-ueI md4I encr,&t , s>a1

alp=a< 7na cadena con letras ma,:sculas , min:sculas solamente.
alnu$< 7na cadena al@anumrica con caracteres en ma,:sculas , min:sculas.
nu$eri%< 7na cadena numrica.
no8ero< 7na cadena numrica sin ceros.
uni4ue< 7na cadena encri&tada con 'D4 , uni4id+,. :ota< el &ar0metro longitud no est0 dis&oni*le
&ara este ti&o. Devuelve una cadena de / caracteres de longitud J@i%aK.
s=a1< 7n n:mero aleatorio *asado en doB=as=+, del 9el&er 2ecurit,.
1%em&lo de 7soG
echo random_string('alnum', 16);
in%re$entBstring+,
Incrementa una cadena al agregarle un n:mero o incrementando el n:mero. 7til &ara crear Vco&iasW de un arc>ivo
o du&licar el contenido de una *ase de datos -ue tiene ID o tHtulo :nicos.
1%em&lo de usoG
echo increment_string('file', '_'); // "file_1"
echo increment_string('file', '-', 2); // "file-2"
echo increment_string('file-4'); // "file-5"
alternator+,
Permite -ue dos o m0s elementos alternen entre sH al ciclar dentro de un *ucle. 1%em&loG
for ($i = 0; $i < 10; $i++)
{
echo alternator('cadena 1', 'cadena 2');
}
Gua del Usuario de CodeIgniter Versin 2.1.3 317
Puede agregar tantos &ar0metros como -uiera , con cada iteracin del *ucle se devolver0 el siguiente elemento.
for ($i = 0; $i < 10; $i++)
{
echo alternator('uno', 'dos', 'tres', 'cuatro', 'cinco');
}
:ota< Para usar varias llamadas se&aradas a esta @uncin sim&lemente llame la @uncin sin argumentos &ara
reiniciali"ar.
repeater+,
Aenera co&ias re&etidas de los datos a enviar. 1%em&loG
$string = "\n";
echo repeater($string, 30);
6o anterior generarHa 0 nuevas lHneas.
redu%eBdou"leBslas=es+,
Convierte las *arras do*les en una cadena a *arras sim&lesI salvo &ara a-uellas encontradas en >tt&GOO. 1%em&loG
$string = "http://example.com//index.php";
echo reduce_double_slashes($string); // devuelve: "http://example.com/index.php"
tri$Bslas=es+,
Luita las *arras de inicio , @in de una cadena. 1%em&loG
$string = "/esto/aquello/lootro/";
echo trim_slashes($string); // devuelve: esto/aquello/lootro
redu%eB$ultiples+,
8educe m:lti&les instancias de un car0cter &articular -ue ocurren uno detr0s de otro. 1%em&loG
$string = "Batman, Robin,, Gatbela, Batichica";
$string = reduce_multiples($string,",");
//devuelve: "Batman, Robin, Gatbela, Batichica"
6a @uncin ace&ta los siguiente &ar0metrosG
reduce_multiples(string: texto en el que buscar, string: caracter a reducir,
boolean: si quitar el caracter del inicio y fin de la cadena)
1l &rimer &ar0metro contiene la cadena de la -ue -uiere reducir las redundancias. 1l segundo &ar0metro contiene
el caracter -ue -uiere reducir. 1l tercer &ar0metro es >076E &or de@ecto` si se esta*lece a !RUE -uitar0 las
ocurrencias del caracter al inicio , @in de la cadena. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 318
$string = ",Batman, Robin,, Gatbela, Batichica,";
$string = reduce_multiples($string, ",", TRUE);
//devuelve: "Batman, Robin, Gatbela, Batichica"
4uotesBtoBentities+,
Convierte las comillas sim&les , do*les en una cadena a las entidades 9C'6 corres&ondientes. 1%em&loG
$string = "Joe's \"dinner\"";
$string = quotes_to_entities($string); //devuelve: "Joe&#39;s &quot;dinner&quot;"
stripB4uotes+,
Luita las comillas sim&les , do*les de una cadena. 1%em&loG
$string = "Joe's \"dinner\"";
$string = strip_quotes($string); //devuelve: "Joes dinner"
Gua del Usuario de CodeIgniter Versin 2.1.3 319
.elper !e1t
1l arc>ivo del 9el&er Ce<t contiene @unciones -ue lo a,udan a tra*a%ar con te<to.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('text');
1st0n dis&oni*les las siguientes @uncionesG
CordBli$iter+,
Crunca la cadena a la cantidad de &ala*ras es&eci@icada. 1%em&loG
$string = "Esta es una hermosa cadena de texto que tiene once palabras.";
$string = word_limiter($string, 4);
// Devuelve: Esta es una hermosa...
1l tercer &ar0metro es un su@i%o o&cional -ue se agrega a la cadena. Por de@ecto se le agregan &untos sus&ensivos.
%=ara%terBli$iter+,
Crunca la cadena a la cantidad de caracteres es&eci@icada. 'antiene la integridad de las &ala*ras &or lo -ue la
cantidad de caracteres &uede ser ligeramente ma,or o menor a la es&eci@icada. 1%em&loG
$string = "Esta es una hermosa cadena de texto que tiene once palabras.";
$string = character_limiter($string, 20);
// Devuelve: Esta es una hermosa cadena...
1l tercer &ar0metro es un su@i%o o&cional -ue se agrega a la cadena. Por de@ecto se le agregan &untos sus&ensivos.
as%iiBtoBentities+,
Convierte valores A2CII en entidades de caracterI inclu,endo caracteres de '2 ?ord , A2CII alto -ue &ueden
causar &ro*lemas se usan en una &0gina =e* de @orma -ue se &uedan mostrar consistentemente
inde&endientemente de la con@iguracin del navegador o almacenar @ia*lemente en una *ase de datos. 9a, alguna
de&endencia con el con%unto de caracteres del servidorI &or lo -ue &uede no ser 100d con@ia*le en todos los
casosI &ero &ara la ma,or &arte se de*erHan identi@icar correctamente los caracteres @uera del rango normal Jcomo
los caracter acentuadosK. 1%em&loG
$string = ascii_to_entities($string);
Gua del Usuario de CodeIgniter Versin 2.1.3 320
entitiesBtoBas%ii+,
1sta @uncin >ace lo o&uesto a la anterior` cam*ia las entidades de caracter a A2CII.
%onvertBa%%entedB%=ara%ters+,
Cranscri*e caracteres altos de A2CII a sus e-uivalentes *a%os de A2CII. Qtil cuando se necesitan caracteres no
ingleses &ara usarse donde se usan solamente caracteres est0ndar A2CII segurosI &or e%em&loI en 786s.
$string = convert_accented_characters($string)`
1sta @uncin usa el arc>ivo de con@iguracin appli%ation%on#ig#oreignB%=ars.p=p &ara de@inir el arra, de la
transcri&cin.
CordB%ensor+,
6e &ermite censurar &ala*ras dentro de una cadena de te<to. 1l &rimer &ar0metro contendr0 la cadena original. 1l
segundo contendr0 el arra, de &ala*ras a rec>a"ar. 1l tercer &ar0metro &uede contener valores de reem&la"o &ara
las &ala*ras. 2i no se es&eci@icaI se reem&la"an &or signos numeralG mmmm. 1%em&loG
$disallowed = array('damier', 'joraca', 'locu', 'tate');
$string = word_censor($string, $disallowed, 'Beep!');
=ig=lig=tB%ode+,
Colorea una cadena de cdigo JP9PI 9C'6I etc.K. 1%em&loG
$string = highlight_code($string);
1sta @uncin usa la @uncin =ig=lig=tBstring+, de P9PI &or lo -ue los colores usados son los es&eci@icados en el
arc>ivo p=p.ini.
=ig=lig=tBp=rase+,
8esaltar0 una @rase dentro de una cadena de te<to. 1l &rimer &ar0metro contendr0 la cadena original , el segundo
contendr0 la @rase -ue se desea resaltar. 6os &ar0metros tercero , cuarto contendr0n las eti-uetas 9C'6 de
a&ertura , cierre -ue desearHa -ue rodearan a la @rase. 1%em&loG
$string = "Este es un hermoso texto acerca de nada en particular.";
$string = highlight_phrase($string, "hermoso texto",
'<span style="color:#990000">', '</span>');
1l te<to anterior devuelveG
1ste es un >ermoso te<to acerca de nada en &articular.
CordBCrap+,
Introduce saltos de lHnea autom0ticos al te<to &ara la cantidad es&eci@icada de caracteresI mientras mantiene
com&letas las &ala*ras. 1%em&loG
Gua del Usuario de CodeIgniter Versin 2.1.3 321
$string = "Esta es una cadena de texto simple que nos ayudar a ejemplificar esta
funcin.";
echo word_wrap($string, 24);
// Producira:
Esta es una cadena de
texto simple que nos
ayudar a ejemplificar
esta funcin.
ellipsi8e+,
1sta @uncin -uitar0 las eti-uetas de la cadenaI la dividir0 en una longitud m0<ima de@inida , le insertar0 &untos
sus&ensivos.
1l &rimer &ar0metro es la cadena a la cual a&licar la @uncinI el segundo &ar0metro es la cantidad de caracteres en
la cadena @inal. 1l tercer &ar0metro indica donde en la cadena tienen -ue a&arecer los &untos sus&ensivosI de 0 a
1I i"-uierda a derec>a. Por e%em&loG un valor de 1 u*icar0 los &untos sus&ensivos a la derec>a de la cadenaI .4 en
el medio , 0 a la i"-uierda.
7n &ar0metro o&cional es el ti&o de &untos sus&ensivos. Por de@ectoI se insertar0 &untos sus&ensivos JK.
$str = 'esta_cadena_es_demasiado_larga_y_puede_romper_mi_diseo';
echo ellipsize($str, 32, .5);
// Produce:
// esta_cadena_es_de.romper_mi_diseo
Gua del Usuario de CodeIgniter Versin 2.1.3 322
.elper !;pograp=;
1l arc>ivo del 9el&er C,&ogra&>, contiene @unciones -ue lo a,udan a @ormatear te<to de @orma sem0ntica.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('typography');
1st0n dis&oni*les las siguientes @uncionesG
autoBt;pograp=;+,
$ormatea te<to &ara -ue sea 9C'6 sem0ntica , ti&ogr0@icamente correcto. Para ma,or in@ormacinI vea la Clase
C,&ogra&>,.
1%em&lo de 7soG
$string = auto_typography($string);
:ota< 1l @ormateo ti&ogr0@ico &uede usar intensamente al &rocesadorI &articularmente si tiene un montn de
contenido &ara @ormatearse. 2i elige usar esta @uncinI de*erHa considerar cac>ear sus &0ginas.
nl2"rBe1%eptBpre+,
Convierte caracteres de nueva lHnea a eti-uetas E"r A a menos -ue stas a&are"can dentro de eti-uetas EpreA.
1sta @uncin es idntica a la nl2"r+, nativa de P9PI salvo -ue ignora las eti-uetas EpreA.
1%em&lo de 7soG
$string = nl2br_except_pre($string);
Gua del Usuario de CodeIgniter Versin 2.1.3 323
.elper UR7
C>e 9el&er 786 @ile contiene @unciones -ue lo a,udan a tra*a%ar con 786s.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('url');
1st0n dis&oni*les las siguientes @uncionesG
siteBurl+,
Devuelve la 786 del sitioI seg:n se es&eci@ica en el arc>ivo de con@iguracin. 1l arc>ivo inde1.p=p Jo el -ue >a,a
esta*lecido como el inde1Bpage del sitio en el arc>ivo de con@iguracinK se agregar0 a la 786I asH como cual-uier
segmento de 78I -ue &ase a la @uncin.
6o animamos a utili"ar esta @uncin en cual-uier momento -ue usted necesite &ara generar una 786 localI de
@orma -ue las &0ginas se vuelven m0s &orta*les en caso de -ue su 786 cam*ie.
6os segmentos se &uede &asar o&cionalmente a la @uncin como una cadena o un arra,. A-uH >a, un e%em&lo de
cadenaG
echo site_url("news/local/123");
1l e%em&lo anterior devolverHa algo comoG =ttp<e1a$ple.%o$inde1.p=pneCslo%al123.
A-uH >a, un e%em&lo de segmentos &asados como un arra,G
$segments = array('news', 'local', '123');
echo site_url($segments);
"aseBurl+,
Devuelve la 786 *ase del sitioI seg:n se es&eci@ica en el arc>ivo de con@iguracin. 1%em&loG
echo base_url();
%urrentBurl+,
Devuelve la 786 com&leta Jsegmentos incluidosK de la &0gina -ue se est0 viendo en este momento.
uriBstring+,
Devuelve los segmentos 78I de cual-uier &0gina -ue contiene esta @uncin. Por e%em&loI si la 786 @uera estaG
http://some-site.com/blog/comments/123
Gua del Usuario de CodeIgniter Versin 2.1.3 324
6a @uncin devolverHaG
/blog/comments/123
inde1Bpage+,
Devuelve la &0gina Ninde<N del sitioI seg:n se es&eci@ica en el arc>ivo de con@iguracin. 1%em&loG
echo index_page();
an%=or+,
Crea un enlace ancla de 9C'6 est0ndar *asado en la 786 de su sitioG
<a href="http://example.com">Clic aqu</a>
6a eti-ueta tiene tres &ar0metros o&cionalesG
anchor('segmentos uri', 'texto', 'atri!utos')
1l &rimer &ar0metro &uede contener cual-uier segmento -ue desee agregar a la 786. Como con la @uncin
siteBurl+, anteriorI los segmentos &ueden estar en una cadena o un arra,.
:ota< 2i est0 armando enlaces -ue son internos a la a&licacinI no inclu,a la 786 *ase J>tt&GOO...K. 1sto se
agregar0 autom0ticamente desde la in@ormacin es&eci@icada en el arc>ivo de con@iguracin. Incluir solamente
los segmentos de 78I -ue desee agregar a la 786.
1l segundo segmento es el te<to -ue -uerrHa -ue diga el enlace. 2i lo de%a en *lanco se usar0 la misma 786.
1l tercer &ar0metro &uede contener una lista de atri*utos -ue -uisiera agregar al enlace. 6os atri*utos &ueden ser
una cadena sim&le o un arra, asociativo.
A-uH >a, algunos e%em&losG
echo anchor('news/local/123', 'Mis noticias', 'title="Titulares"');
ProducirHaG ga >re@eN>tt&GOOe<am&le.comOinde<.&>&One=sOlocalO1/N titleeNCitularesNj'is noticiasgOaj
echo anchor('news/local/123', 'Mis noticias',
array('title' => 'Buenas noticias!'));
ProducirHaG ga >re@eN>tt&GOOe<am&le.comOinde<.&>&One=sOlocalO1/N titleeNBuenas noticias[Nj'is noticiasgOaj
an%=orBpopup+,
Casi idntica a la @uncin an%=or+, salvo -ue a*re la 786 en una ventana nueva. Puede es&eci@icar atri*utos de
ventana Dava2cri&t en el tercer &ar0metro &ara controlar cmo se a*re la ventana. 2i el tercer &ar0metro no est0
esta*lecidoI sim&lemente a*rir0 una nueva ventana con los valores del navegador. A-uH >a, un e%em&lo con
atri*utosG
Gua del Usuario de CodeIgniter Versin 2.1.3 325
$atts = array(
'width' => '800',
'height' => '600',
'scrollbars' => 'yes',
'status' => 'yes',
'resizable' => 'yes',
'screenx' => '0',
'screeny' => '0'
);
echo anchor_popup('news/local/123', 'Clic aqu!', $atts);
:ota< 6os atri*utos anteriores son los valores &or de@ecto de la @uncinI &or lo -ue solamente necesita esta*lecer
a-uellos -ue son distintos a los -ue necesita. 2i -uiere -ue la @uncin use todos sus valores &or de@ectoI
sim&lemente &0sele un arra, vacHo en el tercer &ar0metroG
echo anchor_popup('news/local/123', 'Clic aqu!', array());
$ailto+,
Crea un enlace de email est0ndar de 9C'6. 1%em&lo de usoG
echo mailto('yo@misitio.com', 'Haga clic aqu para contactarme');
Como con la @uncin an%=or+, anteriorI &uede esta*lecer los atri*utos usando el tercer &ar0metro.
sa#eB$ailto+,
1s idntica a la @uncin anteriorI salvo -ue escri*e una versin o@uscada de la eti-ueta $ailto usando n:meros
ordinales escritos con Dava2cri&t &ara a,udar a evitar -ue la direccin de email sea recolectada &or *ots de s&am.
autoBlinI+,
Convierte autom0ticamente 786s , direcciones de email contenidas en cadenas en enlaces. 1%em&loG
$string = auto_link($string);
1l segundo &ar0metro determina si las 786s o emails se convierten am*osI uno o el otro. Por de@ecto el &ar0metro
es am*os J"ot=K si no se es&eci@ica nada. 6os enlaces de email se codi@ican usando sa#eB$ailto+, como se
muestra antes.
Convierte solo 786sG
$string = auto_link($string, 'url');
Convierte solo direcciones de emailG
$string = auto_link($string, 'email');
1l tercer &ar0metro determina si los enlaces se muestran en una ventana nueva. 1l valor &uede ser !RUE o
>076E J*ooleanoKG
Gua del Usuario de CodeIgniter Versin 2.1.3 326
$string = auto_link($string, 'both', TRUE);
urlBtitle+,
Coma como entrada una cadena de caracteres , crea una cadena de 786 >umanamente legi*le. 1sto es :til siI &or
e%em&loI si 7d tiene un *log en el -ue le gustarHa usar el tHtulo de sus entradas como 786. 1%em&loG
$title = "Que est mal en el CSS?";
$url_title = url_title($title);
// Produce: Que-est-mal-en-el-CSS
1l segundo &ar0metro determina el delimitador de &ala*ra. Por de@ecto se usa el guin Jdas=K. 6as o&ciones sonG
das=I o unders%oreG
$title = "Que est mal en el CSS?";
$url_title = url_title($title, 'underscore');
// Produce: Que_est_mal_en_el_CSS
1l tercer &ar0metro determina si se @uer"a o no &or los caracteres en min:sculas. Por de@ecto no. 6as o&ciones son
!RUE>076E *ooleanosG
$title = "Que est mal en el CSS?";
$url_title = url_title($title, 'underscore', TRUE);
// Produce: que_est_mal_en_el_css
prepBurl+,
1sta @uncin agregar0 =ttp< en caso -ue @alte un es-uema en la 786. Pase la cadena de 786 a la @uncin de
este modoG
$url = "example.com";
$url = prep_url($url);
redire%t+,
9ace una Nredireccin de enca*e"adoN a la 78I es&eci@icada. 2i es&eci@ica la 786 com&leta del sitioI se armar0 ese
enlace Pero &ara enlaces localesI sim&lemente &roveer los segmentos 78I al controlador -ue -uiere direccionar
&ara crear el enlace. 6a @uncin armar0 la 786 *as0ndose en los valores del arc>ivo de con@iguracin.
1l segundo &ar0metro o&cional le &ermite elegir entre el mtodo lo%ation J&or de@ectoK o re#res=. 7o%ation es
m0s r0&idoI &ero a veces &uede causar &ro*lemas en servidores ?indo=s. 1l tercer &ar0metro o&cional le &ermite
enviar un cdigo de res&uesta 9CCP es&ecH@ico \ esto se &odrHa usar &or e%em&lo &ara crear redirecciones 01 &ara
los motores de *:s-ueda. 1l cdigo de res&uesta &or de@ecto es 0/. 1l tercer &ar0metro solo est0 dis&oni*le &ara
redirecciones lo%ation , no &ara re#res=. 1%em&losG
Gua del Usuario de CodeIgniter Versin 2.1.3 327
if ($logged_in == FALSE)
{
redirect('/login/form/', 'refresh');
}
// with 301 redirect
redirect('/article/13', 'location', 301);
:ota< Para -ue la @uncin tra*a%e tiene -ue usarse antes -ue algo salga &or el navegadorI ,a -ue utili"a
enca*e"ados de servidor.
:ota< Para un control mu, @ino so*re los enca*e"adosI de*erHa usar la @uncin setB=eader+, de la Clase
)ut&ut.
Gua del Usuario de CodeIgniter Versin 2.1.3 328
.elper YH7
1l arc>ivo del 9el&er E'6 @ile contiene @unciones -ue lo a,udan a tra*a%ar con datos E'6.
Cargar este .elper
1ste >el&er se carga usando el siguiente cdigoG
$this->load->helper('xml');
1st0n dis&oni*les las siguientes @uncionesG
1$lB%onvert+LstringL,
Coma una cadena como entrada , convierte los siguientes caracteres E'6 reservados a entidadesG
Am&ersandsG n
Caracteres menor -ue , ma,or -ueG g j
Comillas sim&les , do*lesG Y N
AuionesG (
1sta @uncin ignora los signos n si son &arte de entidades de caracter e<istentes. 1%em&loG
$string = xml_convert($string);
Gua del Usuario de CodeIgniter Versin 2.1.3 329
0ne1os
Gua del Usuario de CodeIgniter Versin 2.1.3 330
0ne1o I< 0%tuali8ar desde una Versin 0nterior
Por @avor lea las notas de actuali"acin corres&ondientes a la versin desde la -ue est0 actuali"ando.
0%tuali8ando de 2.1.2 a 2.1.3
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&la"ar todos los arc>ivos , directorios en su car&eta s;ste$ , reem&la"ar su arc>ivo inde1.p=p. 2i reali"
modi@icaciones en su arc>ivo inde1.p=p tendr0n -ue >acerse nuevamente en este.
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
0%tuali8ando de 2.1.1 a 2.1.2
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&la"ar todos los arc>ivos , directorios en su car&eta s;ste$ , reem&la"ar su arc>ivo inde1.p=p. 2i reali"
modi@icaciones en su arc>ivo inde1.p=p tendr0n -ue >acerse nuevamente en este.
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
0%tuali8ando de 2.1.0 a 2.1.1
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&la"ar todos los arc>ivos , directorios en su car&eta s;ste$ , reem&la"ar su arc>ivo inde1.p=p. 2i reali"
modi@icaciones en su arc>ivo inde1.p=p tendr0n -ue >acerse nuevamente en este.
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
6tep 2< Repla%e %on#ig$i$es.p=p
2e actuali" este arc>ivo de con@iguracin &ara -ue contenga m0s ti&os mime del usuario. Por @avor c&ieloI a
appli%ation%on#ig$i$es.p=p.
6tep 3< 0%tuali8ar sus ta"las de dire%%iones I3
1sta actuali"acin agrega so&orte &ara direcciones IP IPv6. Para almacenarlasI se necesita agrandar las columnas
ipBaddress a #4 caracteres. Por e%em&loI la ta*la sesones de CodeIgniter necesitar0 cam*iar aG
Gua del Usuario de CodeIgniter Versin 2.1.3 331
ALTER TABLE ci_sessions CHANGE ip_address ip_address varchar(45) default '0' NOT
NULL
0%tuali8ar de 2.0.3 a 2.1.0
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&la"ar todos los arc>ivos , directorios en su car&eta s;ste$ , reem&la"ar su arc>ivo inde1.p=p. 2i reali"
modi@icaciones en su arc>ivo inde1.p=p tendr0n -ue >acerse nuevamente en este.
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< Ree$pla8ar %on#iguserBagents.p=p
2e actuali" este arc>ivo de con@iguracin &ara -ue contenga m0s ti&os de agentes de usuario. Por @avor c&ielo a
appli%ation%on#iguserBagents.p=p.
0%tuali8ar de 2.0.2 a 2.0.3
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&la"ar todos los arc>ivos , directorios en su car&eta s;ste$ , reem&la"ar su arc>ivo inde1.p=p. 2i reali"
modi@icaciones en su arc>ivo inde1.p=p tendr0n -ue >acerse nuevamente en este.
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar los ar%=ivos de CodeIgniter
8eem&la"ar todos los arc>ivos , directorios en su car&eta s;ste$ con las nuevas versiones.
3aso 3< 0%tuali8ar su ar%=ivo inde1.p=p prin%ipal
2i est0 e%ecutando un arc>ivo inde1.p=p originalI sim&lemente reem&lace su versin con la nueva.
2i su arc>ivo inde1.p=p tiene modi@icaciones internasI &or @avor agregue sus modi@icaciones al nuevo arc>ivo ,
:selo.
3aso -< Ree$pla8ar %on#iguserBagents.p=p
2e actuali" este arc>ivo de con@iguracin &ara -ue contenga m0s ti&os de agentes de usuario. Por @avor c&ielo a
appli%ation%on#iguserBagents.p=p.
Gua del Usuario de CodeIgniter Versin 2.1.3 332
3aso )< Ca$"iar las re#eren%ias de la %onstante EY! a P.p=pP
:ota< 6a constante 1EC se marc como o*soletaI &ero no se elimin de la a&licacin. 6e recomendamos -ue
>aga los cam*ios tan &ronto como sea &osi*le.
3aso `< Eli$ine 03330!..Lt=irdBpart;L de autoload.p=p
A*rir appli%ationautoload.p=p , *uscar lo siguienteG
$autoload['packages'] = array(APPPATH.'third_party');
2i no eligi cargar ning:n &a-uete adicionalI esa lHnea se &uede cam*iar a G
$autoload['packages'] = array();
6o -ue de*erHa &ro&orcionar una ganancia en el rendimiento nominal si no >a, carga autom0tica de &a-uetes.
0%tuali8ar las !a"las de 6esiones de la &ase de Fatos
2i est0 usando sesiones de *ase de datos con la Bi*lioteca 2ession de CodeIgniterI &or @avor actualice su ta*la
ciBsessiones de la *ase de datos como se muestra a continuacinG
CREATE INDEX last_activity_idx ON ci_sessions(last_activity);
ALTER TABLE ci_sessions MODIFY user_agent VARCHAR(120);
0%tuali8ar de 2.0.1 a 2.0.2
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&la"ar todos los arc>ivos , directorios en su car&eta s;ste$ , reem&la"ar su arc>ivo inde1.p=p. 2i reali"
modi@icaciones en su arc>ivo inde1.p=p tendr0n -ue >acerse nuevamente en este.
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< Eli$inar las lla$adas de %arga de la &i"liote%a 6e%urit;
2e movi 2ecurit, al n:cleo , a>ora se carga autom0ticamente. Asegurarse de -uitar cual-uier llamada &ara
cargarI ,a -ue dar0 lugar a errores de P9P.
3aso 3< Hover HQB6e%urit;
2i est0 anulando o e<tendiendo la Bi*lioteca 2ecurit,I necesitar0 moverla a appli%ation%ore.
0%tuali8ar de 2.0.0 a 2.0.1
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
Gua del Usuario de CodeIgniter Versin 2.1.3 333
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace todos los arc>ivos , directorios en su car&eta s;ste$ , reem&lace su arc>ivo inde1.p=p. 2i se
>icieron modi@icaciones a su inde1.p=pI ellas se de*er0n >acer otra ve" en la nueva versin.
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< Ree$pla8ar %on#ig$i$es.p=p
1ste arc>ivo de con@iguracin se actuali" &ara contener m0s ti&os mimeI &or @avor co&iarlo a
appli%ation%on#ig$i$es.p=p.
3aso 3< Veri#i%ar si =a; #or$ularios 4ue envan al %ontrolador por de#e%to
1l com&ortamiento &or de@ecto &ara #or$Bopen+, cuando se lo llama*a sin &ar0metros solHa ser el envHo al
controlador &or de@ectoI &ero a>ora de%ar0 una accin vacHa JactioneNNK signi@icando -ue el @ormulario ser0 enviado
a la 786 actual. 2i el envHo al controlador &or de@ecto @ue el com&ortamiento es&eradoI se necesitar0 cam*iarlo deG
echo form_open(); //<form action="" method="post" accept-charset="utf-8">
a usar "aseBurl+,G
echo form_open('/'); //<form action="http://example.com/index.php/" method="post"
accept-charset="utf-8">
echo form_open(base_url()); //<form action="http://example.com/" method="post"
accept-charset="utf-8">
0%tuali8ar de 1./.2 a 2.0.0
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace todos los arc>ivos , directorios en su car&eta s;ste$ e1%epto su car&eta appli%ation.
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0Dustar getBdirB#ileBin#o+, donde sea ne%esario
6a versin /.0.0 trae un cam*io no com&ati*le &ara getBdirB#ileBin#o+, en el 9el&er $ile. 6os cam*ios no
com&ati*les son e<tremadamente raros en CodeIgniterI &ero ste sentimos esta*a %usti@icado de*ido a lo @0cil -ue
era crear graves &ro*lemas de rendimiento del servidor. 2i necesita recursividad donde est0 usando esta @uncin
>el&erI cam*ie tales instancias esta*leciendo el segundo &ar0metroI ?topBlevelBonl; a >076EG
get_dir_file_info('/ruta/al/directorio', ?@AB.);
3aso 3< Convertir sus 3lugins en .elpers
CodeIgniter /.0.0 se des>ace del sistema de NPluginN ,a -ue su @uncionalidad es idntica a la de los 9el&ersI &ero
no e<tensi*le. 3ecesitar0 renom*rar su arc>ivo de &lugin de #ilena$eBpi.p=p a #ilena$eB=elper.p=pI
Gua del Usuario de CodeIgniter Versin 2.1.3 334
moverlos a su car&eta =elpers , cam*iar todas las instancias deG
$this->load->plugin('foo');
aG
$this->load->helper('foo');
3aso -< 0%tuali8ar datos en%riptados al$a%enados
:ota< 2i la a&licacin no utili"a la *i*lioteca de ci@radoI no almacena los datos encri&tados de @orma
&ermanenteI o est0 en un entorno -ue no admite 'cr,&tI &uede omitir este &aso.
6a *i*lioteca 1ncr,&t tuvo una cantidad de me%orasI algunas &ara la @ortale"a de la encri&tacin , otras &ara el
rendimientoI lo -ue tiene la inevita*le consecuencia de no &ermitir m0s decodi@icar datos encri&tados con la
versin original de esta *i*lioteca. Para a,udar con la transicinI se agreg un nuevo mtodoI
en%odeB#ro$Blega%;+, -ue decodi@icar0 los datos con el algoritmo original , devolver0 una cadena recodi@icada
usando los mtodos me%orados. 1sto le &ermitir0 reem&la"ar @0cilmente datos encri&tados vie%os con datos
encri&tados nuevos en su a&licacinI sea tanto al vuelo como en masa.
Por @avor leer cmo usar este mtodo en la documentacin de la *i*lioteca 1ncr,&t.
3aso )< Eli$inar las lla$adas de %arga para el =elper de %o$pati"ilidad
1l >el&er de com&ati*ilidad se elimin del n:cleo de CodeIgniter. Codos los mtodos en l de*erHan estar
nativamente dis&oni*les en las versiones so&ortadas de P9P.
3aso `< 0%tuali8ar la e1tensin de %lases
A>ora todas las clases del n:cleo est0n &re@i%as con CIB. Actualice los 'odelos , Controladores &ara e<tender
CIBHodel , CIBControllerI res&ectivamente.
3aso /< 0%tuali8ar las lla$adas al Constru%tor 3adre
Codas las clases nativas de CodeIgniter usan a>ora la convencin BB%onstru%t+, de P9P 4. Por @avor actualice las
*i*liotecas e<tendidas &ara llamar a parent<<BB%onstru%t+,.
3aso V< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1./.1 a 1./.2
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
s;ste$%odeigniter
s;ste$data"ase
s;ste$=elpers
Gua del Usuario de CodeIgniter Versin 2.1.3 335
s;ste$language
s;ste$li"raries
inde1.p=p
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< Eli$inar =eader+, de la plantilla del error -0-
2i est0 usando =eader+, en su &lantilla del error #0#I tal como el caso con la &lantilla errorB-0-.p=p &or de@ecto
mostrada a*a%oI -uite esa lHnea de cdigo.
<?php header("HTTP/1.1 404 Not Found"); ?>
A>ora los enca*e"ados de estado #0# se mane%an adecuadamente en el mtodo s=oCB-0-+,.
3aso 3< Con#ir$ar su s;ste$Bpat=
2i actuali" el arc>ivo inde1.p=pI con@irme -ue la varia*le ?s;ste$Bpat= est0 esta*lecida a la car&eta del
sistema de su a&licacin.
3aso -< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1./.0 a 1./.1
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
s;ste$%odeigniter
s;ste$data"ase
s;ste$=elpers
s;ste$language
s;ste$li"raries
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.`.3 a 1./.0
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
Gua del Usuario de CodeIgniter Versin 2.1.3 336
s;ste$%odeigniter
s;ste$data"ase
s;ste$=elpers
s;ste$language
s;ste$li"raries
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar su !a"la de 6esiones
2i est0 usando la clase 2ession en su a&licacinI R si est0 almacenando datos de sesin en la *ase de datosI tiene
-ue agregar una nueva columna llamada userBdata a su ta*la de sesiones. A-uH est0 en e%em&lo de lo cmo se
verHa esta columna en ',2L6G
user_data text NOT NULL
Para agregar esta columnaI e%ecutar0 una consulta similar a estaG
ALTER TABLE `ci_sessions` ADD `user_data` text NOT NULL
1ncontrar0 m0s in@ormacin acerca de la nueva @uncionalidad de sesiones en la &0gina de la clase 2ession.
3aso 3< 0%tuali8ar su 6inta1is de Valida%in
1ste es un &aso op%ional &ero recomendado &ara gente -ue usa actualmente la clase !alidation. CI 1.7 introduce
una nueva clase de !alidacin de $ormulariosI -ue reem&la"a a la antigua *i*lioteca de !alidacin. De%amos la
versin vie%a &ara -ue las a&licaciones e<istentes -ue la usan no se rom&anI &ero lo animamos a migrar a la nueva
versin tan &ronto como sea &osi*le. Por @avorI lea las instrucciones cuidadosamente ,a -ue la nueva *i*lioteca
@unciona un &oco di@erenteI , tiene varias caracterHsticas nuevas.
3aso -< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.`.2 a 1.`.3
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
s;ste$%odeigniter
s;ste$data"ase
s;ste$=elpers
s;ste$language
s;ste$li"raries
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
Gua del Usuario de CodeIgniter Versin 2.1.3 337
3aso 2< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.`.1 a 1.`.2
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
s;ste$%odeigniter
s;ste$data"ase
s;ste$=elpers
s;ste$language
s;ste$li"raries
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< Clave de En%ripta%in
2i est0 usando sesionesI a*ra appli%ation%on#ig%on#ig.p=p , veri@i-ue -ue esta*leci una clave de
encri&tacin.
3aso 3< 0r%=ivo Constants
Co&iar appli%ation%on#ig%onstants.p=p a su instalacin , modi@icarlo si es necesario.
3aso -< 0r%=ivo Hi$es
8eem&la"ar appli%ation%on#ig$i$es.p=p con la versin descargada. 2i agreg ti&os mime &ersonali"adosI
de*er0 volver a agregarlos.
3aso )< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.`.0 a 1.`.1
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
s;ste$%odeigniter
s;ste$data"ase
s;ste$=elpers
s;ste$language
s;ste$li"raries
Gua del Usuario de CodeIgniter Versin 2.1.3 338
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.).- a 1.`.0
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
s;ste$%odeigniter
s;ste$data"ase
s;ste$=elpers
s;ste$li"raries
s;ste$plugins
s;ste$language
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0gregar ti$eBtoBupdate a su %on#ig.p=p
Agregar lo siguiente a appli%ation%on#ig%on#ig.p=p con otras o&ciones de con@iguracin de sesinG
$config['sess_time_to_update'] = 300;
3aso 3< 0gregar ?autoloadKL$odelLM
Agregar lo siguiente a appli%ation%on#igautoload.p=pG
/*
| -------------------------------------------------------------------
| Auto-load Model files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['model'] = array('my_model');
|
*/
$autoload['model'] = array();
3aso -< 0gregar a su data"ase.p=p
9acer los siguientes cam*ios a su arc>ivo appli%ation%on#igdata"ase.p=pG
Agregar la siguiente varia*le antes de las o&ciones de con@iguracin de la *ase de datosI con ?a%tiveBgroup
aactiveBrecord e C871`
Gua del Usuario de CodeIgniter Versin 2.1.3 339
Luitar lo siguiente de las o&ciones de con@iguracin de la *ase de datosG
$db['default']['active_r'] = TRUE;
Agregar lo siguiente a las o&ciones de con@iguracin de la *ase de datosG
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
3aso )< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.).3 a 1.).-
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
appli%ation%on#ig$i$es.p=p
s;ste$%odeigniter
s;ste$data"ase
s;ste$=elpers
s;ste$li"raries
s;ste$plugins
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0gregar el %onDunto de %ara%teres a su %on#ig.p=p
Agregar lo siguiente a appli%ation%on#ig%on#ig.p=pG
/*
|--------------------------------------------------------------------------
| Default Character Set
|--------------------------------------------------------------------------
|
| Esto determina que conjunto de caracteres se usa por defecto en varios
| mtodos que necesitan que se provea un conjunto de caracteres.
|
*/
$config['charset'] = "UTF-8";
3aso 3< Carga auto$'ti%a de ar%=ivos de idio$as
2i -uiere cargar cual-uier arc>ivo de idioma autom0ticamenteI agregue esta lHnea a
appli%ation%on#igautoload.p=p<
$autoload['language'] = array();
Gua del Usuario de CodeIgniter Versin 2.1.3 340
3aso -< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.).2 a 1.).3
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
s;ste$data"asedrivers
s;ste$=elpers
s;ste$li"rariesInput.p=p
s;ste$li"raries7oader.p=p
s;ste$li"raries3ro#iler.p=p
s;ste$li"raries!a"le.p=p
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.).0 a 1.).2
:ota< 6as instrucciones en esta &0gina asumen -ue est0 e%ecutando la versin 1.4.0 o 1.4.1. 2i no actuali" a
esa versinI >0galo &rimero.
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
s;ste$=elpersdoCnloadB=elper.p=p
s;ste$=elpers#or$B=elper.p=p
s;ste$li"raries!a"le.p=p
s;ste$li"rariesUserBagent.p=p
s;ste$li"rariesE1%eptions.p=p
s;ste$li"rariesInput.p=p
s;ste$li"rariesRouter.p=p
s;ste$li"raries7oader.p=p
s;ste$li"rariesI$ageBli".p=p
s;ste$languageenglis=unitBtestBlang.p=p
s;ste$data"aseF&Ba%tiveBre%.p=p
s;ste$data"asedrivers$;s4li$;s4liBdriver.p=p
%odeigniter
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
Gua del Usuario de CodeIgniter Versin 2.1.3 341
3aso 2< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.-.1 a 1.).0
:ota< 6as instrucciones en esta &0gina asumen -ue 7d est0 e%ecutando la versin 1.#.1. 2i no actuali" a esta
versinI >0galo &rimero.
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
appli%ation%on#iguserBagents.p=p Jarc>ivo nuevo &ara 1.4K
appli%ation%on#igs$ile;s.p=p Jarc>ivo nuevo &ara 1.4K
%odeigniter
data"ase Jcar&eta nueva &ara 1.4. 8eem&la"a a la car&eta NdriversNK
=elpers
language
li"raries
s%a##olding
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar su ar%=ivo data"ase.p=p
A*ra su arc>ivo appli%ation%on#igdata"ase.p=p , agregue estos Htems nuevosG
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
3aso 3< 0%tuali8ar su ar%=ivo %on#ig.p=p
A*ra su arc>ivo appli%ation%on#ig%on#ig.p=p , agregue estos nuevos HtemsG
/*
|--------------------------------------------------------------------------
| Class Extension Prefix
|--------------------------------------------------------------------------
|
| Este tem le permite establecer el prefijo nombre de archivo/nombre de clase
| al extender bibliotecas nativas. Para ms informacin lea la gua del usuario:
|
| http://codeigniter.com/user_guide/general/core_classes.html
| http://codeigniter.com/user_guide/general/creating_libraries.html
|
*/
$config['subclass_prefix'] = 'MY_';
Gua del Usuario de CodeIgniter Versin 2.1.3 342
/*
|--------------------------------------------------------------------------
| Rewrite PHP Short Tags
|--------------------------------------------------------------------------
|
| Si su aplicacin PHP no tiene habilitado el soporte para etiquetas cortas, CI
| puede sobrescribir las etiquetas al vuelo, permitindole usar la sintaxis
| en sus archivos de vista. Las opciones son TRUE o FALSE (booleanos)
|
*/
$config['rewrite_short_tags'] = FALSE;
1n el mismo arc>ivo 4uite este HtemG
/*
|--------------------------------------------------------------------------
| Enable/Disable Error Logging
|--------------------------------------------------------------------------
|
| Si le gustara que los mensajes de depuracin o error se registren, establezca
| esta variable a TRUE (booleano). Nota: Tiene que establecer los permisos de
| archivo en la carpeta "logs" de tal forma que se pueda escribir.
|
*/
$config['log_errors'] = FALSE;
1l registro de errores a>ora est0 des>a*ilitado sim&lemente @i%ando el um*ral a cero.
3aso -< 0%tuali8ar su ar%=ivo inde1.p=p prin%ipal
2i est0 e%ecutando un arc>ivo inde1.p=p originalI sim&lemente reem&lace su versin con la nueva.
2i su arc>ivo inde1.p=p tiene modi@icaciones internasI &or @avor agregue sus modi@icaciones al nuevo arc>ivo ,
:selo.
3aso )< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.-.0 a 1.-.1
:ota< 6as instrucciones en esta &0gina asumen -ue 7d est0 e%ecutando la versin 1.#.0. 2i no actuali" a esta
versinI >0galo &rimero.
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
%odeigniter
drivers
=elpers
Gua del Usuario de CodeIgniter Versin 2.1.3 343
li"raries
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar su ar%=ivo %on#ig.p=p
A*ra su arc>ivo appli%ation%on#ig%on#ig.p=p , agregue estos nuevos HtemsG
/*
|--------------------------------------------------------------------------
| Output Compression
|--------------------------------------------------------------------------
|
| Enables Gzip output compression for faster page loads. When enabled,
| the output class will test whether your server supports Gzip.
| Even if it does, however, not all browsers support compression
| so enable only if you are reasonably sure your visitors can handle it.
|
| VERY IMPORTANT: If you are getting a blank page when compression is enabled it
| means you are prematurely outputting something to your browser. It could
| even be a line of whitespace at the end of one of your scripts. For
| compression to work, nothing can be sent before the output buffer is called
| by the output class. Do not "echo" any values with compression enabled.
|
*/
$config['compress_output'] = FALSE;
3aso 3< Reno$"rar un Ite$ de Carga 0uto$'ti%a
A*ra el siguiente arc>ivoG appli%ation%on#igautoload.p=p
1ncuentre este Htem del arra,G
$autoload['core'] = array();
R renm*relo a estoG
$autoload['libraries'] = array();
1stos cam*ios se >icieron &ara me%orar la claridad ,a -ue algunos usuarios no esta*an seguros -ue sus *i*liotecas
se &udieran cargar autom0ticamente.
3aso -< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.3.3 a 1.-.0
:ota< 6as instrucciones en esta &0gina asumen -ue 7d est0 e%ecutando la versin 1... 2i no actuali" a esta
versinI >0galo &rimero.
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
Gua del Usuario de CodeIgniter Versin 2.1.3 344
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
appli%ation%on#ig=ooIs.p=p
appli%ation%on#ig$i$es.p=p
%odeigniter
drivers
=elpers
init
language
li"raries
s%a##olding
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar su ar%=ivo %on#ig.p=p
A*ra su arc>ivo appli%ation%on#ig%on#ig.p=p , agregue estos nuevos HtemsG
/*
|--------------------------------------------------------------------------
| Enable/Disable System Hooks
|--------------------------------------------------------------------------
|
| If you would like to use the "hooks" feature you must enable it by
| setting this variable to TRUE (boolean). See the user guide for details.
|
*/
$config['enable_hooks'] = FALSE;
/*
|--------------------------------------------------------------------------
| Allowed URL Characters
|--------------------------------------------------------------------------
|
| This lets you specify which characters are permitted within your URLs.
| When someone tries to submit a URL with disallowed characters they will
| get a warning message.
|
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_-
|
| Leave blank to allow all characters -- but only if you are insane.
|
| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!!
|
*/
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-';
3aso 3< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
Gua del Usuario de CodeIgniter Versin 2.1.3 345
0%tuali8ar de 1.3.2 a 1.3.3
:ota< 6as instrucciones en esta &0gina asumen -ue 7d est0 e%ecutando la versin 1../. 2i no actuali" a esta
versinI >0galo &rimero.
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
%odeigniter
drivers
=elpers
init
li"raries
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar sus Hodelos
2i :G est0 usando la @uncionalidad de 'odelos de CodeIgniterI >aga caso omiso a este &aso.
Desde la versin 1..I CodeIgniter no conecta autom0ticamente a la *ase de datos cuando el modelo se carga.
1sto le &ermite una ma,or @le<i*ilidad en determinar -ue *ase de datos -uerrHa usar con sus modelos. 2i su
a&licacin no est0 a su *ase de datos antes -ue a un modelo -ue se est0 cargandoI 7d tendr0 -ue actuali"ar su
cdigo. 9a, varias o&ciones &ara conectarI como se descri*e a-uH.
3aso 3< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.3.1 a 1.3.2
:ota< 6as instrucciones en esta &0gina asumen -ue 7d est0 e%ecutando la versin 1..1. 2i no actuali" a esta
versinI >0galo &rimero.
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
drivers
init
li"raries
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
Gua del Usuario de CodeIgniter Versin 2.1.3 346
3aso 2< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.3 a 1.3.1
:ota< 6as instrucciones en esta &0gina asumen -ue 7d est0 e%ecutando la versin 1.. 2i no actuali" a esta
versinI >0galo &rimero.
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
drivers
initinitBunitBtest.p=p Jnuevo en 1..1K
language
li"raries
s%a##olding
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
3aso 2< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de 1.2 a 1.3
:ota< 6as instrucciones en esta &0gina asumen -ue 7d est0 e%ecutando la versin 1./. 2i no actuali" a esta
versinI >0galo &rimero.
Antes de reali"ar una actuali"acin de*erHa sacar de lHnea su sitio reem&la"ando el arc>ivo inde1.p=p con uno
est0tico.
3aso 1< 0%tuali8ar sus ar%=ivos CodeIgniter
8eem&lace estos arc>ivos , directorios de su car&eta s;ste$ con las nuevas versionesG
appli%ation$odels Jnuevo en 1.K
%odeigniter Jnuevo en 1.K
drivers
=elpers
init
language
li"raries
plugins
s%a##olding
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
Gua del Usuario de CodeIgniter Versin 2.1.3 347
3aso 2< 0%tuali8ar sus ar%=ivos de error
6a versin 1. contiene dos nuevas &lantillas de error u*icadas en appli%ationerrorsI , &or consistencia de
nom*res las otras &lantillas de error se renom*raron.
2i no &ersonali" ninguna &lantilla de errorI sim&lemente reem&lace esta car&etaG
appli%ationerrors
2i personali8 sus &lantillas de errorI renm*relas asHG
-0-.p=p S errorB-0-.p=p
error.p=p S errorBgeneral.p=p
errorBd".p=p JnuevaK
errorBp=p.p=p JnuevaK
3aso 3< 0%tuali8ar su ar%=ivo inde1.p=p
Por @avorI a*ra su arc>ivo inde1.p=p &rinci&al Ju*icado en su raH"K. Al @inal del arc>ivoI cam*ie estoG
require_once BASEPATH.'libraries/Front_controller'.EXT;
A estoG
require_once BASEPATH.'codeigniter/CodeIgniter'.EXT;
3aso -< 0%tuali8ar su ar%=ivo %on#ig.p=p
A*ra su arc>ivo appli%ation%on#ig%on#ig.p=p , agregue estos nuevos elementosG
/*
|------------------------------------------------
| URL suffix
|------------------------------------------------
|
| This option allows you to add a suffix to all URLs.
| For example, if a URL is this:
|
| example.com/index.php/products/view/shoes
|
| You can optionally add a suffix, like ".html",
| making the page appear to be of a certain type:
|
| example.com/index.php/products/view/shoes.html
|
*/
$config['url_suffix'] = "";
/*
|------------------------------------------------
| Enable Query Strings
|------------------------------------------------
|
| By default CodeIgniter uses search-engine and
| human-friendly segment based URLs:
Gua del Usuario de CodeIgniter Versin 2.1.3 348
| example.com/who/what/where/
|
| You can optionally enable standard query string
| based URLs:
|
| example.com?who=me&what=something&where=here
|
| Options are: TRUE or FALSE (boolean)
|
| The two other items let you set the query string "words"
| that will invoke your controllers and functions:
| example.com/index.php?c=controller&m=function
|
*/
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
3aso )< 0%tuali8ar su ar%=ivo data"ase.p=p
A*ra su arc>ivo appli%ation%on#igdata"ase.p=p , agregue estos nuevos elementosG
$db['default']['dbprefix'] = "";
$db['default']['active_r'] = TRUE;
3aso `< 0%tuali8ar su gua del usuario
Por @avor reem&lace su co&ia de la guHa del usuario con la nueva versinI inclu,endo los arc>ivos de im0genes.
0%tuali8ar de &eta 1.1 a >inal 1.2
:ota< 2i tiene alg:n arc>ivo desarrollado a medidaI &or @avor >aga una co&ia &rimero.
Para actuali"ar a la !ersin 1./ &or @avor reem&lace los siguiente directorios con las nuevas versionesG
drivers
=elpers
init
language
li"raries
plugins
s%a##olding
Por @avorI tam*in reem&lace la co&ia local de la guHa del usuario con la nueva versin.
0%tuali8ar de &eta 1.0 a &eta 1.1
Para actuali"ar a Beta 1.1I &or @avor e%ecute los siguientes &asosG
3aso 1< Ree$pla8ar el ar%=ivo inde1
8eem&lace su arc>ivo inde1.p=p &rinci&al con el nuevo arc>ivo inde1.p=p. 3otaG 2i renom*r su car&eta
s;ste$ necesitar0 editar esta in@ormacin en un nuevo arc>ivo.
Gua del Usuario de CodeIgniter Versin 2.1.3 349
3aso 2< Reu"i%ar la %arpeta %on#ig
1sta versin de CodeIgniter a>ora &ermite varios con%untos de Na&licacionesN &ara com&artir un con%unto com&leto
de arc>ivos de *ac;end. Para >a*ilitar cada a&licacin &ara -ue tenga sus &ro&ios valores de con@iguracinI el
directorio %on#ig a>ora tiene -ue estar dentro de su car&eta appli%ationI &or lo -ue de*er0 moverla a>H.
3aso 3< Ree$pla8ar dire%torios
8eem&lace los siguientes directorios con sus nuevas versionesG
drivers
=elpers
init
li"raries
s%a##olding
3aso -< 0gregar el ar%=ivo de idio$a del %alendario
9a, un nuevo arc>ivo de idioma corres&ondiente a la nueva clase de calendario -ue se tiene -ue agregar a su
car&eta de idiomas. Agregue el siguiente elemento a su versinG languageenglis=%alendarBlang.p=p.
3aso )< Editar el ar%=ivo %on#ig
1l arc>ivo original appli%ation%on#ig%on#ig.p=p tiene un error de ti&eo. A*ra el arc>ivo , *us-ue los Htems
relacionados a las coo;iesG
$conf['cookie_prefix'] = "";
$conf['cookie_domain'] = "";
$conf['cookie_path'] = "/";
Cam*ie el nom*re del arra, de ?%on# a ?%on#igI como estoG
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";
$inalmenteI agregue el siguiente nuevo Htem al arc>ivo de con@iguracin J, edite la o&cin si es necesarioKG
/*
|------------------------------------------------
| URI PROTOCOL
|------------------------------------------------
|
| This item determines which server global
| should be used to retrieve the URI string. The
| default setting of "auto" works for most servers.
| If your links do not seem to work, try one of
| the other delicious flavors:
|
| 'auto' Default - auto detects
| 'path_info' Uses the PATH_INFO
| 'query_string' Uses the QUERY_STRING
*/
$config['uri_protocol'] = "auto";
Gua del Usuario de CodeIgniter Versin 2.1.3 350
0ne1o II< Registro de Ca$"ios
Versin 2.1.3
$ec>a de 6i*eracinG 8 de octu*re de /01/
Errores %orregidos para 2.1.3
Corregido el error Jm14#K \ 1l mtdo getB$etadata+, de almacenamiento en cac> *asada en arc>ivo
usa*a una clave de arra, ine<istente &ara *uscar el valor CC6.
Corregido el error Jm11#K \ 1l mtodo sessBdestro;+, de la &i"liote%a 6ession no destruHa el arra,
userdata.
Corregido el error donde la &i"liote%a 3ro#iler &resentana el error EBW0R:I:G si los datos del usuario
de la sesin contenian o*%etos.
Corregido el error Jm16..K ( 6a &i"liote%a Higration ignora*a el valor de ?%on#igKL$igrationBpat=LM.
Corregido el error Jm//7K ( Input 7i"rar; &ermitHa la su&lantacin sin condiciones de direcciones IP de
clientes de 9CCP mediante el enca*e"ado .!!3BC7IE:!BI3.
Corregido el error Jm.07K ( 6a &i"liote%a Input ignora*a los enca*e"ados
.!!3BYBC7U6!ERBC7IE:!BI3 , .!!3BYBC7IE:!BI3 al veri@icar &ro<ies.
Corregido el error Jm.#0K ( %sr#Bveri#;+, solHa esta*lecer la coo;ie C28$ al &rocesar una solicitud P)2C
sin datos P)2C realesI lo -ue resulta*a en la validacin de una solicitud -ue de*erHa considerarse inv0lida.
Corregido el error en la &i"liote%a 6e%urit; donde una coo;ie C28$ se crea*a a:n cuando
?%on#igKL%sr#Bprote%tionLM @uera >076E.
Corregido el error Jm1714K \ 6a &i"liote%a Input dis&ara*a %sr#Bveri#;+, en solicitudes C6I.
:ota< Para ver los cam*ios de las versiones anterioresI lea el arc>ivo c>angelog.>tml. Cam*in &uede consultar
el mismo arc>ivo en la car&eta userBguide de su instalacin.

Das könnte Ihnen auch gefallen