Você está na página 1de 23

MVC com PHP em Exemplos Prticos

1/23

MVC com PHP em Exemplos Prticos


1) Introduo . . . . . . 2) Alguma Teoria . . . . . 3) Exemplos Prticos e simples de M $) %e&er'ncias . . . . . . #) )icas *teis . . . . . . . . . . . . . . ! em P"P# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 # 2( 22

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

2/23

1) Introduo
+i,ip-dia . /ttp011pt.2i,ipedia.org12i,i1M3c Model.3ie2.controller 4M !) - um padro de ar5uitetura de so&t2are. !om o aumento da complexidade das aplica6es desen3ol3idas torna.se &undamental a separao entre os dados 4Model) e o la7out 4 ie2). )esta &orma8 altera6es &eitas no la7out no a&etam a manipulao de dados8 e estes podero ser reorgani9ados sem alterar o la7out. : model.3ie2.controller resol3e este pro;lema atra3-s da separao das tare&as de acesso aos dados e l<gica de neg<cio8 l<gica de apresentao e de interao com o usurio8 introdu9indo um componente entre os dois0 o !ontroller. M ! - usado em padr6es de pro=eto de so&t2are8 mas M ! a;range mais da ar5uitetura de uma aplicao do 5ue - t>pico para um padro de pro=eto. M!itos Frame%or&s po'em parecer m!ito atrae(tes ) primeira *ista+ por,!e eles parecem re'!-ir o 'ese(*ol*ime(to 'e aplica./es %eb para !m par 'e passos tri*iais ,!e le*am a al$!ma $era.0o 'e c1'i$o e m!itas *e-es a 'etec.0o a!tomtica 'o es,!ema 'o ba(co+ mas estes mesmos atalhos s0o s!scept2*eis 'e serem se!s $ar$alos+ bem como+ !ma *e- ,!e alca(.ar esta simplici'a'e po'e sacri#icar a #lexibili'a'e e o 'esempe(ho" %asmus ?erdor& 4!riador do P"P). Portanto no adianta apenas &acilitar a criao8 mas um &rame2or, tam;-m de3e continuar &lex>3el e permitir uma &cil manuteno do aplicati3o gerado. !aso contrrio o &rame2or, estar dando com uma mo e retirando com a outra. A5ui - at- redundante di9er 5ue para os 5ue esto 5uerendo aprender so;re M !8 a experimentao prtica dos exemplos - imprescind>3el8 portanto experimente8 altere8 personali9e e teste ;astante atentender e &icar satis&eito. Em caso de d*3idas8 pre&erencialmente tro5ue id-ias com os colegas atra3-s do &orum do site0 e&etue seu login e 3 em @orum8 para 5ue assim as d*3idas e dicas8 =untamente com as respostas &i5uem A disposio de todos e com isso tam;-m estou tentando estimular uma maior integrao de todos n<s 5ue estamos aprendendo so;re M !.

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

3/23

2) Alguma eoria
A!strao de "!#etos P"P # introdu9 m-todos e classes a;stratos. Bo - permitido criar uma instCncia de uma class 5ue &oi de&inida como a;strata. Dual5uer classe 5ue cont-m pelo menos um m-todo a;strato de3e tam;-m ser a;strata. M-todos de&inidos como a;stratos simplesmente declaram a assinatura do m-todo8 eles no podem de&inir a implementao. Duando uma classe /erda uma classe a;strata8 todos os m-todos marcados como a;stratos na declarao da classe.pai de3em ser de&inidos na classe &il/aE al-m disso8 esses m-todos de3em ser de&inidos com a mesma 4ou menos restrita) 3isi;ilidade. Por exemplo8 se um m-todo a;strado de&inido como protected8 a implementao da &uno de3e ser de&inida ou como protected ou pu;lic8 mas no pri3ate. /ttp011222.p/p.net1manual1ptFG%1language.oop#.a;stract.p/p " PHP tem m$todos internos %ue a#udam %uando temos &rios campos0 FFset4) - executado ao se escre3er dados para mem;ros inacess>3eis. FFget4) - utili9ados para ler dados de mem;ros inacess>3eis. /ttp011222.p/p.net1manual1ptFG%1language.oop#.o3erloading.p/pHlanguage.oop#.o3erloading.me m;ers Autoloading "!#ects Muitos desen3ol3edores ao desen3ol3er aplica6es orientadas a o;=eto criam um ar5ui3o P"P para cada de&inio de classe. Im dos maiores contratempos - ter de escre3er uma longa lista de includes no in>cio de cada script4um include para cada classe necessria). !om P"P # isso no - mais necessrio. oc' pode de&inir uma &uno FFautoload 5ue automaticamente c/amada no caso de 3oc' tentar usar uma classe1inter&ace 5ue ainda no &oi de&inida. Ao c/amar essa &uno o Jscripting engineJ tem uma *ltima c/ance para carregar a classe antes 5ue o P"P &al/e com erro. /ttp011222.p/p.net1manual1ptFG%1language.oop#.autoload.p/p Inter'aces de "!#etos Inter&aces de :;=etos permite a criao de c<digo 5ue especi&ica 5uais m-todos e 3ari3eis uma classe de3e implementar8 sem ter 5ue de&inir como esses m-todos sero tratados. Inter&aces so de&inidas usando a pala3ra.c/a3e Jinter&aceJ8 da mesma maneira 5ue uma classe comum8 mas sem nen/um dos m-todos ter seu conte*do de&inido. Todos os m-todos declarados em uma inter&ace de3em ser pu;lic8 essa - a nature9a de uma inter&ace.

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos implements

