Guia Yii Framework PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 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.
.:

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy