47
[email protected] www.yiiframework.com

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

[email protected] www.yiiframework.com

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

[email protected] www.yiiframework.com

Rafael Alves Nogueira [email protected]

Desenvolvedor PHP há 9 anosDesenvolvo com Yii Framework há 2 anos

Já desenvolvi algumas extensões para o Yii:* Wrappers para extensões Jquery;* Integração com PHP IDS;

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

[email protected] www.yiiframework.com

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 Janeiro de 2008. Em dezembro a versão 1.0 estava pronta, hoje estamos na versão 1.1.6 e a versã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 e Funcional, XHTML, extensões, modularidade, Drive Event, scaffolding, etc.

O guia do Yii é utlizar as melhores ideias de vários projetos e frameworks e extensivamente o lazy loading.

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

[email protected] www.yiiframework.com

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();

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

[email protected] www.yiiframework.com

OOP, MVC e DRY

Componentes Extensões

Controller,Actions e

Filter

Behaviors

Widgets

Model

Controller

View

Modules Vendors

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

[email protected] www.yiiframework.com

DAO/QueryBuilder/AR

Yii::app()->db->createCommand($sql)->execute();

Yii::app()->db->createCommand()->select('nome')->from(Usuario::model()->tableName)->where(’id=:id’, array(’:id’=>$id))->queryRow();

$Usuario = Usuario::model()->findByPk($id);$Transaction = Yii::app()->db->beginTransaction();$Usuario->nome = 'Teste...';try{

$Usuario->save();$transaction->commit();

} catch (Exception $e) {$transaction->rollBack();

}

CActiveRecord

Evento

Compromisso Reunião

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

[email protected] www.yiiframework.com

DAO/QueryBuilder/ARCaracterísticas muito uteis do AR

1) Instruções em massa:ActiveRecord::deleteAll(condition);ActiveRecord::updateAll(params, condition);

4) Eventos:ActiveRecord::beforeValidate();ActiveRecord::afterFind();

2) Behaviors:Modificam ou adicionamcomportamentos.

3) campos calculados

class Usuário extends CactiveRecord {…public function getNomeCompleto() {

return “$this->nome $this->sobrenome”;}...

}

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

[email protected] www.yiiframework.com

Form Validation InputCactiveRecord, 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'),

);}...

}

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

[email protected] www.yiiframework.com

Form Validation InputCactiveRecord, 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;

}...

}

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

[email protected] www.yiiframework.com

AJAX WidgetJquery e outros

A base para trabalhar com javascript adotada pelo Yii é o Jquery, os Widgets do Yii usam 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ção clientScript, as extensões geralmente fazem uso desse componente para publicar seus scripts 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 ser feitas 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...

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

[email protected] www.yiiframework.com

AJAX WidgetJquery e outros

<div id="forAjaxRefresh"></div> <?php echo CHtml::ajaxLink('clickMe', array('ajax'), array('update'=>'#forAjaxRefresh'));?>

public function actionAjax(){ $this->renderPartial('ajaxView', array(), false, true);}

<?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');?>

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

[email protected] www.yiiframework.com

AJAX WidgetJquery e outros

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); }}

echo 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());

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

[email protected] www.yiiframework.com

RBACAcesso baseado em perfil, autenticação e autorização

O 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ções fora do core do Yii.

Em 99% dos casos o foco da autorização é a credencial do usuário, para realizar o processo de autenticação do usuário no sistema utilizamos CUserIdenty, responsável por validar as credenciais de acesso, após autenticado as informações são persistidas e acessadas atraves de Yii::app()->user que retorna CwebUser.

A autorização é feita pelos controllers e estem devem utilizar o filtro accessControl e sobrescrever o método accessRules passando um array com as regras de acesso as actions do controller atual.

Uma regra pode ser de allow ou deny baseada nos seguintes parametros:Actions, controllers, users, roles, ips, verbs, expressions

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

[email protected] www.yiiframework.com

RBACAcesso 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('*'), ), ); }}

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

[email protected] www.yiiframework.com

Camada de ApresentaçãoLayout, Themes e Skins

Atualmente o Yii vem preparado pra criar um layout com o framework css blueprint, o que facilita muito a criação e a manutenção do layout. Mas qual quer outra ferramenta ou seus layouts podem ser aplicados ao Yii sem complicações.