3/23

Para implementar uma inter&ace8 o operador implements - usado. Todos os m-todos na inter&ace de3em ser implementados na classeE no &a9er isso resultar em um erro &atal. !lasses podem implementar mais de uma inter&ace se assim &or dese=ado8 separando cada inter&ace com uma 3>rgula. /ttp011222.p/p.net1manual1ptFG%1language.oop#.inter&aces.p/p

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

4/23

() Exemplos Prticos e )imples de MVC com PHP*


A id-ia para este curso partiu de um exemplo realmente m>nimo 5ue encontrei so;re M ! no P"P#. Ap<s executar com sucesso comecei a mexer no exemplo8 &a9endo altera6es e 3eri&icando o &luso das in&orma6es. Perce;i 5ue o &luxo no anda no sentido da sigla M !8 nesse sentido8 pois geralmente no se admite a comunicao entre as camadas M 4model) e 43ie2). Bo caso as in&orma6es andam nesse sentido0 +luxo das In'orma,es no MVC

Keralmente Bascem na ie2 5uando um usurio &a9 uma solicitao8 clicando num ;oto su;mit ou num lin, )a> so en3iadas para o !ontroller8 5ue a &iltra 4se &or o caso) e a en3ia para o Model : Model analisa de acordo com a solicitao 4uma consulta ao ;anco) e a de3ol3e ao !ontroller : !ontroler por sua 3e9 de3ol3e o resultado para a ie2 E a ie2 renderi9a o resultado e o mostra para o usurio

)i9er o 5ue &a9 cada uma das camadas praticamente todas as de&ini6es di9em8 mas algo 5ue - de muita importCncia para o programador8 5ue - o &luxo das in&orma6es8 onde elas comeam e onde terminam8 isso = no - comum. Primeiro eu executei o exemplo e &uncionou ;em. )epois ento8 com mi n/as altera6es eu sa> rastreando as in&orma6es para8 na prtica8 perce;er como camin/a3am. : exemplo m>nimo a 5ue me re&eri encontrei a5ui0 /ttp011222.sourcecode$7ou.com1article1article3ie21#d&e(&d3.#L(L.$&;2.L1Le.#1cL(Mc&LcNa1m3c. arc/itecture.in.p/p.aspx )ando uma ol/ada 3i 5ue usa o ;anco test e com apenas uma pe5uena ta;ela0 create ta;le emplo7ee 4 deptid int autoFincrement primar7 ,e78 empFname c/ar4$#) not null )E @i9 uma alterao0 mudei o nome do ;anco para m3c. Inserir alguns rgistros0 insert into emplo7ee 3alues 4de&ault8 J%i;amarJ)E insert into emplo7ee 3alues 4de&ault8JPedroJ)E insert into emplo7ee 3alues 4de&ault8JTiagoJ)E insert into emplo7ee 3alues 4de&ault8JOooJ)E insert into emplo7ee 3alues 4de&ault8JEliasJ)E Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

5/23

Tam;-m di3idi em dois ar5ui3os como sugere o artigo0 Emplo7ee.p/p e ie2.p/p Emplo7er.p/p PQp/p 11111111111111M7 Propert7 !lass111111111111 11 it contain getter setter &unction a;stract class Emplo7eePropert7 R pri3ate SdeptidE pu;lic &unction get)eptId4) 11Ketter R return St/is.TdeptidE U pu;lic &unction set)eptId4Sid) 11setter R St/is.TdeptidVSidE U U 1111111111M7 Inter&ace 111111111 inter&ace iEmplo7ee R &unction getEmplo7eeBame4Emplo7eePropert7 So;=Emplo7eePropert7)E U 111111111M7 )ata access la7er111111 11 it &etc/ data &rom data;ase ser3er 11it model part o& m3c class )A?Emplo7ee implements iEmplo7ee R pu;lic &unction getEmplo7eeBame4Emplo7eePropert7 So;=Emplo7eePropert7) R Scon V m7s5lFconnect4Wlocal/ostW8WrootW8Wri;a&sW)E 11open connection i& 4XScon)R die4J!ould not connect to m7s5l J . m7s5lFerror4))E 11 error message U else R m7s5lFselectFd;4Wm3cW8Scon)E 11 select data;ase SresultV m7s5lF5uer74Wselect empFname &rom emplo7ee 2/ere deptidVW. So;=Emplo7eePropert7.T get)eptId4))E 11 &ire 5uer7 m7s5lFclose4Scon)E 11 close connection U return SresultE Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos U U

