Você está na página 1de 5
Definindo o projeto ‘Na minha opinio a melhor forma de aprender wna nova ferramenta, inguagem ou sistema operacional £é quando vocé realmente precisa rerolver algum problema com ela. Pensando nisto, este livro é baseado na construso de wm aplicativo: um blog. Mas um blog? Por alguns motivos: + Bum problema fécil de se entender, Todo mundo sabe como wm blog fimciona, seus requisitos fimncionalidades, entio a fae de requititor do projeto¢ fail de comupletr. + Un blog apresenta um grande mimero de fmncionalidades comuns a vitiot outros sites, como médulor, controle de acesto e permisiSes, upload de arquivos,tratamento de formulérios, cache, traduSes, integragio com servigor externos, ee. + A grande msioria dos frameworks pormui tm exemplo ‘como desenvolver wn blog usando X", entio fica mais facil para comparajio se voce ja extudow algum outro framework como CakePHP, Codelgniter ow mesmo Ruby on Rails Modelagem Agora que o convenci (ou nfo) que detenvolver um blog pode Ihe ajudar a entender o Zend Framework, ‘vamos mostrar a modelagem das tabelas ver VARCHAR PawT a re vancvanas Tent omen Seeaentexr teen “me 7 post date TMESTAMP 2 description TEXT 21 “ zs onurvarena) za Gna ean) > Sim- ples, como deveria ser. ## Criayio das tabelas Usando alguma ferramenta, como o PHPMyAdmin, SequelPro, ou o bora e velho terminal, é possivel criar a estrutura do banco usando of comandor SQL abaixo: efinindo o projeto 7 4 create database fanapratica; create database =f2napratica test; 4 GRANT ALL privileges ON cfanspratica.* 70 cend@localhost IDENTIFIED BY ‘ “ole” VARCHAR(20) NULL , PRIMARY KEY (“id°) ) ENGINE = Innod; CREATE TABLE IF NOT EXISTS “posts* ( “i> INP NOT NULL AUTO_INCRENEND “title” VARCHAR(250) NOT NULL, description’ TEXT NOT NULL , Spost_date® TINESTAHP NOT NULL DEFAULT CURRENT_TIMESTANP PRIMARY KEY (*id*) ) ENGINE = Innod; CREATE TABLE IF NOT EXISTS “comments” ( “id INE NOT NULL aUTO_INGRENENT st “post_id® INF NOT NULL 2 “deseription® TEXT NOP NULL , 6 “name” VARCHAR(200) NOT NULL, email” VARCHAR(250) HOT NULL, webpage’ VARCHAR(200) NOT NULL, “conment_date” TIMESTAMP NULL, 7 PRIMARY KEY (~id”, ~post_i™) , INDEX “fk_comments_posts* (“post_id’ ASC) , CONSTRAINT ~sk_comments_posts” FOREIGN KEY (“post_id” ) REFERENCES “posts” (*id> ) 2 ON DELETE No ACTION (ON UPDATE No ACTION) ENGINE = Innode; Uhttps://gist github com/4011076 [No script acima criamos duas bares de dados (zf2napratica e zf2napratica_test) que vamos usar para o banco de produyio e o banco de testes, respectivamente. Voltaremos a esse banco de testes nos proximos t6picos. efinindo o projeto 8 Configurando o projeto (© Zend Framework 2 conta com arquivos de configuragio separados que so unificados no momento da (Os principais arquivos que iremos usar durante o projeto so: + config/application.config.php: Arquivo com as configuracSes gerais da aplicacio. Sio configuraySee ‘usadas por todos os médulos e componenter. + config/test.config.php- Arquivo com as configurarées usadas pelos testes automatizados que criaremos no decorrer do projeto. + config/autoload/global.phpe config/autoload/local. php: O arquivo global.phpé usado como ausiliar 20 application.config.php pols também contém configurarSes para a aplicacio como um todo. A idéia é colocar neste arquivo configuragSes que podem mudar de acordo com a maquina do desenvolvedor, Um exemplo so as configuragSes da conexio com o banco de dados. Estas configuracées podem ser alteradas para as méquinas locais, dos desenvolvedores. Para isso 0 desenvolvedor sobrescreve as configurazSes no local,php. O arquivo local.php nio deve ser salvo no controle de verses (svn ou git por exemplo) ‘module/Nome/config/module.config.php: Configuraries especificas 20 médulo. (Os arquivos de configurario so geralmente scripts PHP que retomam arrays de configurazio. Siorépidos durante a execuzio e de facil leitura. global.php phe return axray( service manager! => axray( fectoriee' => array( "Zend\Db\Adapter Vidapter’ => 'Zend\Db\Adapter \AdapterServiceFac\ tory, on on dot o> array( aeiver! "Pac, sn > ‘mysal /cbnane=sf2napratica;host=localhost', driver_options' => array( oo: :WYSQL_ATOR_INIT. WMaND => ‘SET NAMES \'UTFE\"* » i: Uhttps://gist github com/4011070 local.php efinindo o projeto ° <7php return array( ‘ae! => array( "password" v% Uhttps://gist github com/4011083, test.config.php array( driver’ : en! =f2napratica_test;host=localhest, password! driver_options' => array( Poo: :MYSQL_ATTR_INTT_COMMAND ‘SET NAMES \"UTFS\, » i: ‘https: //gist.github.com/4011987 ‘Voltaremos a ver esses arquivos de configuraso no decorrer do projeto,e seus itens passarfo a fazer mais sentido conforme formos aprendendo algumas fmcionalidades do framework. Configuragées dos testes Testes automatizados salvam sua vida! Parece um pouco de exagero, mas o uso de testes aumenta consideravelmente a qualidade de seus c6digos ¢ garantem uma tranquilidade maior em tarefas como refatoracéo e melhorias. Neste projeto usaremos alguns conceitos de TDD (Test Driven Development (desenvolvimento guiado por testes) e usaremos a ferramenta PHPUnit para nos ausiliar na criarfo dos testes. Novamente, o objetivo deste livro é ser pratico, entéo nfo vou entrar em todos os detalhes do TDD e do PHPUnit aqui, deixando isso para excelentes livros existentes. Um link interessante para iniciar é 0 manual oficial do PHPUnit, Diretério de testes Precisamos criar 0 diret6rio onde salvaremos nosior codigos de teste. No Linux/Mac: mkdir -p module/Application/tests/sro/Application [Nos préximos capitulos adicionaremos os testes para nossos modelos, controladores e tervigos, efinindo o projeto 10 Configuragdes do PHPUnit ‘Vamos usar o médulo Skel como modelo para os nossos novos médulos. Iniciamos usando as configura- ‘Bes do PHPUnit copiando alguns arquivos para o médulo Application: op module/Skel tests /Bootstrap.php module /Application/tests, cop module/Skel /tests/phpunit xml module/Application/tests Precisamos agora alterar of arquivos para usarmos no novo médulo. No phpunit.xml, linha 8: testeuite na ‘Application Test Suite"> e linha 24: log type="coverage-html” target="_reports/coverage” title="Modulo Applicat’ ion” charset="UIF-8" yui="true” highlight="true” lowUpperBound="35" highLow ‘erBound="70 ‘Vamos também alterar a configurasio do arquivo Bootstrap php: static function getHodulePath() { mudar 0 caminho do modulo return DIR. '/../../../module/Application'; Projeto definido e configurado. Agora, méos a obra!

Você também pode gostar