1) Layout – basicamente é a estrutura da aplicação dividida em main (parte fixa que envolve 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 pela aplicação.

2) Themes – um tema para ser aplicado no layout, modifica cores, imagens e estilos do 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, na view, em temas ou aninhados em outros widgets. Widgets na maioria dos casos precisam receber parâmetros e alguns deles recebem muitos parâmetros pincipalmente algumas extensões javascript. Como esses parâmetros quase sempre são repetitivos, eles foram separados do widget sendo postos em um arquivo de skin que é referenciado ao criar o widget. Podemos criar vários widgets usando a mesma skin para configura-los, e para reconfigura-los basta alterar a skin.

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

[email protected] www.yiiframework.com

Layoutheader

footer

view Widget

Camada de ApresentaçãoLayout, Themes e Skins

Layoutheader

footer

view

Como o framework controla o fluxo de execução o código não fica quebrado em partealguma.

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

[email protected] www.yiiframework.com

Layoutheader

footer

Layoutheader

footer

view Widget

Camada de ApresentaçãoLayout, Themes e Skins

view

O tema é um conjunto de estilos, imagens, que pode ou não ter novas estruturas parao layout.

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

[email protected] www.yiiframework.com

Layoutheader

footer

Layoutheader

footer

view

Widget

Camada de ApresentaçãoLayout, Themes e Skins

view

Widget

Widget

Widget Widget

Widget

Widget

O conteúdo da view ou widget pode ser atualizado com AJAX através de parâmetros.

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

[email protected] www.yiiframework.com

WebServiceSOAP 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');

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

[email protected] www.yiiframework.com

InternacionalizaçãoI18N, L10N

array(…'sourceLanguage'='en','langague'=>'pt-br',...

);

1) Definimos a linguagem em que a aplicação foi escrita e a linguagem em que a aplicação é usada.* ChttpRequest::preferredLanguage;

Yii::t('app', 'Path alias "{alias}" is redefined.', array('{alias}'=>$alias))

2) Yii::t(contexto, mensagem origem original, parâmetros);

3) MessageSource – DB, GNUGettext e PHP

4) Opções e PluraisYii::t('app', 'n==1#one book|n>1#many books', 1));Yii::t('test', 'cucumber|cucumbers', 1);Yii::t('test', '{n} cucumber|{n} cucumbers', 1);

5) Formatos$numberFormatter->format('#,##0.00',$number))$dateFormatter->format('yyyy-MM-dd',$timestamp);

* Constants for ISO 8601 Date Output

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

[email protected] www.yiiframework.com

Cache em camadas

1) 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);$value=Yii::app()->cache->get($id);Yii::app()->cache->set($id, $value, 30,

new CfileCacheDependency('FileName'));

2) Data Caching

3) Fragment Caching ...other HTML content...<?php if($this->beginCache($id, array('duration'=>3600))) { ?>...content to be cached...<?php $this->endCache(); } ?>...other HTML content...

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

[email protected] www.yiiframework.com

Cache em camadas

4) 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...

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

[email protected] www.yiiframework.com

Error handling and log

return array( ...... 'components'=>array( 'errorHandler'=>array( 'errorAction'=>'site/error', ), ),);

2) Exceptions

throw new ChttpException(404,'The specified post cannot be found.');

1) Error handling com uma action

3) Podemos usar os eventos da aplicaçãoonError e onException.

4) Log de mensagens

Yii::log($message, $level, $category);Yii::trace($message, $category); //debug mode true

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

[email protected] www.yiiframework.com

array( ...... 'preload'=>array('log'), 'components'=>array( ...... 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( array( 'class'=>'CFileLogRoute', 'levels'=>'trace, info', 'categories'=>'system.*', ), array( 'class'=>'CEmailLogRoute', 'levels'=>'error, warning', 'emails'=>'[email protected]', ), ), ), ),)

Error handling and log5) Log Router

Yii::beginProfile('blockID');...code block being profiled...Yii::endProfile('blockID');

6) Profile log

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

[email protected] www.yiiframework.com

<?php $this->beginWidget('CHtmlPurifier'); ?>...display user-entered content here...<?php $this->endWidget(); ?>