6/23

11111111111M7 ;usiness logic la7er11111111 11 it is controller part o& m3c class GA?Emplo7ee extends Emplo7eePropert7 R pu;lic &unction getEmplo7eeBame4Emplo7eePropert7 So;=Emplo7eePropert7) R So;=iEmplo7eeVne2 )A?Emplo7ee4)E return So;=iEmplo7ee.TgetEmplo7eeBame4So;=Emplo7eePropert7)E U U QT ie2.p/p PX..11111111111111111111M7 ie2 Part111111111111111111111111111111111111111..T PX):!TYPE "TM? PIG?I! W.11+3!11)T) "TM? $.( Transitional11EBWT P"TM?T P"EA)T PTIT?ET Be2 )ocument P1TIT?ET P1"EA)T PG:)YT PQp/p include4WEmplo7ee.p/pW)E 111111111111111M7 ie2 Part111111111111111111 So;=GA?Emplo7eeVne2 GA?Emplo7ee4)E 11!reate o;=ect o& ;usiness logic la7er So;=GA?Emplo7ee.Tset)eptId41)E 11 Zet Propert7 SresultV So;=GA?Emplo7ee.TgetEmplo7eeBame4So;=GA?Emplo7ee)E 11 excess ;ll &unction 2/ile4Sro2 V m7s5lF&etc/Fro24Sresult)) 11 &etc/ result R ec/o Sro2[(\.WP;rTWE 11 displa7 result U QT P1G:)YT P1"TM?T e=a 5ue esta 5uerendo tra9er do ;anco o empFname de um empregado com um certo deptid. Portanto precisamos8 antes de testar8 adicionar pelo menosum registro e com deptid V 1.

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

7/23

Agora eu comecei a mexer8 primeiro di3idi em 3 ar5ui3os e &i9 o include apenas do 5ue o respecti3o iria precisar. Ba primeira experi'ncia eu separei o ar5ui3o Emplo7ee.p/p em dois0 Model.p/p e !ontroller.p/p. Al-m disso criei um script para a conexo do ;anco de dados8 c/amado connection.inc.p/p. e=amos como &icaram os includes8 5ue so importantes para entender o &luxo das im&orma6es. Ze eu no sou;esse como elas camin/am ou no esti3esse preocupado com elas eu simplesmente &aria o include de todos na ie28 mas me interessa incluir apenas na /ora certa o ar5ui3o certo. Bo Model.p/p &i9 o include apenas do connection.inc.p/p pois ele precisa conectar ao ;anco. Bo !ontroller.p/p &i9 o include apenas do Model.p/p Bo ie2.p/p apenas o include do !ontroller.p/p Assim conseguimos perce;er 5uem se comunica com 5uem. Agora = criei um outro ;anco mais ;rasileiro1portugu's para sentir 5ue de &ato esta3a alterando. !riei o !anco 'uncionario8 com a ta;ela &uncionarios assim0 a!ela create ta;le &uncionarios 4 codigo int autoFincrement primar7 ,e78 nome c/ar4$#) not null )E insert into &uncionarios 4nome) 3alues 4JOoo Grito !un/aJ)E insert into &uncionarios 4nome) 3alues 4JPedro Gar;osa A;reuJ)E insert into &uncionarios 4nome) 3alues 4JKil;erto GragaJ)E insert into &uncionarios 4nome) 3alues 4J!assimiro A;reuJ)E insert into &uncionarios 4nome) 3alues 4JOoo dos An9<is PereiraJ)E e=a como &icou o c<digo0 connection-inc-p.p PQp/p Scon V m7s5lFconnect4Wlocal/ostW8WrootW8Wri;a&sW)E i& 4XScon)R die4J!ould not connect to m7s5l J . m7s5lFerror4))E UelseR m7s5lFselectFd;4W&uncionarioW8Scon)E U QT Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

8/23

