Your SlideShare is downloading. ×
0
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Rafael Garcia - Yii Framework, principais características e em ação

12,593

Published on

Principais características do Yii Framework e Mão na massa! …

Principais características do Yii Framework e Mão na massa!
Palestra apresentada na Íparos Design Studio no primeiro ciclo de palestras de 2011

Published in: Technology
2 Comments
4 Likes
Statistics
Notes
  • Marion, me estendi mais na apresentação das características fazendo um resumo do que encontramos na documentação do Yii em www.yiiframework.com. Já o 'mão na massa' não tem o objetivo de ser detalhado, é apenas um guia para desenvolver uma aplicação para demonstração rápida. Se tiver alguma dúvida, por favor entre em contato. Há também o grupo Yfb do google, onde pode encontrar ajuda.

    Att,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Cara, a tua explicação 'pondo a mão na massa' ficou horrível, vc nao explicou absolutamente nada, parece até que não sabe trabalhar com o Yii
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
12,593
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
231
Comments
2
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. rafa.informatica@gmail.com www.yiiframework.com
  • 2. Rafael Alves Nogueira Garcia rafa.informatica@gmail.com Desenvolvedor PHP há 9 anos Desenvolvo com Yii Framework há 2 anos Já desenvolvi algumas extensões para o Yii: * Wrappers para extensões Jquery; * Integração com PHP IDS;rafa.informatica@gmail.com www.yiiframework.com
  • 3. Sobre o Yii:Is it fast? ... Is it secure? ... Is it professional? ... Is it right for my next project? ... Yes, it is!Quiang Xue, desenvolvedor do Projeto Prado, iniciou o desenvolvimento do Yii em Janeirode 2008. Em dezembro a versão 1.0 estava pronta, hoje estamos na versão 1.1.6 e aversão 2.0 reformulada para o php 5.3 estará disponível em Dezembro de 2011.Caracteristicas...OOP, MVC, DRY, DAO/QueryBuilder/AR, Form Input Validation, AJAX Widgets, RBAC,Skin and Theme, WebService, I18N, L10N, Layered Cache, Error handling and log,Security ( CSRF, XSS, SQL Injection, HTML Purify and Cookie), Teste Unitário eFuncional, XHTML, extensões, modularidade, Drive Event, scaffolding, etc.O guia do Yii é utlizar as melhores ideias de vários projetos e frameworks eextensivamente o lazy loading. rafa.informatica@gmail.com www.yiiframework.com
  • 4. WorkFlow<?php$yii=dirname(__FILE__)./../yii/framework/yii.php;$config=dirname(__FILE__)./protected/config/main.php;defined(YII_DEBUG) or define(YII_DEBUG,true);defined(YII_TRACE_LEVEL) or define(YII_TRACE_LEVEL,3);require_once($yii);Yii::createWebApplication($config)->run(); rafa.informatica@gmail.com www.yiiframework.com
  • 5. OOP, MVC e DRY Componentes ExtensõesModel Behaviors Modules Vendors Controller,Controller Actions e Filter View Widgets rafa.informatica@gmail.com www.yiiframework.com
  • 6. DAO/QueryBuilder/AR Yii::app()->db->createCommand($sql)->execute(); CActiveRecord Yii::app()->db->createCommand() ->select(nome) Evento ->from(Usuario::model()->tableName) ->where(’id=:id’, array(’:id’=>$id)) ->queryRow(); Compromisso Reunião $Usuario = Usuario::model()->findByPk($id); $Transaction = Yii::app()->db->beginTransaction(); $Usuario->nome = Teste...; try{ $Usuario->save(); $transaction->commit(); } catch (Exception $e) { $transaction->rollBack(); }rafa.informatica@gmail.com www.yiiframework.com
  • 7. DAO/QueryBuilder/AR Características muito uteis do AR 1) Instruções em massa: 2) Behaviors: ActiveRecord::deleteAll(condition); Modificam ou adicionam ActiveRecord::updateAll(params, condition); comportamentos.3) campos calculados 4) Eventos: ActiveRecord::beforeValidate();class Usuário extends CactiveRecord { ActiveRecord::afterFind(); … public function getNomeCompleto() { return “$this->nome $this->sobrenome”; } ...}rafa.informatica@gmail.com www.yiiframework.com
  • 8. Form Validation Input CactiveRecord, Cmodel e CModelForm - ActiveRecord::rules(), ActiveRecord::save() e Model::validate() - Cenários (scenario) - rules e validators class Usuário extends CactiveRecord { … public function rules() { return array( array(nome,email,required), array(senha, login, required, on=>login), array(nome,length, min=>2, max=>50), array(email,email), ); } ... }rafa.informatica@gmail.com www.yiiframework.com
  • 9. Form Validation Input CactiveRecord, Cmodel e CModelForm Validators do Yii: bollean, captcha, e-mail, compare, default, exist, file, filter, in, length, match, numerical, required, type, unique, url, safe e unsafe; Podemos estender Cvalidator; Podemos escrever métodos na nossa classe e referencia-los como validators: class Usuário extends CactiveRecord { … public function rules() { return array( array(nome,meuvalidator), ); } public function getMeuValidator($valor){ return true; } ... }rafa.informatica@gmail.com www.yiiframework.com
  • 10. AJAX Widget Jquery e outrosA base para trabalhar com javascript adotada pelo Yii é o Jquery, os Widgets do Yiiusam Jquery, e a biblioteca Jquery pode ser lida diretamente do core.Para gerenciar os scripts e os estilos o Yii conta com o componente da aplicaçãoclientScript, as extensões geralmente fazem uso desse componente para publicar seusscripts e estilos.Todos os components do JqueryUI tem wrappers no Yii. Yii::app()->getClientScript()->registerScriptFile(); Yii::app()->getClientScript()->registerCssFile(); Yii::app()->getClientScript()->registerScript(); Yii::app()->getClientScript()->registerCss(); Yii::app()->getClientScript()->registerCoreScripts();Os scripts são gerados no local correto do código HTML;Alterações para renderizar views especializadas para mobile por exemplo pode serfeitas estendendo CclientScript assim como CHTML;Reaproveitamento de código;Escreve pouco ou nenhum javascript.Além de várias extensions contamos com CgridView, Cmenu, CJUIWidgets, etc...rafa.informatica@gmail.com www.yiiframework.com
  • 11. AJAX Widget Jquery e outros<div id="forAjaxRefresh"></div> public function actionAjax() {<?php echo CHtml::ajaxLink(clickMe, $this->renderPartial(ajaxView, array(), false, true);array(ajax), } array(update=>#forAjaxRefresh));?> <?php $this->beginWidget(zii.widgets.jui.CJuiDialog,array( id=>jobDialog, options=>array( title=>Yii::t(job,Create Job), autoOpen=>true, modal=>true, width=>auto, height=>auto, ), )); echo $this->renderPartial(_formDialog, array(model=>$model)); ?> <?php $this->endWidget(zii.widgets.jui.CJuiDialog);?> rafa.informatica@gmail.com www.yiiframework.com
  • 12. AJAX Widget Jquery e outrosecho Chtml::dropDownList(country_id,, array(1=>USA,2=>France,3=>Japan),array(ajax => array(type=>POST,url=>CController::createUrl(currentController/dynamiccities),update=>#city_id,)));echo CHtml::dropDownList(city_id,, array());public function actionDynamiccities(){ $data=Location::model()->findAll(parent_id=:parent_id, array(:parent_id=>(int) $_POST[country_id])); $data=CHtml::listData($data,id,name); foreach($data as $value=>$name) { echo CHtml::tag(option, array(value=>$value),CHtml::encode($name),true); }} rafa.informatica@gmail.com www.yiiframework.com
  • 13. RBAC Acesso baseado em perfil, autenticação e autorizaçãoO Yii possui o componente de aplicação authManager para gerenciar o RBAC.A base do RBAC pode estar em um banco de dados, arquivo php e existem opçõesfora do core do Yii.Em 99% dos casos o foco da autorização é a credencial do usuário, para realizar oprocesso de autenticação do usuário no sistema utilizamos CUserIdenty, responsávelpor validar as credenciais de acesso, após autenticado as informações são persistidase acessadas atraves de Yii::app()->user que retorna CwebUser.A autorização é feita pelos controllers e estem devem utilizar o filtro accessControl esobrescrever o método accessRules passando um array com as regras de acesso asactions do controller atual.Uma regra pode ser de allow ou deny baseada nos seguintes parametros:Actions, controllers, users, roles, ips, verbs, expressionsrafa.informatica@gmail.com www.yiiframework.com
  • 14. RBAC Acesso baseado em perfil, autenticação e autorização class PostController extends CController { ...... public function accessRules() { return array( array(deny, actions=>array(create, edit), users=>array(?), ), array(allow, actions=>array(delete), roles=>array(admin), ), array(deny, actions=>array(delete), users=>array(*), ), ); } }rafa.informatica@gmail.com www.yiiframework.com
  • 15. Camada de Apresentação Layout, Themes e SkinsAtualmente o Yii vem preparado pra criar um layout com o framework css blueprint, oque facilita muito a criação e a manutenção do layout. Mas qual quer outra ferramentaou seus layouts podem ser aplicados ao Yii sem complicações.1) Layout – basicamente é a estrutura da aplicação dividida em main (parte fixa queenvolve o conteúdo) e views (conteúdo), podemos ter vários layouts ao mesmo tempo:1 coluna, 2 colunas, com menu, sem menu, etc... usados simultaneamente pelaaplicação.2) Themes – um tema para ser aplicado no layout, modifica cores, imagens e estilosdo layout. Pode modificar parte da estrutura do layout ou até todo o layout.3) Skins – Os widgets podem estar presente em qualquer parte do layout, no main, naview, em temas ou aninhados em outros widgets. Widgets na maioria dos casosprecisam receber parâmetros e alguns deles recebem muitos parâmetrospincipalmente algumas extensões javascript. Como esses parâmetros quase sempresão repetitivos, eles foram separados do widget sendo postos em um arquivo de skinque é referenciado ao criar o widget. Podemos criar vários widgets usando a mesmaskin para configura-los, e para reconfigura-los basta alterar a skin.rafa.informatica@gmail.com www.yiiframework.com
  • 16. Camada de Apresentação Layout, Themes e Skins Como o framework controla o fluxo de execução o código não fica quebrado em parte alguma. Layout Layout header header view view Widget footer footerrafa.informatica@gmail.com www.yiiframework.com
  • 17. Camada de Apresentação Layout, Themes e Skins O tema é um conjunto de estilos, imagens, que pode ou não ter novas estruturas para o layout. Layout Layout header header view view Widget footer footerrafa.informatica@gmail.com www.yiiframework.com
  • 18. Camada de Apresentação Layout, Themes e Skins O conteúdo da view ou widget pode ser atualizado com AJAX através de parâmetros. Layout Layout header header Widget Widget Widget view Widget view Widget Widget Widget footer footerrafa.informatica@gmail.com www.yiiframework.com
  • 19. WebService SOAP e REST(1.1.6)class StockController extends CController{ public function actions() { return array( quote=>array( class=>CWebServiceAction, ), ); } public function getPrice($symbol) { $prices=array(IBM=>100, GOOGLE=>350); return isset($prices[$symbol])?$prices[$symbol]:0; }} $client=new SoapClient(http://webapp/index.php?r=stock/quote); echo $client->getPrice(GOOGLE); rafa.informatica@gmail.com www.yiiframework.com
  • 20. Internacionalização I18N, L10N1) Definimos a linguagem em que a aplicação foi escrita array( e a linguagem em que a aplicação é usada. …* ChttpRequest::preferredLanguage; sourceLanguage=en, langague=>pt-br, ... );2) Yii::t(contexto, mensagem origem original, Yii::t(app, Path alias "{alias}" is redefined., parâmetros); array({alias}=>$alias))3) MessageSource – DB, GNUGettext e PHP Yii::t(app, n==1#one book|n>1#many books, 1));4) Opções e Plurais Yii::t(test, cucumber|cucumbers, 1); Yii::t(test, {n} cucumber|{n} cucumbers, 1); $numberFormatter->format(#,##0.00,$number))5) Formatos $dateFormatter->format(yyyy-MM-dd,$timestamp); * Constants for ISO 8601 Date Output rafa.informatica@gmail.com www.yiiframework.com
  • 21. Cache em camadas1) A cache também é configurada como componente da aplicação e pode utilizar recursosComo MemCache, APCCache, Xcache, Eaccelerator, ZendDataCache, DBCache,FileCache e DummyCache. A cache pode ser associada a dependências comoFileDependency, DirectoryDependency, DB, GlobalState, Chained e Expression.Suporte para variações por Route, Session, Params e Expression. Suporte a Cacheaninhada. Yii::app()->cache->set($id, $value, 30);2) Data Caching $value=Yii::app()->cache->get($id); Yii::app()->cache->set($id, $value, 30, new CfileCacheDependency(FileName));3) Fragment Caching ...other HTML content... <?php if($this->beginCache($id, array(duration=>3600))) { ?> ...content to be cached... <?php $this->endCache(); } ?> ...other HTML content... rafa.informatica@gmail.com www.yiiframework.com
  • 22. Cache em camadas4) Page Caching - Filter OutputCache public function filters() { return array( array( COutputCache, duration=>100, varyByParam=>array(id), ), ); }5) Dynamic Content - usado junto comPage Caching ou Fragment Caching ...other HTML content... <?php if($this->beginCache($id)) { ?> ...fragment content to be cached... <?php $this->renderDynamic($callback); ?> ...fragment content to be cached... <?php $this->endCache(); } ?> ...other HTML content... rafa.informatica@gmail.com www.yiiframework.com
  • 23. Error handling and log1) Error handling com uma action 2) Exceptions return array( throw new ChttpException(404, ...... The specified post cannot be found.); components=>array( errorHandler=>array( errorAction=>site/error, ), 3) Podemos usar os eventos da aplicação ), onError e onException. );4) Log de mensagens Yii::log($message, $level, $category); Yii::trace($message, $category); //debug mode true rafa.informatica@gmail.com www.yiiframework.com
  • 24. Error handling and log 5) Log Router array( ...... preload=>array(log), components=>array( ...... log=>array( class=>CLogRouter, routes=>array( array( class=>CFileLogRoute, 6) Profile log levels=>trace, info, categories=>system.*, Yii::beginProfile(blockID); ), ...code block being profiled... array( Yii::endProfile(blockID); class=>CEmailLogRoute, levels=>error, warning, emails=>admin@example.com, ), ), ), ), )rafa.informatica@gmail.com www.yiiframework.com
  • 25. Security CSRF, XSS, SQL Injection, HTML Purify and Cookie(HMAC) <?php $this->beginWidget(CHtmlPurifier); ?> ...display user-entered content here... <?php $this->endWidget(); ?> return array( components=>array( request=>array( enableCsrfValidation=>true, Extensão enableCookieValidation=>true, PHP IDS ), ), );$cookie=Yii::app()->request->cookies[$name];$value=$cookie->value;$cookie=new CHttpCookie($name,$value);Yii::app()->request->cookies[$name]=$cookie;rafa.informatica@gmail.com www.yiiframework.com
  • 26. Code Generation % php YiiRoot/framework/yiic.php webapp testdrive% cd WebRoot/testdrive >> crud User% protected/yiic shell generate UserController.phpYii Interactive Tool v1.1 generate UserTest.phpPlease type help for help. Type exit to quit. mkdir D:/testdrive/protected/views/user>> model User tbl_user generate create.php generate models/User.php generate update.php generate fixtures/tbl_user.php generate index.php generate unit/UserTest.php generate view.php generate admin.phpThe following model classes generate _form.phpare successfully generated: generate _view.php User Crud user has been successfullyIf you have a db database connection, created. You may access it via:you can test these models now with: http://hostname/path/to/index.php?r=user $model=User::model()->find(); print_r($model); rafa.informatica@gmail.com www.yiiframework.com
  • 27. Code Generation - Gii return array( ...... modules=>array( gii=>array( class=>system.gii.GiiModule, password=>pick up a password here, // ipFilters=>array(...a list of IPs...), // newFileMode=>0666, // newDirMode=>0777, ), ), ); http://hostname/testdrive/index.php?r=giirafa.informatica@gmail.com www.yiiframework.com
  • 28. Code Generation - Giirafa.informatica@gmail.com www.yiiframework.com
  • 29. Code Generation - Giirafa.informatica@gmail.com www.yiiframework.com
  • 30. Code Generation - Giirafa.informatica@gmail.com www.yiiframework.com
  • 31. Outras características ● Teste funcional, Teste unitário, TDD ● Event Driven ● XHTML padronizado ● Extensões ● Módulos ● Console Application ● URL Managerrafa.informatica@gmail.com www.yiiframework.com
  • 32. Mão na massa! Criando sua primeira aplicação com Yii framworkrafa.informatica@gmail.com www.yiiframework.com
  • 33. Mão na massa! Workflow de desenvolvimento Antes de iniciar o ambiente deve estar preparado, e o banco de dados criado.1. Criar o esqueleto da aplicação com Yii Console Tool;2. Configurar a aplicação, adicionar seus componentes;3. Criar seus Models, o Gii pode ajduar a criar as classes ActiveRecord;4. Criar os Controllers (Gii);5. Implementar as actions e views;6. Configurar os filters dos controllers quando necessário;7. Se for necessário configurar um ou mais temas (themes);8. Traduções e Internacionalização (I18N);9. Implementar as técnicas de caching apropiadas;10. Tune up da aplicação. * Executar testes em cada item.rafa.informatica@gmail.com www.yiiframework.com
  • 34. Mão na massa! Ambiente O ambiente é o básico para qualquer aplicação web em PHP. LAMP, WAMP ou outros com PHP 5.1rafa.informatica@gmail.com www.yiiframework.com
  • 35. Mão na massa! RequisitosO Yii vem com uma ferramentapara ajudar a detectar osrequisitos necessários para oframework e para a aplicação.Http://localhost/yii/requirements/Após essa etapa o frameworkPode passar para um diretórioAcima do diretório web rafa.informatica@gmail.com www.yiiframework.com
  • 36. Mão na massa! Yii Console Tool - WebApp Após o download do Yii o primeiro passo é criar o esqueleto da aplicação.rafa.informatica@gmail.com www.yiiframework.com
  • 37. Mão na massa! Yii Console Tool - WebApprafa.informatica@gmail.com www.yiiframework.com
  • 38. Mão na massa! Aplicação Nossa aplicação será um site simples para divulgação de serviços médicos e agendamento de consultas através de formulário, sem gestão de conteúdo. Para facilitar a tarefa acrescentaremos o campo data ao formulário e forneceremos o link para visualização da agenda com os horários marcados. O backend da nossa aplicação será protegido por senha e contará com 3 níveis de acesso: secretaria (confirma as consultas), médico (visualiza suas consultas) e administrador (acesso total). O site deve ter recursos da web 2.0.rafa.informatica@gmail.com www.yiiframework.com
  • 39. Mão na massa! Configurar a aplicação Todas as configurações da aplicação concentram-se no arquivo …/webapp/protected/config/main.php, arquivos de configuração com outras finaldiades como test.php, console.php, …/protected/backend/config/main.php utilizam main.php como base. return array(return array( … name=>Sistema de Agendamento, components=>array( ... … modules=>array( db=>array( gii=>array( connectionString => class=>system.gii.GiiModule, mysql:host=localhost;dbname=webagenda, password=>teste123, username => root, ipFilters=>array(127.0.0.1, password => teste123, ::1), charset => utf8, ), ), ), … … ),); ); rafa.informatica@gmail.com www.yiiframework.com
  • 40. Mão na massa! Banco de dadosrafa.informatica@gmail.com www.yiiframework.com
  • 41. Mão na massa! Gii - Criado seus Modelsrafa.informatica@gmail.com www.yiiframework.com
  • 42. Mão na massa! Gii - Criado seus Controllersrafa.informatica@gmail.com www.yiiframework.com
  • 43. Mão na massa! Implementar actions e views Usuário Administrador Médico Vê Solicita Administra Vê Suas AgendaCalendário Consulta Consultas e Contas, Consultas Compromissos Gera relatórios Secretária Todos Confirma Login, Logout, Atualiza sua Conta Consulta rafa.informatica@gmail.com www.yiiframework.com
  • 44. Mão na massa! Implementar actions e views1. Criar o esqueleto da aplicação com Yii Console Tool;2. Configurar a aplicação, adicionar seus componentes;3. Criar seus Models, o Gii pode ajduar a criar as classes ActiveRecord;4. Criar os Controllers (Gii);5. Implementar as actions e views;6. Configurar os filters dos controllers quando necessário;7. Se for necessário configurar um ou mais temas (themes);8. Traduções e Internacionalização (I18N);9. Implementar as técnicas de caching apropiadas;10. Tune up da aplicação. * Executar testes em cada item.rafa.informatica@gmail.com www.yiiframework.com
  • 45. Dados legais! Pra vender o peixe do Yiirafa.informatica@gmail.com www.yiiframework.com
  • 46. Dados legais! Pra vender o peixe do Yiirafa.informatica@gmail.com www.yiiframework.com
  • 47. Obrigado!! rafa.informatica@gmail.comrafa.informatica@gmail.com www.yiiframework.com

×