Sie sind auf Seite 1von 38

GUIA BASICA DE

YII FRAMEWORK
Por: Gabriel Duarte
gabrielduarte77@gmail.com
Gua Bsica de Yii Framework
NDICE
GUI B!I" D# YII F$%#&'$(............................................................................................................)
I*!+,*D' YII Y P$I%#$ P,I""I-*...............................................................................................
"$#*D' %'D#,'! Y "$UD P$+I$ D# U* B!# D# D+'!...................................................../
,#*GU0# Y 1I!+ P'$ D#F#"+'.............................................................................................................2
%'DIFI"*D' #, %#*3..............................................................................................................................7
U+#*+I""I-* D# U!U$I'!.................................................................................................................4
",1#! F'$5*#! #* 1I!+!.................................................................................................................)6
1,ID*D' ,'! F'$%U,$I'!.............................................................................................................)7
'$D#* P'$ D#F#"+' Y "'*DI"I'* #8+$ #* G$ID.......................................................................)7
F#"9! "'* "0UID+#PI"(#$................................................................................................................):
B3!;U#D! P'$ F#"9! "'* !YD+#"',U%*...............................................................................6<
#8P'$+$ D#, "G$ID1I#& PDF..........................................................................................................66
$#P'$+#! P$+I$ D# U* B3!;U#D...............................................................................................67
"'%B'! D#P#*DI#*+#!............................................................................................................................6:
"%P' "'* U+'"'%P,#+$.................................................................................................................)
*' %'!+$$ I*D#8.P9P #* ,! U$,......................................................................................................
GU$D$ U+'%5+I"%#*+# U!U$I' Y F#"9 D# "$#"I-* Y %'DIFI""I-*............./
9"#$ F'$%U,$I' P$ %U,+IP,#! %'D#,'!.............................................................................7
"%P'! #*%!"$D'! #* F'$%U,$I'........................................................................................:
6
Gua Bsica de Yii Framework
INSTALANDO YII Y PRIMERA APLICACIN
,o =rimero >ue ?acemos es ba@arAos la ultima BersiCA de Yii Framework desde
?tt=:DDwww.EiiFramework.com la descom=rimimos eA Auestro directorio webG le cambiamos el Aombre a HEiiI
E le damos =ermisos de lectura.
brimos la coAsolaG Aos ubicamos eA la www E colocamos: EiiDFrameworkDEiic weba==
AombreJa=licacioAG Aos Ba a =reguAtar si >ueremos crear uAa a=licaciCA web eA ese directorio E le decimos
>ue si.
"oA esto ?emos creado Auestra =rimera a=licaciCA eA Yii. #A el =rCKimo ca=itulo se eK=licar como
coAectar Auestra a=licaciCA coA uAa base de datos E como crear el modelo E el "$UD de las tablas.
.
Gua Bsica de Yii Framework
CREANDO MODELOS Y CRUD A PARTIR DE
UNA BASE DE DATOS
UAa BeL creada la a=licaciCA abrimos el arc?iBo D=rotectedDcoAFigDadmiA.=?= E modiFicamos lo
siguieAte:
'modules'=>array(
/*
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'Enter Your Password ere',
'ip!ilters'=>array('"#$.%.%."','&&"'',
',
*/
),
DescomeAtamos el arreglo gii E colocamos el =assword >ue >ueramosG el modulo GII es el >ue Aos
aEuda a crear el modelo E el "$UD de las tablas de Auestra base de datosG a coAtiAuaciCA Bamos a coAFigurar
la coAeKiCAG =ara ello debemos comeAtar el siguieAte arreglo:
'dbMNOarraEP
'coAAectioA!triAgM NO 's>lite:M.dirAameP__FILE__Q.'D..DdataDtestdriBe.dbMG
QG
Y creamos Auestro AueBo arreglo de coAeKiCA as:
'dbMNOarraEP
'coAAectioA!triAgM NO '=gs>l:?ostNlocal?ostRdbAameNAombreJbaseJdatosMG
'emulatePre=areM NO trueG
'userAameM NO 'usuariMG
'=asswordM NO '!"a#e$usuariMG
'c?arsetM NO 'utF:MG
QG
/
Gua Bsica de Yii Framework
Para dirigirAos al modelo GII co=iamos eA Auestra barra de direccioAes algo como
?tt=:DDlocal?ostDAombreJa=licacioADiAdeK.=?=SrNgiiG Aos =ide el =assword >ue coAFiguramos aAteriormeAteG
uAa BeL deAtro le damos a H%odel GeAeratorI E colocamos el Aombre de la tablaG le damos PreBiew E luego
GeAerateG a coAtiAuaciCA creamos el "$UD eA H"rud GeAeratorI colocaAdo el Aombre del modelo >ue
acabamos de crear. !i logramos coAectarAos satisFactoriameAte a la base de datos Aos mostrar algo como la
siguieAte imageA.
"oA esto ?emos creado todas las BistasG el coAtrolador E el modelo =ara esa tabla eA =articularG las
Bistas soA: createG u=dateG iAdeKG admiA E Biew.
Para agregar el modelo AueBo al meAT Aos Bamos al arc?iBo D=rotectedDBiewsDlaEoutsDmaiA.=?= E
modiFicamos el arreglo de items del meAT agregAdole uAo AueBo de la siguieAte Forma:
arraEP'labelMNO'#stadoMG 'urlMNOarraEP'DestadoDadmiAMQQG
Ya =odemos =robar >ue =odemos crearG modiFicar E elimiAar registros de Auestro modelo.
7
Gua Bsica de Yii Framework
LENGUA%E Y &ISTA POR DEFECTO
#A D=rotectedDcoAFigDadmiA.=?= al FiAal colocar deAtro del arreglo =riAci=al:

'laAguageMNO'esMG DD #ste es el leAgua@e eA el >ue >uieres >ue muestre las cosas
'source,aAguageMNO'eAMG DD #ste es el leAgua@e =or deFecto de los arc?iBos
'deFault"oAtrollerMNO'coAtroladorDadmiAMG DD 1ista =or deFecto
#sto Ao Aos traduce las Bistas com=letameAteG muc?as cosas ?aE >ue cambiarlas a maAo.
!i >ueremos colocar uA FaBicoA eA el ?ead de =rotectedDBiewsDlaEoutsDmaiA.=?= colocamos:
<link rel="shortcut icon" href="<?php echo Yii::app()->reuest->!ase"rl# ?
>$ima%es$icon&pn%" type="ima%e$'-icon" $>
2
Gua Bsica de Yii Framework
MODIFICANDO EL MEN'
coAtiAuaciCA Bamos a modiFicar el meATG de tal Forma >ue Aos >uede mas es=acio =ara las Bistas E
las accioAes de las Bistas PcrearG modiFicarG elimiAarQ se colo>ueA =or deba@o del meAT =riAci=al. Para eso
modiFicamos el D=rotectedDBiewsDlaEoutsDcolumA6.=?=:
U "ambiamos el Aombre del id del diB HsidebarI =or HmaiAmeAuI.
U "olocamos el AueBo diB HmaiAmeAuI Pcom=letoQ deAtro del diB coA classNHs=aAU)4I.
U "ambiamos classNHs=aAU)4I =or classIs=aAU67I.
U "omeAtamos las siguieAtes liAeas de cCdigo:
(this->!e%in)id%et('*ii&+id%ets&,-ortlet', array('title'=>'.perations',))#
'html.ptions'=>array('class'=>'operations'),
(this->end)id%et()#
#A el D=rotectedDBiewsDlaEoutsDmaiA.=?=:
U "omeAtamos las liAeas:
<?php if(isset((this->!readcrum!s)):?>
<?php (this->+id%et('*ii&+id%ets&,/readcrum!s', array('links'=>(this-
>!readcrum!s,))# ?>
<?php endif?>
l a=licar estos cambios el meAT >uedara mas o meAos as:
!i >ueremos uA meAT mas =oteAte =odemos usar la eKteAsiCA mbmeAuG ba@amos la eKteAsiCA de la
=agiAa oFicial de Yii E co=iamos la car=eta D=rotectedDeKteAsioAs
#A D=rotectedDBiewsDlaEoutsDmaiA.=?= cambiar el widget del "%eAu =or algo como:
<?php (this->+id%et('application&e'tensions&m!menu&0!0enu',array(
'items'=>array(
array('la!el'=>'1ome', 'url'=>array('$site$inde'')),
array('la!el'=>'-rincipal', 'url'=>array('$site$contact'),
7
Gua Bsica de Yii Framework
'items'=>array(
array('la!el'=>'"suarios', 'url'=>array('$usuario')),
array('la!el'=>',ontratos', 'url'=>array('$contrato')),
),
),
array('la!el'=>'-rue!a',
'items'=>array(
array('la!el'=>'2u! 3',
'url'=>array('$site$pa%e','4ie+'=>'su!3')),
array('la!el'=>'2u! 5',
'items'=>array(
array('la!el'=>'2u! su! 3',
'url'=>array('$site$pa%e','4ie+'=>'su!su!3')),
array('la!el'=>'2u! su! 5',
'url'=>array('$site$pa%e','4ie+'=>'su!su!5')),
),
),
),
),
),
))# ?>
l colocar el AueBo meAT segurameAte se Be eKtraVoG =ara eBitar esto debemos >uitar el
idNHmaiAmeAuI.
"oA estos cambios >ueda mas es=acio =ara las Bistas E el =e>ueVo meAT de la derec?a >ueda =or
deba@o del meAT =riAci=al.
:
Gua Bsica de Yii Framework
AUTENTICACIN DE USUARIOS
#ste es el s>l de la tabla doAde se guardaraA Auestros usuarios:
CREATE TABLE usuario (
id serial NOT NULL,
username character 4aryin%(356) NOT NULL,
pass+ord character 4aryin%(356) NOT NULL,
,.7289:;78 usuario<pkey PRIMARY KEY (id) )
WITH (.;=2=>:?2@)#
ALTER TABLE usuario .)7@9 TO post%res#
Debes crear el modelo E el "$UD de esta tabla coA el Gii
#A =rotectedDcom=oAeAtsDUserIdeAtitE.=?= sustituimos la clase UserIdeAtitE =or:
class "ser;dentity extends ,"ser;dentity
A
priate (<id#
p!"lic #!ncti$n authenticate()
A
(username=strtolo+er((this->username)#
(user="suario::model()->find('?.)@9(username)=?',array((username))#
if((user===n!ll)
(this->error,ode=sel#::@99.9<"2@97:0@<;7B:?;=#
else if(C(user->4alidate-ass+ord((this->pass+ord))
(this->error,ode=sel#::@99.9<-:22).9=<;7B:?;=#
else
A
(this-><id=(user->id#
(this->username=(user->username#
(this->error,ode=sel#::@99.9<7.7@#
D
return (this->error,ode==sel#::@99.9<7.7@#
D
p!"lic #!ncti$n %et;d()
A
return (this-><id#
4
Gua Bsica de Yii Framework
D
D
#A =rotectedDmodelsDUsuario.=?= agregar las siguieAtes FuAcioAes:
p!"lic #!ncti$n 4alidate-ass+ord((pass+ord)
A
return (this->hash-ass+ord((pass+ord)===(this->pass+ord#
D
p!"lic #!ncti$n hash-ass+ord((pass+ord)
A
return mdE((pass+ord)#
D
Para >ue la claBe se guarde eA %D7 al crear los usuarios agregar la siguieAte liAea eA la FuAciCA
actioA"reate del coAtrolador =rotectedDcoAtrollersDUsuario"oAtroller.=?=G ?acer lo mismo coA la FuAciCA
actioAU=date
(model->attri!utes=(<-.28F'"suario'G#
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&?;7@: : :H9@H:9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
(model->pass+ord=mdE((model->pass+ord)#
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
if((model->sa4e())

Para otorgar o deAegar =ermisos a usuarios tambiWA se modiFica el coAtrolador del modeloG eA este
caso =rotectedDcoAtrollersDUsuario"oAtroller.=?=G Bamos a la FuAciCA access$ules:
p!"lic #!ncti$n access9ules()
A
return array(
array('allo+',
'actions'=>array('inde'','4ie+'),
'users'=>array('I'),
),
array('allo+',
'actions'=>array('create','update'),
)<
Gua Bsica de Yii Framework
'users'=>array('J'),
),
array('allo+',
'actions'=>array('admin','delete'),
'users'=>array('J'),
),
array('deny',
'users'=>array('I'),
),
)#
D
#A el arreglo actioAs =oAemos las accioAes >ue tieAe el coAtrolador E eA users los usuariosG si
>ueremos >ue solo accedaA los >ue estA auteAticados =oAemos uAa M@M E si >ueremos >ue acceda cual>uier
=ersoAas usamos MXM
))
Gua Bsica de Yii Framework
CLA&ES FOR(NEAS EN &ISTAS
!u=oAieAdo >ue teAemos las siguieAtes tablas:
DoAde idJestado es claBe ForAea eA muAici=io E ?ace reFereAcia al id de la tabla estado.
l crear el modelo E el "$UD =ara ambas tablas coA la ?erramieAta Gii teAemos como resultado >ue
eA las distiAtas Bistas del modelo %uAici=io el estado al >ue =erteAece dic?o muAici=io siem=re a=arece
reFle@ado coA su idG =ara cambiar esto E >ue a=areLca el Aombre del estado eA las distiAtas Bistas debemos
cambiar Barias liAeas de cCdigoG a coAtiAuaciCA te eK=licamos como ?acerlo.
!i las relacioAamos bieA eA el gestor de base de datos Yii =or deFecto Aos coAFigura la relaciCA eAtre
ellasG DeFiAimos la relaciCA eA el modelo %uAici=io:
p!"lic #!ncti$n relations()
A
return array('estado' => array(sel#::/@?.7H2<8., '@stado', 'id<estado') )#
D
,a me@or Forma de re=reseAtar a los estados eA los Formularios de creaciCA E modiFicaciCA de
muAici=ios es coA uA combo boK Pdro= dowA listQG =ara eso colocamos la siguieAte liAea eA el arc?iBo
D=rotectedDBiewsDmuAici=ioDJForm.=?=
<?php echo (form->drop=o+n?ist((model,'id<estado', ,1tml::list=ata(@stado::model()-
>find:ll(), 'id', 'nom!re<estado'))# ?>
#A lugar de:
<?php echo (form->te't>ield((model,'id<estado')# ?>
Para colocar el Aombre del estado eA el HDetail 1iewI de cada muAici=io Aos Bamos al arc?iBo
D=rotectedDBiewsDmuAici=ioDJBiew.=?= E modiFicamos las siguieAtes liAeas:
)6
Gua Bsica de Yii Framework
<?php echo ,1tml::encode((data->%et:ttri!ute?a!el('id<estado'))# ?>:
<?php echo ,1tml::encode((data->id<estado)# ?>
E colocamos:
<?php echo ,1tml::encode((data->%et:ttri!ute?a!el('7om!re @stado'))# ?>:
<?php echo ,1tml::encode((data->estado->nom!re<estado)# ?>
!i >ueremos >ue a=areLca el Aombre del estado eA el 1iew P%ostrarQ del muAici=io abrimos el
arc?iBo D=rotectedDBiewsDmuAici=ioDBiew.=?= E Aos Fi@amos eA el siguieAte cCdigo:
<?php (this->+id%et('*ii&+id%ets&,=etailBie+', array(
'data'=>(model,
'attri!utes'=>array(
'id',
'nom!re<municipio',
'id<estado',
),
))# ?>
doAde dice MidJestadoM cambiamos =or Mestado.AombreJestadoM
!i deseamos >ue a=areLca el Aombre del estado eA el listado de muAici=ios P%aAageQ modiFicamos eA
D=rotectedDBiewsDmuAici=ioDadmiA.=?=
<?php (this->+id%et('*ii&+id%ets&%rid&,HridBie+', array(
'id'=>'municipio-%rid',
'data-ro4ider'=>(model->search(),
'filter'=>(model,
'columns'=>array(
'id',
'nom!re<municipio',
'id<estado',
cambiamos MidJestadoM =or
array ('name'=>'id<estado','4alue'=>'(data->estado->nom!re<estado','type'=>'te't',)
dicioAalmeAteG =ara >ue la bTs>ueda =ueda FuAcioAar Aos Bamos a D=rotectedDmodelsD%uAici=io.=?=
E modiFicamos la FuAciCA searc?.
).
Gua Bsica de Yii Framework
Y doAde a=arece:
(criteria->compare('id<estado',(this->id<estado)#
colocamos:
(criteria->+ith =array('estado')#
(criteria->add2earch,ondition('estado&nom!re<estado', (this->id<estado)#

2i ueremos ue trai%a tanto con minKsculas o mayKsculas colocamos:
(criteria->add2earch,ondition('?.)@9(estado&nom!re<estado)', strtolo+er((this-
>id<estado))#
!i >ueremos >ue la bTs>ueda eA el admiA se ?aga mediaAte uA combo colocamos:
array(
'header'=>'@stado',
$/ (om)re de la columna en el *Grid+iew
'name'=>'id<estado',
// (om)re del dato en el modelo
'4alue' => '(data->estado->nom!re<estado',
// +alor a mostrar
'html.ptions'=>array('style'=>'te't-ali%n: center','+idth'=>'6Lp''),
// ,pciones -M.
'filter' => ,1tml::list=ata(8ipo.r%H::model()->find:ll(), 'id<estado',
'nom!re<estado'), // *olocamos un com)o en el /iltro
),
!i >ueremos crear uA combo cuEos datos Ao =roBeAgaA de la base de datos lo ?acemos de esta Forma:
Yo=tioAs N arraEP
arraEP'idJti=oJorgMNO)G 'descri=cioAMNO'Dato )MQG arraEP'idJti=oJorgMNO6G 'descri=cioAMNO'Dato 6MQG
QR
arraEP '?eaderMNO'PruebaMG 'AameMNO'idJti=oJorgMG 'BalueM NO 'YdataUOid+i=o'rgUOdescri=cioAMG
'?tml'=tioAsMNOarraEP'stEleMNO'teKtUaligA: ceAterMG'widt?MNO':<=KMQG
'FilterMNO"9tml::listDataPYo=tioAsG 'idJti=oJorgMG 'descri=cioAMQG QG
)/
Gua Bsica de Yii Framework
&ALIDANDO LOS FORMULARIOS
!i >ueremos Balidar Auestros cam=os lo ?acemos eA el mWtodo rulesPQ del modelo eA cuestiCA:
)u*"i! +u,!ti, rulesPQ
Z
returA arraEP QR
[
,a BalidaciCA mas obBia es la de ?acer tu cam=o obligatorio:
arraEP'AombreG correoG edadMG 're>uiredMQG
+ambiWA =uedes es=eciFicar >ue el Balor sea AumeroG iAcluso eAtero:
arraEP'moAtoMG 'AumericalMG 'iAteger'AlEMNOtrueQG
Para cadeAas =odemos restriAgir la loAgitud:
arraEP'AameMG'leAgt?MG'miAMNO2G 'maKMNO/<QG
'tra BalidaciCA Baliosa es =ara los correos electrCAicos:
arraEP'user#mailMG 'emailMQG
o =ara eAlaces:
arraEP'liAkMG 'urlMQG
!i >ueremos Balidar >ue uA cam=o sea TAico eA la base de datos colocamos lo siguieAte:
array('campo', 'uniue', 'attri!ute7ame'=>'7om!re0odelo&dato'),
Para com=arar dos cam=os del mismo Formulario es as:
arraEP'moAtoJauditadoMG'com=areMG'com=arettributeMNO'moAtoJcoAtratadoMG'o=eratorMNO'\NMG'messageMNO'#l
%oAto uditado debe ser uA Aumero meAor o igual al moAto coAtratadoMQG
)7
Gua Bsica de Yii Framework
+ambiWA =odemos crear Auestra =ro=ia FuAcioA >ue Balide:
arraEP'Fec?aJFiAalMG 'com=ararJFec?asMG 'tE=eM NO 'dateMG 'dateFormatM NO 'EEEEU%%UddMQG
E agregamos la FuAciCA eA el mismo modelo:
)u*"i! +u,!ti, com=ararJFec?asPYattributeGY=aramsQ Z
iFP]em=tEPYt?isUOattributes^'Fec?aJFiAalM_QQ Z
iFPstrtotimePYt?isUOattributes^'Fec?aJFiAalM_Q \ strtotimePYt?isUOattributes^'Fec?aJiAicioM_QQ Z
Yt?isUOadd#rrorPYattributeG',a Fec?a de IAicio *o Puede !er %aEor a la FiAalMQR[
[
[
,a BalidaciCA aAterior se eAcargar de BeriFicar >ue uAa Fec?a iAicial Ao sea meAor a la Fec?a FiAal.
)2
Gua Bsica de Yii Framework
ORDEN POR DEFECTO Y CONDICION E-TRA
EN GRID
coAtiAuaciCA Bamos eK=licar como ?acemos =ara ordeAar Auestro Grid ba@o el criterio >ue
>ueramosG eso lo ?acemos modiFicaAdo el =armetro sort del "ctiBeDataProBider >ue se eAcueAtra eA la
FuAciCA searc? del modeloG de igual modo Bamos a agregar uA coAdiciCA eKtra eA la bTs>uedaG eA Auestro
caso Filtramos =or el estatus.
(criteria->condition = "estatus=true"#
(sort=ne% ,2ort()#
(sort->default.rder='num<control =@2,'#
E el "ctiBedataProBider >ueda as:
return ne% ,:cti4e=ata-ro4ider((this, array(
'criteria'=>(criteria,
'sort'=>(sort,
))#
)7
Gua Bsica de Yii Framework
FEC.AS CON C%UIDATEPICKER
#A el D=rotectedDBiewsDAombreJdelJmodeloDJForm.=?= modiFica Auestra Fec?a =or:
<di4 class="ro+">
<?php echo (form->la!el@'((model,'fecha')# ?>
<?php
if ((model->fechaC='') A
(model->fecha=date('d-m-Y',strtotime((model->fecha))#
D
(this->+id%et('*ii&+id%ets&Mui&,Nui=ate-icker', array(
'model'=>(model,
'attri!ute'=>'fecha',
'4alue'=>(model->fecha,
'lan%ua%e' => 'es',
'html.ptions' => array('readonly'=>"readonly"),

'options'=>array(
'auto2i*e'=>true,
'default=ate'=>(model->fecha,
'date>ormat'=>'dd-mm-yy',
'!utton;ma%e'=>Yii::app()->!ase"rl&'$ima%es$calendar&pn%',
'!utton;ma%e.nly'=>true,
'!utton8e't'=>'>echa',
'select.ther0onths'=>true,
'sho+:nim'=>'slide',
'sho+/utton-anel'=>true,
'sho+.n'=>'!utton',
'sho+.ther0onths'=>true,
'chan%e0onth' => 'true',
'chan%eYear' => 'true',
'min=ate'=>'date("Y-m-d")', $$fecha minima
'ma'=ate'=> "O5LY", $$fecha ma'ima
),
))# ?>
<?php echo (form->error((model,'fecha')# ?>
<$di4>
):
Gua Bsica de Yii Framework
Ates de guardar debemos BeriFicar >ue la Fec?a Ao BeAga BacaG eso lo ?acemos eA la FuAciCA
actioA"reateG recuerda >ue DimagesDcaleAdar.=Ag es uAa imageA >ue ?aEas decido colocar all. l darle clic eA
la imageA se mostrara lo siguieAte:
if((model->fecha=='') A
(model->fecha=7"??#
D
!i >ueremos Formatear la Fec?a eA la coAsulta a MdUmUYM debemos modiFicar eA el
D=rotectedDBiewsDAombreJdelJmodeloDBiew.=?=:
if ((model->fechaC='') A
(fecha=date('d-m-Y',strtotime((model->fecha))#
D
else A
(fecha=''#
D
Y eA el MattributesM arraE modiFicar MFec?aM coA:
array('name'=>'fecha', '4alue'=>(fecha,),
)4
Gua Bsica de Yii Framework
B'S/UEDAS POR FEC.AS CON
SYDATECOLUMN
U Ba@amos la eKteAsiCA de ?tt=:DDwww.EiiFramework.comDeKteAsioADsEdatecolumAD E la co=iamos la clase
eA D=rotectedDcom=oAeAtsD
U #A Auestro "Grid1iew colocamos la columAa de la Fec?a as:
array(
'header'=>'>echa Bi%encia',
'name'=>'fecha<4i%encia',
'4alue' => 'cam!io<fecha((data->fecha<4i%encia)' ,
'html.ptions'=>array('+idth'=>'36Lp''),
'class'=>'2Y=ate,olumn',
),
U gregar eA el modelo la Bariable doAde se guardar el raAgo: =ublic YFec?aJBigeAciaJraAge N arraEPQR
U gregar a la FuAciCA rules Auestro cam=o Fec?aJBigeAciaJraAge =ara >ue el Formulario maAteAga la Fec?a
dada luego de la bTs>ueda
#!ncti$n rules() A
return array(
&&&
array('&&&&&,fecha<4i%encia<ran%e', 'safe', 'on'=>'search'),
U #A la FuAciCA searc? del modelo agregamos lo siguieAte:
(from = (to = ''#
if (count((this->fecha<4i%encia<ran%e)>=3) A
if (isset((this->fecha<4i%encia<ran%eF'from'G)) A
(from = (this->fecha<4i%encia<ran%eF'from'G#
D
if (isset((this->fecha<4i%encia<ran%eF'to'G)) A
(to= (this->fecha<4i%encia<ran%eF'to'G#
D
6<
Gua Bsica de Yii Framework
D
if ((fromC='' PP (to C='') A
if ((fromC='' QQ (toC='') A
(from = date("d-m-Y", strtotime((from))#
(to = date("d-m-Y", strtotime((to))#
(criteria->compare('fecha<4i%encia',">= (from",#alse)#
(criteria->compare('fecha<4i%encia',"<= (to",#alse)#
D
else A
if ((fromC='') (creation<time = (from#
if ((to C= '') (creation<time = (to#
(creation<time = date("d-m-Y", strtotime((creation<time))#
(criteria->compare('fecha<4i%encia', "(creation<time" ,#alse)#
D
D
6)
Gua Bsica de Yii Framework
E-PORTAR DEL CGRID&IEW A PDF
!i >ueremos eK=ortar registros del "gridBiew a =dF a coAtiAuaciCA te eK=licamos como.
,o =rimero >ue ?acemos es ba@arAos la ultima BersiCA de %PDF de su =agiAa oFicial
?tt=:DDwww.m=dF).comDm=dFD E la colocamso eA =rotectedDeKteAsioAsG co=iamos eA el coAtrolador de la tabla
a la >ue se ?ar el re=orte la siguieAte FuAciCA:
p!"lic #!ncti$n action-df((id)
A
(this->render('pdf',array(
'model'=>(this->load0odel((id),
))#
D
"olocamos =dF eA la FuAcioA access$ulesPQ del mismo coAtrolador =ara >ue los usuarios =uedaA
acceder a la acciCA G eA la Bista admiA sustituir el arreglo de los botoAes =or el siguieAte:
array(
'class'=>',/utton,olumn',
'template' => 'A4ie+D AupdateD AdeleteD ApdfD',
'!uttons'=>array(
'pdf' => array(
'la!el'=>'Henerar -=>',
'url'=>",1tml::normali*e"rl(array('pdf', 'id'=>R(data->id
))",
'ima%e"rl'=>Yii::app()->reuest->!ase"rl&'$ima%es$pdf<icon&pn%',
'options' => array('class'=>'pdf'),
),
),
),
#A la Bista Biew agregamos la Bista de Auestro =dF eA el meAu:
array('la!el'=>',rear -=>', 'url'=>array('pdf','id'=>(model->id)),
#A mi caso la claBe =rimaria del registro la =use como id eA la base de datosG si eA tu caso es
HidJ=roductoI o algo =or el estilo debes cambiarlo cuaAdo se =asa el dato a la Bista.
66
Gua Bsica de Yii Framework
Y =or ultimo teAemos el arc?iBo =dF.=?= >ue estar eA las Bistas:
<?php
(pdf = Yii::create,omponent('application&e'tensions&0-=>E5&mpdf')#
(html='
<ta!le id="y+L" class="detail-4ie+5">
<tr class="principal">
<td colspan="5" ali%n="center"><!>=:8.2 =@? ,.789:8.<$!><$td>
<tr>
<tr class="odd">
<td> <!>7S ,ontrol<$!> <$td>
<td> '&(model->num<control&'<$td>
<$tr>
<tr class="e4en">
<td> <!>8rimestre @Mecucion<$!> <$td>
<td> '&(model->trimestre<eMecucion&'<$td>
<$tr>
<tr class="odd">
<td> <!>7om!re @stado<$!> <$td>
<td> '&(model->estadoLF"nom!re<estado"G&'<$td><$tr>
<tr class="e4en">
<td> <!>@mpresa<$!> <$td>
<td> '&(model->empresa&'<$td>
<$tr>
<tr class="odd">
<td> <!>-ersonal :ctuante<$!> <$td>
<td> '&(model->personal<actuante&'<$td><$tr>
<tr class="e4en">
<td> <!>7om!re 8ipo ;nforme<$!> <$td>
<td> '&(model->informeLF"nom!re<tipo<informe"G&'<$td>
<$tr>
<tr class="e4en">
<td> <!>7S ,ontrato<$!> <$td>
<td> '&(model->num<contrato&'<$td>
<$tr>
<tr class="odd">
<td> <!>0onto ,ontratado<$!> <$td>
<td> '&(model->monto<contratado&'<$td>
6.
Gua Bsica de Yii Framework
<$tr>
<$ta!le>'#
(header=(header&'<im% src="'&Yii::app()->reuest->!ase"rl&'$ima%es$!anner&pn%"$>'#
(mpdf=ne% m-=>('+in-35E5','?@88@9','','',3E,3E,5E,35,E,T)#
(mpdf->2et180?1eader((header)#
(mpdf->2et>ooter(' A=:8@ M$m$YDP-U%ina A-:H@7.D$An!p%DP2istema de ,ontratos')#
(mpdf->)rite180?((html)#
(mpdf->.utput('>icha-,ontrato&pdf','=')#
e'it#
?>
6/
Gua Bsica de Yii Framework
REPORTES A PARTIR DE UNA B'S/UEDA
9e Bisto eA el Foro >ue ?aE muc?as =ersoAas =reguAtaAdo como eK=ortar eA PDF a =artir de uAa
bTs>ueda eA la Bista dmiAG a>u les traigo uAa soluciCA a ese =roblema.
#A la FuAciCA searc?PQ del modelo eA cuestiCA agregamos al FiAal PaAtes del retorAoQ las siguieAtes
liAeas de cCdigo:

(<2@22;.7F'datos<filtrados'G = ne% ,:cti4e=ata-ro4ider((this, array(
'criteria'=>(criteria,
'sort'=>(sort,
'pa%ination'=>false,
))#
DoAde Ycriteria soA los datos de Filtrado E Ysort el arreglo de ordeAaciCAG eso Aos guardar eA uAa
Bariable de sesiCA la ultima bTs>ueda realiLadaG si Ao ?emos realiLado AiAguAa bTs>ueda estaremos
guardaAdo todos los resultados del listadoG es im=ortaAte colocar eA False la =agiAaciCA =ara >ue =ueda
traerAos todos los resultados.
#A la Bista admiA agregar el botCA de eK=ortar coA arraEPMlabelM M#K=ortar a PDFMG MurlM arraEPM=dFMQQG
eA la coAFiguraciCA del meAT.
#A el coAtrolador agregamos la siguieAte FuAciCA:

p!"lic #!ncti$n action-df()
A
(this->render('pdf')#
D
grega la actioA =dF eA el access$ules del coAtroladorG =ara >ue los usuarios del sistema =uedaA teAer
=ermisos de utiliLarla.
,a librera >ue uso E recomieAdo =ara eK=ortar =dF es %PDFG la =uedeA descargar de su =agiAa
oFicialG uAa BeL descargada la co=iaA eA eKteAsioAs.
UA e@em=lo =ara la Bista =dF es el siguieAte:
67
Gua Bsica de Yii Framework
<? (pdf = Yii::create,omponent('application&e'tensions&0-=>E5&mpdf')#
(data-ro4ider = (<2@22;.7F'datos<filtrados'G->%et=ata()#
(contador=count((data-ro4ider)#
(html&='
<ta!le ali%n="center"><tr>
<td ali%n="center"><!>?;28:=. =@ ,.789:8.2<$!><$td>
<$tr><$ta!le>
8otal 9esultados: '&(contador&'
<ta!le class="detail-4ie+5" repeat<header="3" cellpaddin%="3" cellspacin%="3"
+idth="3LLV" !order="L">
<tr class="principal">
<td class="principal" +idth="TV">Qn!sp#7S ,ontrol<$td>
<td class="principal" +idth="TV">Qn!sp#7S ,ontrato<$td>
<td class="principal" +idth="3WV">Qn!sp#@mpresa<$td>
<td class="principal" +idth="3LV">Qn!sp#@stado<$td>
<td class="principal" +idth="WV">Qn!sp#0onto ,ontratado<$td>
<td class="principal" +idth="5EV">Qn!sp#.!Meto ,ontrato<$td>
<td class="principal" +idth="3XV">Qn!sp#-ersonal :ctuante<$td>
<td class="principal" +idth="WV">Qn!sp#8ipo ;nforme<$td>
<$tr>'#
(i=L#
(4al=count((data-ro4ider)#
+hile((i<(4al)A
(html&='
<tr class="odd">
<td class="odd" +idth="TV">Qn!sp#'&(data-ro4iderF(iG
F"num<control"G&'<$td>
<td class="odd" +idth="TV">Qn!sp#'&(data-ro4iderF(iG
F"num<contrato"G&'<$td>
<td class="odd" +idth="3WV">Qn!sp#'&(data-ro4iderF(iGF"empresa"G&'<$td>
<td class="odd" +idth="3LV">Qn!sp#'&(data-ro4iderF(iGF"estadoL"G
F"nom!re<estado"G&'<$td>
<td class="odd" +idth="WV">Qn!sp#'&(data-ro4iderF(iG
F"monto<contratado"G&'<$td>
<td class="odd" +idth="5EV">Qn!sp#'&(data-ro4iderF(iG
F"o!Meto<contrato"G&'<$td>
<td class="odd" +idth="3XV">Qn!sp#'&(data-ro4iderF(iG
62
Gua Bsica de Yii Framework
F"personal<actuante"G&'<$td>
<td class="odd" +idth="WV">Qn!sp#'&(data-ro4iderF(iGF"informeL"G
F"nom!re<tipo<informe"G&'<$td>
'#
(html&='<$tr>'# (iOO#
D
(html&='<$ta!le>'#
(mpdf=ne% m-=>('+in-35E5','?@88@9-?','','',W,W,5X,3L,E,E)#
(mpdf->)rite180?((html)#
(mpdf->.utput('9eporte<,ontratos&pdf','=')#
e'it# ?>
"omo Bemos al =riAci=io del e@em=lo tomamos los datos Filtrado mediaAte la Bariable de sesiCA E
dis=oAemos de ellos como >ueramos eA el =dF.
67
Gua Bsica de Yii Framework
COMBOS DEPENDIENTES
;ueremos dos combos: +i=o 'rgaAismo E 'rgaAismoG la idea es >ue al momeAto de escoger uA ti=o
de orgaAismo se des=liegue eA el seguAdo combo los distiAtos orgaAismos >ue =erteAeceA a ese ti=o =ara ello
utiliLamos el siguieAte cCdigo eA el JForm:
// Tipo de organismos
<di4 class="ro+">
<?php echo (form->la!el@'((model,'id<tipo<or%')#
// (om)re de la eti0ueta a mostrar e1& -ipo ,rgani2aci3n
(departamento = ne% ,=!,riteria#
// Preparamos los par4metros de )5s0ueda
(departamento->order = 'descripcion :2,'#
// ordenamos al/a)6ticamente
echo (form->drop=o+n?ist((model,'id<tipo<or%',
// id7tipo7org es el nom)re del campo en el modelo
,1tml::list=ata(8ipo.r%H::model()->find:ll((departamento),
// -ipo,rgG es el modelo en el 0ue se )uscaran los datos
'id<tipo<or%','descripcion'),
// id7tipo7org es el dato 0ue se 0uiere guardar y
// descripci3n lo 0ue se 0uiere mostrar
array('aMa'' => array('type' => '-.28',
'url' => ,,ontroller::create"rl(',orrespondencia$car%aror%anismos'), //
la acci3n 0ue 8a a cargar el segundo di8
'update' => 'Y,orrespondencia<id<or%<%'
// el di8 0ue se 8a a actuali2ar
),'prompt' => '2eleccione un 8ipo'
// +alor por de/ecto
)
)#
echo (form->error((model,'id<tipo<or%')# ?>
<$di4>
// 9egundo *om)o, organismos
<di4 class="ro+">
<?php echo (form->la!el@'((model,'id<or%<%')#
6:
Gua Bsica de Yii Framework
if ((model->is7e+9ecord==3)
//9i se est4 creando un registro nue8o
A
echo (form->drop=o+n?ist((model,'id<or%<%',
array('L' => '2eleccione un .r%anismo'))#
// se muestra solo 9eleccione un ,rganismo
D
else A
(tipo=(model->id<tipo<or%#
// 9i se est4 modi/icando un registro
(sl="select count(id<or%<%) from or%anismos<% +here id<tipo<or%='(tipo'#"#
//
(connection=Yii::app()->d!#
//
(command=(connection->create,ommand((sl)#
//
(ro+=(command->uery9o+()#
//
(!andera=(ro+F'count'G#
//
if ((!andera==L) A
//
echo (form->drop=o+n?ist((model,'id<or%<%',
array('L' => '2eleccione un .r%anismo'))# D
// 9i el tipo de organismo no tiene ning5n
else A
// organismo solo muestra 9eleccione un ,rganismo
echo (form->drop=o+n?ist((model,'id<or%<%',
,1tml::list=ata(.r%anismosH::model()->find:ll/y2l(
//:0u; 8an los datos de la )5s0ueda del segundo com)o
"select I from or%anismos<% +here id<tipo<or%
=:key+ord order !y id<or%<%=:cla4e5 asc",
array(':key+ord'=>(model->id<tipo<or%,':cla4e5'=>(model->id<or%<%)),
'id<or%<%','descripcion'))#
D
D
?><$di4>
64
Gua Bsica de Yii Framework
#A el coAtrolador colocamos la siguieAte FuAciCA:
p!"lic #!ncti$n action,ar%aror%anismos()
A
(data=.r%anismosH::model()->find:ll/y2l(
"select I from or%anismos<% +here id<tipo<or%
=:key+ord or id<or%<%=L order !y id<or%<%=L desc, descripcion asc",
// :0u; )uscamos los di/erentes organismos 0ue pertenecen al tipo elegido
array(':key+ord'=>(<-.28F',orrespondencia'GF'id<tipo<or%'G))#

(data=,1tml::list=ata((data,'id<or%<%','descripcion')#
foreach((data as (4alue=>(name)
A
echo ,1tml::ta%('option', array('4alue'=>(4alue),,1tml::encode((name),tr!e)#
D
D
9aE >ue darle =ermisos a la acciCA cargarorgaAismos.

.<
Gua Bsica de Yii Framework
CAMPO CON AUTOCOMPLETAR
#A la Bista doAde Ba a estar el cam=o colocar el siguieAte cCdigo:
if ((model->estadoLC='')
A
(4alue=(model->estadoL->nom!re<estado#
D
else A
(4alue=''#
D
echo (form->hidden>ield((model, 'estado')#
(this->+id%et('*ii&+id%ets&Mui&,Nui:uto,omplete', array(
'name'=>'estado',
'model'=>(model,
'4alue'=>(4alue,
'source"rl'=>(this->create"rl('?istar@stados'),
'options'=>array(
'min?en%th'=>'Z',
'sho+:nim'=>'fold',
'select' => 'Ms:function(e4ent, ui)
A M[uery("Y,ontrato<estado")&4al(ui&itemF"id"G)# D',
'search'=> 'Ms:function(e4ent, ui)
A M[uery("Y,ontrato<estado")&4al(L)# D'
),
))#
#A el cCdigo aAterior Balidamos >ue el cam=o Ao estW Baco eA la base de datosG de estar Baco es >ue
se est creaAdo uA AueBo registro o Ao se seleccioAC AiAgTA estadoG luego creamos el cam=o de auto
com=letar colocaAdole el AombreG el Aombre del modeloG el Balor =or deFectoG caAtidad mAima =ara realiLar
la bTs>ueda E la FuAciCA >ue guarda el id del cam=o seleccioAado.
"o=iamos la FuAciCA ,istar#stados eA Auestro coAtrolador:
p!"lic #!ncti$n action?istar@stados((term) A
(criteria = ne% ,=!,riteria#
(criteria->condition = "?.)@9(nom!re<estado) like ?.)@9(:term)"#
.)
Gua Bsica de Yii Framework
(criteria->params = array(':term'=> 'V'&(<H@8F'term'G&'V')#
(criteria->limit = ZL#
(data = @stado::model()->find:ll((criteria)#
(arr = array()#
foreach ((data as (item) A
(arrFG = array(
'id' => (item->id,
'4alue' => (item->nom!re<estado,
'la!el' => (item->nom!re<estado,
)#
D
echo ,N2.7::encode((arr)#
D
#A la FuAciCA de arriba deFiAimos la coAdiciCA >ue Ba a teAer Auestro >uerEG eA Auestro caso
buscaremos =or AombreJestado iAdiFereAtemeAte miATsculas E maETsculas utiliLaAdo uA like M` `MG la
mKima caAtidad de resultado ser de .<G los datos =roBieAeA del modelo #stadoG el cam=o a guardar es el id
E el >ue mostraremos es el Aombre del estado.
9aE >ue darle =ermisos a los usuarios =ara utiliLar la acciCA ,istar#stados
.6
Gua Bsica de Yii Framework
NO MOSTRAR INDE-$P.P EN LAS URL
!i deseamos >ue los mCdulos de Auestro sitio =uedaA ser accedidos as: ?tt=:DDmEdomaiA.comDcoAtact
E Ao as: ?tt=:DDmEdomaiA.comDiAdeK.=?=arNcoAtact debemos ?acer Barios cambios eA Auestro =roEecto.
#A =rimer lugar e@ecutamos eA la coAsola de liAuK: a6eAmod rewriteG abrimos
DetcDa=ac?e6D!iteBailablesDdeFault E cambiamos HllowoBerrideN*oAeI =or HllowoBerrideNllI Pse
eAcueAtra eA dos liAeas distiAtasQG luego cambiamos la direcciCA de Auestro arc?iBo .?taccess de
AombreJ=roEectoD=rotectedD a AombreJ=roEectoDG .?taccess es uA arc?iBo ocultoG =ara mostrar los arc?iBos
ocultos usamos el ata@o coAtrol b ?.
brimos el .?taccess E =egamos los siguieAte:
9e+rite@n%ine on
< i/ a directory or a /ile e=ists, use it directly
9e+rite,ond VA9@["@28<>;?@7:0@D C-f
9e+rite,ond VA9@["@28<>;?@7:0@D C-d
< ot>erwise /orward it to inde=.p>p
9e+rite9ule & inde'&php
FiAalmeAte Bamos a D=rotectedDcoAFigDmaiA.=?= E eA el arreglo com=oAeAt agregamos:
'url0ana%er'=>array(
'url>ormat'=>'path',
'sho+2cript7ame'=>false,
'case2ensiti4e'=>false,
),
,on esto hemos limpiado las "9?s de nuestro sistema, es importante ue los
controladores de nuestros modelos no conten%an mayKsculas para e4itar pro!lemas&
..
Gua Bsica de Yii Framework
GUARDAR AUTOM(TICAMENTE USUARIO Y
FEC.A DE CREACIN Y MODIFICACIN
*os descargamos la librera de ?tt=:DDwww.EiiFramework.comDeKteAsioADblameableUbe?aBiorD E la
=egamos eA Dcom=oAeAtD G Ao olBides darle =ermisos.
#A el modelo eA cuestiCA co=iamos la siguieAte FuAciCA:
p!"lic #!ncti$n !eha4iors()
A
return array(
',8imestamp/eha4ior' => array(
'class' => '*ii&!eha4iors&,8imestamp/eha4ior',
'create:ttri!ute' => 'created<date',
'update:ttri!ute' => 'modified<date',
'set"pdate.n,reate' => tr!e,
),
'/lamea!le/eha4ior' => array(
'class' => 'application&components&!eha4iors&/lamea!le/eha4ior',
'created/y,olumn' => 'created<!y',
'updated/y,olumn' => 'modified<!y',
),
)#
D
DoAde createdJdateG modiFiedJdateG createdJbE E modiFiedJbE soA los datos de Auestra tabla eA
doAde >ueremos guardar los datos. !i Ao teAemos uAo de los datos =odemos comeAtar esa liAea de cCdigo.
./
Gua Bsica de Yii Framework
.ACER FORMULARIO PARA MULTIPLES
MODELOS
UAa BeL realiLado el "$UD de cada modelo este Aos geAera automticameAte uA Formulario coA los
datos del modeloG si >ueremos ?acer uA Formulario >ue iAcluEa los datos de dos o mas modelos debemos
modiFicar Barias liAeas de cCdigo.
#A el e@em=lo >ue eK=lico a coAtiAuaciCA teAemos dos modelosG el modelo PersoAal cuEos datos soA
idJ=ersoAalG AombreJ=ersoAal E idJestado E el modelo #stado coA idJestado E AombreJestadoG de mas est
decir >ue PersoAal es alimeAtado =or #stadoG lo =rimero >ue ?aremos es modiFicar la Bista JForm de PersoAal.
<di4 class="form">
<?php (form = (this->!e%in)id%et(',:cti4e>orm', array( 'id'=>'user-form',
'ena!le:Ma'Balidation'=>true, ))#

if ((a->is7e+9ecord==#alse) A (!=@stado::model()->find/y-k((a->id<estado)# D
echo (form->error2ummary(array((a,(!))# ?>
<di4 class="ro+">
<?php echo (form->la!el@'((a,'nom!re<personal')# ?>
<?php echo (form->te't>ield((a,'nom!re<personal')# ?>
<?php echo (form->error((a,'nom!re<personal')# ?>
<$di4>
<di4 class="ro+">
<?php echo (form->la!el@'((!,'nom!re<estado')# ?>
<?php echo (form->te't>ield((!,'nom!re<estado')# ?>
<?php echo (form->error((!,'nom!re<estado')# ?>
<$di4>
<di4 class="ro+ !uttons">
<?php echo ,1tml::su!mit/utton((a->is7e+9ecord ? ',rear' : ':ctuali*ar')# ?>
<$di4> <?php (this->end)id%et()# ?> <$di4>
"oA ese cCdigo iAcluimos el cam=o AombreJestado del modelo #stado eA el Formulario de PersoAalG
tambiWA agregamos eA el =armetro error!ummarE el modelo YbG >ue eA este caso es #stadoG coA esto Aos
Balida el Formulario coA las restriccioAes >ue ?aEamos =uesto eA el rulesPQ de ambos modelosG =or otra =arte
=reguAtamos si se est creaAdo uA AueBo registro o AoG eA caso de ser uAa actualiLaciCA cargamos la
iAFormaciCA del modelo #stadoG de PersoAal Aos la carga automticameAte.
.7
Gua Bsica de Yii Framework
#A el caso de las Bistas create.=?= E u=date.=?= cambiamos la siguieAte liAea
<?php echo (this->render-artial('<form', array('model'=>(model))# ?>
=or esta
<?php echo (this->render-artial('<form', array('a'=>(a, '!'=>(!))# ?>
?ora modiFicamos la acciCA create:
p!"lic #!ncti$n action,reate()
A
(a=ne% -ersonal#
(!=ne% @stado#

(this->perform:Ma'Balidation(array((a,(!))#
if(isset((<-.28F'-ersonal'G,(<-.28F'@stado'G))
A
(a->attri!utes=(<-.28F'-ersonal'G#
(!->attri!utes=(<-.28F'@stado'G#
(sl='select ma'(id<estado) from estado#'#
(connection=Yii::app()->d!#
(command=(connection->create,ommand((sl)#
(ro+=(command->uery9o+()#
(ro+F"ma'"GOO#
(!->id<estado=(ro+F"ma'"G#
(a->id<estado=(ro+F"ma'"G#
if((!->sa4e() QQ (a->sa4e())
(this->redirect(array('4ie+','id'=>(a->id<personal))#
D
(this->render('create',array('a'=>(a,'!'=>(!))#
D
,o =rimero >ue ?acemos es iAstaAciar los modelos PersoAal E #stadoG luego si los datos =asaA la
BalidaciCA determiAamos el maEor id de estadoG se lo asigAamos al dato idJestado de cada modelo E
guardamos los datos.
Para u=date ?acemos algo =arecido:
p!"lic #!ncti$n action"pdate((id)
A
(a=ne% -ersonal#
(!=ne% @stado#
(this->perform:Ma'Balidation(array((a,(!))#
(a=(this->load0odel((id)#
if(isset((<-.28F'-ersonal'G,(<-.28F'@stado'G))
A
(a->attri!utes=(<-.28F'-ersonal'G#
(!->attri!utes=(<-.28F'@stado'G#
.2
Gua Bsica de Yii Framework
(!->id<estado=(a->id<estado#
(!->set;s7e+9ecord(#alse)#
if((a->sa4e() QQ (!->update())
(this->redirect(array('4ie+','id'=>(a->id<personal))#
D
(this->render('update',array('a'=>(a,'!'=>(!))#
D
De igual Forma >ue coA el create Balidamos los datosG guardamos E direccioAamos.
#A deFiAitiBa ?emos ?ec?o uA Formulario eA el >ue guardamos datos de dos modelos distiAtosG es uA
e@em=lo seAcillo =ero BlidoG si tus modelos tieAeA mas datos lo iAcluEes eA el JForm E si >uieres agregar ms
modelos al Form se ?ace de la misma Forma.
.7
Gua Bsica de Yii Framework
CAMPOS ENMASCARADOS EN
FORMULARIO
lgo muE Ttil eA los Formularios es =oder eAmascarar los cam=osG esto es colocar los se=aradores
automticameAte E restriAgir >ue caracteres =uede iAgresar el usuario a medida >ue Ba tecleaAdoG a
coAtiAuaciCA mostramos uA e@em=lo de como im=lemeAtarlo eA YiiG Ao ?ace Falta la iAclusiCA de uAa
eKteAsiCA.
\0=?= Yt?isUOwidgetP'"%asked+eKtFieldMG arraEP
'modelM NO YmodelG
'attributeM NO 'teleFoAoJ=ersoAaMG
'maskM NO '14444QU444U4444MG
'?tml'=tioAsM NO arraEP'siLeM NO ))Q
QQR
0O
#A eA e@em=lo model es el modelo eA cuestiCAG attribute es el Aombre del cam=oG mask es el ti=o de
mscara >ue le >uieres colocar E eA ?tml'=tioAs iAdicas las caractersticas 9+%, >ue >uieres >ue teAga tu
cam=o. #A la mascara si usamos M4M iAdicamos >ue solo se =uede teclear ATmerosG MaM es solo letrasG E MXM es
cual>uier carcter alFaAumWrico.
.:

Das könnte Ihnen auch gefallen