Model-p.p PQp/p 11 Exemplo prtico e m>nimo de M ! em P"P 11 /ttp011222.sourcecode$7ou.com1article1article3ie21#d&e(&d3.#L(L.$&;2.L1Le. #1cL(Mc&LcNa1m3c.arc/itecture.in.p/p.aspx includeFonce4J.1connection.inc.p/pJ)E 1]] ] !lasse A;strata . Propriedades para getters e setters ]1 a;stract class @uncionarioPropert7R pri3ate ScodigoE pri3ate SnomeE pu;lic &unction get!odigo4)R return St/is.TcodigoE U pu;lic &unction set!odigo4Sid)R St/is.TcodigoVSidE U pu;lic &unction getBome4)R return St/is.TnomeE U pu;lic &unction setBome4Sid)R St/is.TnomeVSidE U U 1]] ] Inter&ace ]1 inter&ace i@uncionarioR &unction get@uncionarioBome4@uncionarioPropert7 So;=@uncionarioPropert7)E U 1]] ] Modelo . !amada de Acesso a )ados ] Acessa o ;anco de dados e e&etua as opera6es necessrias com ]1 class )A?@uncionario implements i@uncionarioR pu;lic &unction get@uncionarioBome4@uncionarioPropert7 So;=@uncionarioPropert7)R Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

19/23

SresultV m7s5lF5uer74Wselect codigo8 nome &rom &uncionarios 2/ere codigoVW. So;=@uncionarioPropert7.T get!odigo4))E print WPscriptTalert4JModelJ)EP1scriptTWE return SresultE U U Controller-p.p PQp/p 1]] ] !ontroller . !amada de ?<gica de Beg<cios ] Processa dados8 e&etua opera6es di3ersas ] %ece;e re5uisi6es do usurio atra3-s da ie28 e&etua processamentos como 3alidao do usurio e outras ] e en3ia para o Model a solicitao de dados ] : Model de3ol3e os dados ao !ontroller e o !ontroller de3ol3e para a ie2 ]1 includeFonce4J.1Model.p/pJ)E class GA?@uncionario extends @uncionarioPropert7R pu;lic &unction get@uncionarioBome4@uncionarioPropert7 So;=@uncionarioPropert7)R So;=i@uncionarioVne2 )A?@uncionario4)E print WPscriptTalert4J!ontrollerJ)EP1scriptTWE return So;=i@uncionario.Tget@uncionarioBome4So;=@uncionarioPropert7)E U U Vie/-p.p PX):!TYPE "TM? PIG?I! W.11+3!11)T) "TM? $.( Transitional11EBWT P"TM?T P"EA)T PTIT?ET M ! . Exemplo M>nimoP1TIT?ET P1"EA)T PG:)YT P"2T M ! . Exemplo M>nimoP1"2T PQp/p 1]] ] ie2 . En3ia solicitao de dados ao !ontroller ] Ao rece;er os dados do !ontroller os apresenta &ormatados para o usurio ]1 print WPscriptTalert4J ie2J)EP1scriptTWE include4W.1!ontroller.p/pW)E

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

- 11/23

So;=GA?@uncionarioVne2 GA?@uncionario4)E So;=GA?@uncionario.Tset!odigo41)E 11 Passa o c<digo do &uncionrio a retornar SresultV So;=GA?@uncionario.Tget@uncionarioBome4So;=GA?@uncionario)E print WPscriptTalert4J ie2J)EP1scriptTWE 2/ile4Sro2 V m7s5lF&etc/Fro24Sresult))R ec/o Sro2[(\.W.WE ec/o Sro2[1\.WP;rTWE U QT P1G:)YT P1"TM?T )epois adicionei apenas um index.p/p c/amando o ie2.p/p para &icar ;onitin/o e no precisar a;rir diretamente o ie2.p/p. Ba 3ie2 &i9 uma pe5uena modi&icao8 al-m de tra9er o nome8 trouxe tam;-m o c<digo. e=a 5ue se o c<digo re5uerido no esti3er no ;anco precisar alterar para um existente para 5ue a 3ie2 traga o registro. Ento c/egou o momento de ir em &rente e agora alterar os ar5ui3os para poder &a9er algo de *til8 podedo alterar8 inserir e excluir registros.

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos Personali0ando o Exemplo de MVC

12/23

Mo exemplo alterado 5ue c/amei de m3cFminimo38 eu implementei as opera6es ;sicas de uso do ;anco de dados8 o !%I) 4muito simples)8 sem nen/um aca;amento8 apenas com a inteno de mostrar como essas opera6es &uncionam dentro de um aplicati3o usando o &amoso padro de pro=eto M ! e ainda por cima de &orma ;em simples. Espero ter conseguido deixar o exemplo ainda simples ap<s as altera6es. A5ui criei uma ie2 para Insert8 uma para Ipdate8 uma para )elete8 uma para Zelet de um registro e uma para Zelect de todos os registros. Acredito 5ue o pr<ximo passo se=a mostrar tudo em um *nico script. Mas 3e=a 5ue cada uma dessas ie2s prcisa encontrar m-todos respecti3os no !ontroller e no Model. connection-inc-p.p PQp/p Scon V m7s5lFconnect4Wlocal/ostW8WrootW8Wri;a&sW)E i& 4XScon)R die4J!ould not connect to m7s5l J . m7s5lFerror4))E UelseR m7s5lFselectFd;4W&uncionarioW8Scon)E U QT Model-p.p PQp/p 11 Pe5ueno Exemplo de M ! . %e5uer P"P# 11 /ttp011222.sourcecode$7ou.com1article1article3ie21#d&e(&d3.#L(L.$&;2.L1Le. #1cL(Mc&LcNa1m3c.arc/itecture.in.p/p.aspx 11111111111111!lasse de Propriedades111111111111 11 cont-m os m-todos0 getter e setter includeFonce4J.1connection.inc.p/pJ)E a;stract class @uncionarioPropert7R pri3ate ScodigoE pri3ate SnomeE 11!<digo pu;lic &unction get!odigo4) 11Ketter R return St/is.TcodigoE U Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