SecurityCSRF, XSS, SQL Injection, HTML Purify and Cookie(HMAC)

return array( 'components'=>array( 'request'=>array( 'enableCsrfValidation'=>true,

'enableCookieValidation'=>true, ), ),);

$cookie=Yii::app()->request->cookies[$name];$value=$cookie->value;

$cookie=new CHttpCookie($name,$value);Yii::app()->request->cookies[$name]=$cookie;

ExtensãoPHP IDS

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

[email protected] www.yiiframework.com

Code Generation

% cd WebRoot/testdrive% protected/yiic shellYii Interactive Tool v1.1Please type 'help' for help. Type 'exit' to quit.>> model User tbl_user generate models/User.php generate fixtures/tbl_user.php generate unit/UserTest.php

The following model classes are successfully generated: User

If you have a 'db' database connection, you can test these models now with: $model=User::model()->find(); print_r($model);

>> crud User generate UserController.php generate UserTest.php mkdir D:/testdrive/protected/views/user generate create.php generate update.php generate index.php generate view.php generate admin.php generate _form.php generate _view.php

Crud 'user' has been successfully created. You may access it via:http://hostname/path/to/index.php?r=user

% php YiiRoot/framework/yiic.php webapp testdrive

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

[email protected] www.yiiframework.com

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=gii

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

[email protected] www.yiiframework.com

Code Generation - Gii

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

[email protected] www.yiiframework.com

Code Generation - Gii

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

[email protected] www.yiiframework.com

Code Generation - Gii

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

[email protected] www.yiiframework.com

Outras características

● Teste funcional, Teste unitário, TDD● Event Driven● XHTML padronizado● Extensões● Módulos● Console Application● URL Manager

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

[email protected] www.yiiframework.com

Mão na massa!Criando sua primeira aplicação com Yii framwork

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

[email protected] www.yiiframework.com

Mão na massa!Workflow de desenvolvimento

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.

Antes de iniciar o ambiente deve estar preparado, e o banco de dados criado.

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

[email protected] www.yiiframework.com

Mão na massa!Ambiente

O ambiente é o básico para qualquer aplicação web em PHP.

LAMP, WAMP ou outros com PHP 5.1

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

[email protected] www.yiiframework.com

Mão na massa!Requisitos

O Yii vem com uma ferramentapara ajudar a detectar os requisitos necessários para oframework e para a aplicação.

Http://localhost/yii/requirements/

Após essa etapa o frameworkPode passar para um diretório Acima do diretório web

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

[email protected] www.yiiframework.com

Mão na massa!Yii Console Tool - WebApp

Após o download do Yii o primeiro passo é criar o esqueleto da aplicação.

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

[email protected] www.yiiframework.com

Mão na massa!Yii Console Tool - WebApp

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

[email protected] www.yiiframework.com

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.

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

[email protected] www.yiiframework.com

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( 'name'=>'Sistema de Agendamento',

... 'modules'=>array( 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'teste123', 'ipFilters'=>array('127.0.0.1',

'::1'), ), ), …);

return array( … 'components'=>array(

… 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=webagenda', 'username' => 'root',

'password' => 'teste123','charset' => 'utf8',

),…

),);

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

[email protected] www.yiiframework.com

Mão na massa!Banco de dados

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

[email protected] www.yiiframework.com

Mão na massa!Gii - Criado seus Models

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

[email protected] www.yiiframework.com

Mão na massa!Gii - Criado seus Controllers

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

[email protected] www.yiiframework.com

Mão na massa!Implementar actions e views

Usuário

SolicitaConsulta

VêCalendário

Administrador Usuário

AdministraConsultas e Contas,

Gera relatórios

Médico

Vê SuasConsultas

AgendaCompromissos

Secretária

ConfirmaConsulta

Todos

Login, Logout, Atualiza sua Conta

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

[email protected] www.yiiframework.com

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.

Mão na massa!Implementar actions e views

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

[email protected] www.yiiframework.com

Dados legais!Pra vender o peixe do Yii

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

[email protected] www.yiiframework.com

Dados legais!Pra vender o peixe do Yii

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

[email protected] www.yiiframework.com

Obrigado!!

[email protected]