13/23

pu;lic &unction set!odigo4Sid) 11Zetter R St/is.TcodigoVSidE U 11Bome pu;lic &unction getBome4) 11Ketter R return St/is.TnomeE U pu;lic &unction setBome4Sid) 11Zetter R St/is.TnomeVSidE U U 1111111111Inter&ace 111111111 inter&ace i@uncionarioR &unction get@uncionarioBome4@uncionarioPropert7 So;=@uncionarioPropert7)E &unction get@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7)E &unction insert@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7)E &unction edit@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7)E &unction del@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7)E U 111111111 Modelo . !amada de Acesso a )ados111111 11 Puxa dados do ;anco de dados class )A?@uncionario implements i@uncionarioR pu;lic &unction get@uncionarioBome4@uncionarioPropert7 So;=@uncionarioPropert7) R SresultV m7s5lF5uer74Wselect codigo8 nome &rom &uncionarios 2/ere codigoVW. So;=@uncionarioPropert7.Tget!odigo4))E return SresultE U 11 !omente todo este m-todo a;aixo e execute para analisar a mensagem de erro pu;lic &unction get@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7) R SresultV m7s5lF5uer74Wselect codigo8nome &rom &uncionariosW)E return SresultE U pu;lic &unction insert@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7) R Ss5lVWinsert into &uncionarios 4codigo8 nome) 3alues 4W.So;=@uncionarioPropert7. Tget!odigo4).W8JW. So;=@uncionarioPropert7.TgetBome4).WJ)WE Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos SresultV m7s5lF5uer74Ss5l)E i&4XSresult) R die4JErro na inclusoP;rTJ.m7s5lFerror4))E UelseR print W%egistro inserido com sucessoXWE U U

13/23

pu;lic &unction edit@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7) R Ss5lVWupdate &uncionarios set nomeVJW. So;=@uncionarioPropert7.TgetBome4). WJ 2/ere codigoVW.So;=@uncionarioPropert7.Tget!odigo4)E 11print Ss5lEexitE SresultV m7s5lF5uer74Ss5l)E i&4XSresult) R die4JErro na atuali9aoP;rTJ.m7s5lFerror4))E UelseR print W%egistro atuali9ado com sucessoXWE U U pu;lic &unction del@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7) R Ss5lVWdelete &rom &uncionarios 2/ere codigoVW.So;=@uncionarioPropert7.Tget!odigo4).WEWE 11print Ss5lEexitE SresultV m7s5lF5uer74Ss5l)E i&4XSresult) R die4JErro na exclusoP;rTJ.m7s5lFerror4))E UelseR print W%egistro exclu>do com sucessoXWE U U U Controller-p.p PQp/p 11111111111!ontroller . !amada de ?<gica de Beg<cios11111111 includeFonce4J.1Model.p/pJ)E class GA?@uncionario extends @uncionarioPropert7R pu;lic &unction get@uncionarioBome4@uncionarioPropert7 So;=@uncionarioPropert7)R So;=i@uncionarioVne2 )A?@uncionario4)E return So;=i@uncionario.Tget@uncionarioBome4So;=@uncionarioPropert7)E U pu;lic &unction get@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7)R So;=i@uncionarioVne2 )A?@uncionario4)E return So;=i@uncionario.Tget@uncionario4So;=@uncionarioPropert7)E Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos U

14/23

pu;lic &unction insert@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7)R So;=i@uncionarioVne2 )A?@uncionario4)E return So;=i@uncionario.Tinsert@uncionario4So;=@uncionarioPropert7)E U pu;lic &unction edit@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7)R So;=i@uncionarioVne2 )A?@uncionario4)E return So;=i@uncionario.Tedit@uncionario4So;=@uncionarioPropert7)E U pu;lic &unction del@uncionario4@uncionarioPropert7 So;=@uncionarioPropert7)R So;=i@uncionarioVne2 )A?@uncionario4)E return So;=i@uncionario.Tdel@uncionario4So;=@uncionarioPropert7)E U U Vie/1elete-p.p PX):!TYPE "TM? PIG?I! W.11+3!11)T) "TM? $.( Transitional11EBWT P"TM?T P"EA)T PTIT?ET M ! . Pe5ueno Exemplo P1TIT?ET P1"EA)T PG:)YT PQp/p include4W.1!ontroller.p/pW)E 111111111111111 ie2 . Apresentao dos dados rece;idos do !ontroller111111111111111111 So;=GA?@uncionarioVne2 GA?@uncionario4)E SresultV So;=GA?@uncionario.Tget@uncionario4So;=GA?@uncionario)E print WP/1TExcluir registrosP1/1TWE QT P;rT P;rT P&orm nameVW&ormW met/odVWpostW actionVWWT !<digoPinput t7peVWtextW nameVWcodigoWTP;rT Pinput t7peVWsu;mitW nameVWen3iarW 3alueVWEn3iarWTP;rT P1&ormT PQp/p i&4isset4SFP:ZT[Jen3iarJ\))R Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

15/23

So;=GA?@uncionario.Tset!odigo4SFP:ZT[JcodigoJ\)E 11 Passa o c<digo do &uncionrio a retornar Sresult V So;=GA?@uncionario.Tdel@uncionario4So;=GA?@uncionario)E U QT P1G:)YT P1"TM?T Vie/Edit-p.p PX):!TYPE "TM? PIG?I! W.11+3!11)T) "TM? $.( Transitional11EBWT P"TM?T P"EA)T PTIT?ET M ! . Pe5ueno Exemplo P1TIT?ET P1"EA)T PG:)YT PQp/p include4W.1!ontroller.p/pW)E 111111111111111 ie2 . Apresentao dos dados rece;idos do !ontroller111111111111111111 So;=GA?@uncionarioVne2 GA?@uncionario4)E SresultV So;=GA?@uncionario.Tget@uncionario4So;=GA?@uncionario)E print WP/1TEditar registrosP1/1TWE 2/ile4Sro2 V m7s5lF&etc/Fro24Sresult))R ec/o WPa /re&VJ ie2$.p/pQcodigoVSro2[(\^nomeVSro2[1\JTSro2[(\P1aT.WE ec/o Sro2[1\.WP;rTWE U i&4isset4SFKET[JcodigoJ\))R ScodigoVSFKET[JcodigoJ\E SnomeVSFKET[JnomeJ\E U QT P;rT P;rT P&orm nameVW&ormW met/odVWpostW actionVWWT !<digoPinput t7peVWtextW nameVWcodigoW 3alueVWPQp/p print ScodigoEQTWTP;rT BomePinput t7peVWtextW nameVWnomeW 3alueVWPQp/p print SnomeEQTWTP;rT Pinput t7peVWsu;mitW nameVWen3iarW 3alueVWEn3iarWTP;rT P1&ormT PQp/p i&4isset4SFP:ZT[Jen3iarJ\))R So;=GA?@uncionario.Tset!odigo4SFP:ZT[JcodigoJ\)E 11 Passa o c<digo do &uncionrio a Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

16/23

retornar So;=GA?@uncionario.TsetBome4SFP:ZT[JnomeJ\)E Sresult V So;=GA?@uncionario.Tedit@uncionario4So;=GA?@uncionario)E U QT P1G:)YT P1"TM?T Vie/Insert-p.p PX):!TYPE "TM? PIG?I! W.11+3!11)T) "TM? $.( Transitional11EBWT P"TM?T P"EA)T PTIT?ET M ! . Pe5ueno Exemplo P1TIT?ET P1"EA)T PG:)YT PQp/p include4W.1!ontroller.p/pW)E 111111111111111 ie2 . Apresentao dos dados rece;idos do !ontroller111111111111111111 So;=GA?@uncionarioVne2 GA?@uncionario4)E QT P/2TInserir %egistrosP1/2T P&orm nameVW&ormW met/odVWpostW actionVWWT !<digoPinput t7peVWtextW nameVWcodigoWTP;rT BomePinput t7peVWtextW nameVWnomeWTP;rT Pinput t7peVWsu;mitW nameVWen3iarW 3alueVWEn3iarWTP;rT P1&ormT PQp/p i&4isset4SFP:ZT[Jen3iarJ\))R ScodigoVSFP:ZT[JcodigoJ\E SnomeVSFP:ZT[JnomeJ\E So;=GA?@uncionario.Tset!odigo4Scodigo)E 11 Passa o c<digo do &uncionrio a retornar So;=GA?@uncionario.TsetBome4Snome)E 11 Passa o c<digo do &uncionrio a retornar SresultV So;=GA?@uncionario.Tinsert@uncionario4So;=GA?@uncionario)E U QT P1G:)YT P1"TM?T

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

17/23

Vie/)elect"ne-p.p PX):!TYPE "TM? PIG?I! W.11+3!11)T) "TM? $.( Transitional11EBWT P"TM?T P"EA)T PTIT?ET M ! . Pe5ueno Exemplo P1TIT?ET P1"EA)T PG:)YT PQp/p include4W.1!ontroller.p/pW)E 111111111111111 ie2 . Apresentao dos dados rece;idos do !ontroller111111111111111111 So;=GA?@uncionarioVne2 GA?@uncionario4)E So;=GA?@uncionario.Tset!odigo43)E 11 Passa o c<digo do &uncionrio a retornar SresultV So;=GA?@uncionario.Tget@uncionarioBome4So;=GA?@uncionario)E print WP/1T%etornando apenas um registroP1/1TWE 2/ile4Sro2 V m7s5lF&etc/Fro24Sresult))R ec/o Sro2[(\.W.WE ec/o Sro2[1\.WP;rTWE U QT P1G:)YT P1"TM?T Vie/)electAll-p.p PX):!TYPE "TM? PIG?I! W.11+3!11)T) "TM? $.( Transitional11EBWT P"TM?T P"EA)T PTIT?ET M ! . Pe5ueno Exemplo P1TIT?ET P1"EA)T PG:)YT PQp/p include4W.1!ontroller.p/pW)E 111111111111111 ie2 . Apresentao dos dados rece;idos do !ontroller111111111111111111 So;=GA?@uncionarioVne2 GA?@uncionario4)E SresultV So;=GA?@uncionario.Tget@uncionario4So;=GA?@uncionario)E print WP/1T%etornando todos os registrosP1/1TWE 2/ile4Sro2 V m7s5lF&etc/Fro24Sresult))R ec/o Sro2[(\.W.WE ec/o Sro2[1\.WP;rTWE U

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos QT P1G:)YT P1"TM?T

18/23

index-p.p 4mas 5ue no contempla todas as 3ie2s) P/1TExemplo prtico e m>nimo do uso do padro M ! com P"PP1/1T PQp/p i&4Xisset4SFKET[JconteudoJ\))R SconteudoVJ ie2ZelectAll.p/pJE print WPa /re&V_Windex.p/pQconteudoVSconteudo_WTP/3T%etornar todos os registrosP1/3TP1aTWE UelseR Sconteudo2VJ ie2Zelect:ne.p/pJE print WPa /re&V_Windex.p/pQconteudo2VSconteudo2_WTP/3T%etornar um registroP1/3TP1aTWE U print WPa /re&V_W.1 ie23.p/p_WTP/3TInserir %egistroP1/3TP1aTWE i&4isset4Sconteudo))R includeFonce4Sconteudo)E UelseR includeFonce4Sconteudo2)E U QT

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

29/23

2) 3e'er4ncias
?i3ros0 1) P"P # Po2er Programming Autores . Andi Kutmans8 Ztig Z`t/er Ga,,en8 and )eric, %et/ans Editora . P%EBTI!E "A?? . /ttp011222.p/ptr.com )o2nload . /ttp011ptgmedia.pearsoncmg.com1images1(131$M1$ab1do2nloads1(131$M1$abF;oo,.pd& 2) :;=ect.:riented Programming 2it/ P"P# Autor . "asin "a7der . /ttp011/asin.2ordpress.com1 Editora . Pac,t Pu;lis/ing . /ttp011222.pac,tpu;.com 3) :pen Zource !ontent Management Z7stem Goo, Zampler 4)rupal8 Al&resco8 Moodle8 +ordpress8 Ooomla 1.#8 Plone8 e1(M8 e9Pu;lis/) Autor . )a3id Mercer Editora . Pac,t Pu;lis/ing . /ttp011222.pac,tpu;.com $) Programando com :rientao a :;=etos !ap>tulo 1 de desmonstrao Autor . Pa;lo )allc:glio Editora d Bo3atec d /ttp011222.no3atec.com.;r /ttp011;oo,.ca,ep/p.org1pt1compare11(1Inderstanding.Model. ie2.!ontroller /ttp011anantgarg.com12((a1(311312rite.7our.o2n.p/p.m3c.&rame2or,.part.11 /ttp011slimp/p.source&orge.net1 /ttp011oreill7.com1p/p1arc/i3e1m3c.intro./tml /ttp011222.onlamp.com1pu;1a1p/p12((N1(31(21m3cFmodel./tml /ttp011222.onlamp.com1p/p12((#1111(31m3cFcontroller./tml /ttp011222.onlamp.com1p/p12((N1(112N1m3cF3ie2./tml /ttp011222.terminall7.inco/erent.com1;log12((L11(12212riting.a.minimalistic.m3c.&rame2or,.in. p/p1 /ttp011&ilesocial.eu.s3.ama9ona2s.com1iLtup3N1Me#a#aNa#&33;e&$ML#ce$1d;La1de33c2d(d#ad1Pro gramacao::P"P#.pd& d Elton /ttp011222./enri5ue;arroso.com1/o2.to.create.a.simple.m3c.&rame2or,.in.p/p1Hmore.1 /ttp011222.p/pro.org1tutorials1Model. ie2.!ontroller.M !./tml /ttp011222.p/pro.org1do2nloads1m3c.(.(.$.tar.g9 /ttp011222.re3istap/p.com.;r1print.p/pQidV#( /ttp011222.p/pit.net1article1simple.m3c.p/p#111Qpd&V7es Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

21/23

/ttp011ro;ro/an.com1pro=ects1do2nload.p/pQ&ileVexamples1M3!p/pF1.(.9ip /ttp011222.onlamp.com1lpt1a1N$3L /ttp011222.&ragmental.com.;r12i,i1index.p/pQtitleVM !FeF!amadas /ttp011pt.2i,ipedia.org12i,i1M ! /ttp011222.=oomla.com.;r1.artigos.mainmenu.$3123$.como.sorgani9ados.os.ar5ui3os.no.=oomla. 1#./tmlQtmplVcomponent^printV1^pageV /ttp011imasters.uol.com.;r1artigo1#Ma#1p/p1m3cFemFp/pFcomFsmart7F.FparteF(21imprimir1 Pe5ueno @rame2or, /ttp011s,inn7m3c.com1

Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos

22/23

*) 1icas 5teis
de&ine4J)ZJ8 )I%E!T:%YFZEPA%AT:%)E de&ine4J%::TJ8 dirname4dirname4FF@I?EFF)))E Surl V SFKET[JurlJ\E re5uireFonce 4%::T . )Z . Jli;rar7J . )Z . J;ootstrap.p/pJ)E &unction set%eporting4) R i& 4)E E?:PMEBTFEB I%:BMEBT VV true) R errorFreporting4EFA??)E iniFset4Jdispla7FerrorsJ8J:nJ)E U else R errorFreporting4EFA??)E iniFset4Jdispla7FerrorsJ8J:&&J)E iniFset4JlogFerrorsJ8 J:nJ)E iniFset4JerrorFlogJ8 %::T.)Z.JtmpJ.)Z.JlogsJ.)Z.Jerror.logJ)E U U 1]] !/ec, &or Magic Duotes and remo3e t/em ]]1 &unction stripZlas/es)eep4S3alue) R S3alue V isFarra74S3alue) Q arra7Fmap4JstripZlas/es)eepJ8 S3alue) 0 stripslas/es4S3alue)E return S3alueE U &unction remo3eMagicDuotes4) R i& 4 getFmagicF5uotesFgpc4) ) R SFKET V stripZlas/es)eep4SFKET )E SFP:ZT V stripZlas/es)eep4SFP:ZT )E SF!::eIE V stripZlas/es)eep4SF!::eIE)E U U 1]] !/ec, register glo;als and remo3e t/em ]]1 &unction unregisterKlo;als4) R i& 4iniFget4JregisterFglo;alsJ)) R Sarra7 V arra74JFZEZZI:BJ8 JFP:ZTJ8 JFKETJ8 JF!::eIEJ8 JF%EDIEZTJ8 JFZE% E%J8 JFEB J8 JF@I?EZJ)E &oreac/ 4Sarra7 as S3alue) R &oreac/ 4SK?:GA?Z[S3alue\ as S,e7 VT S3ar) R i& 4S3ar VVV SK?:GA?Z[S,e7\) R unset4SK?:GA?Z[S,e7\)E U U Ribamar FS http //c!rsos"riba#s"or$

MVC com PHP em Exemplos Prticos U U U 1]] Autoload an7 classes t/at are re5uired ]]1

23/23

&unction FFautoload4SclassBame) R i& 4&ileFexists4%::T . )Z . Jli;rar7J . )Z . strtolo2er4SclassBame) . J.class.p/pJ)) R re5uireFonce4%::T . )Z . Jli;rar7J . )Z . strtolo2er4SclassBame) . J.class.p/pJ)E U else i& 4&ileFexists4%::T . )Z . JapplicationJ . )Z . JcontrollersJ . )Z . strtolo2er4SclassBame) . J.p/pJ)) R re5uireFonce4%::T . )Z . JapplicationJ . )Z . JcontrollersJ . )Z . strtolo2er4SclassBame) . J.p/pJ)E U else i& 4&ileFexists4%::T . )Z . JapplicationJ . )Z . JmodelsJ . )Z . strtolo2er4SclassBame) . J.p/pJ)) R re5uireFonce4%::T . )Z . JapplicationJ . )Z . JmodelsJ . )Z . strtolo2er4SclassBame) . J.p/pJ)E U else R 1] Error Keneration !ode "ere ]1 U U At- o pr<ximo cursoX 0)

Ribamar FS http //c!rsos"riba#s"or$

Você também pode gostar