SlideShare a Scribd company logo
1 of 47
Download to read offline
rafa.informatica@gmail.com   www.yiiframework.com
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
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.




  rafa.informatica@gmail.com             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();




      rafa.informatica@gmail.com              www.yiiframework.com
OOP, MVC e DRY

                Componentes       Extensões




Model              Behaviors

                                                         Modules   Vendors

                    Controller,
Controller          Actions e
                      Filter



  View                             Widgets


  rafa.informatica@gmail.com      www.yiiframework.com
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
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
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
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
AJAX Widget
                                          Jquery 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...


rafa.informatica@gmail.com             www.yiiframework.com
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
AJAX Widget
                                         Jquery e outros
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());

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
RBAC
                Acesso 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




rafa.informatica@gmail.com        www.yiiframework.com
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
Camada de Apresentação
                             Layout, 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.


rafa.informatica@gmail.com       www.yiiframework.com
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                                 footer




rafa.informatica@gmail.com       www.yiiframework.com
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                                 footer




rafa.informatica@gmail.com       www.yiiframework.com
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                                      footer

rafa.informatica@gmail.com         www.yiiframework.com
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
Internacionalização
                                           I18N, L10N
1) 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
Cache em camadas
1) A cache também é configurada como componente da aplicação e pode utilizar recursos
Como MemCache, APCCache, Xcache, Eaccelerator, ZendDataCache, DBCache,
FileCache e DummyCache. A cache pode ser associada a dependências como
FileDependency, DirectoryDependency, DB, GlobalState, Chained e Expression.
Suporte para variações por Route, Session, Params e Expression. Suporte a Cache
aninhada.


                       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
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 com
Page 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
Error handling and log
1) 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
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
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
Code Generation
            % php YiiRoot/framework/yiic.php webapp testdrive


% cd WebRoot/testdrive                                 >> crud User
% protected/yiic shell                                  generate UserController.php
Yii Interactive Tool v1.1                               generate UserTest.php
Please 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.php
The following model classes                             generate _form.php
are successfully generated:                             generate _view.php
  User
                                                       Crud 'user' has been successfully
If 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
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



rafa.informatica@gmail.com                 www.yiiframework.com
Code Generation - Gii




rafa.informatica@gmail.com    www.yiiframework.com
Code Generation - Gii




rafa.informatica@gmail.com    www.yiiframework.com
Code Generation - Gii




rafa.informatica@gmail.com    www.yiiframework.com
Outras características

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




rafa.informatica@gmail.com    www.yiiframework.com
Mão na massa!
                      Criando sua primeira aplicação com Yii framwork




rafa.informatica@gmail.com           www.yiiframework.com
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
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




rafa.informatica@gmail.com     www.yiiframework.com
Mão na massa!
                                           Requisitos



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

Http://localhost/yii/requirements/

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




   rafa.informatica@gmail.com        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.




rafa.informatica@gmail.com         www.yiiframework.com
Mão na massa!
                             Yii Console Tool - WebApp




rafa.informatica@gmail.com     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.




rafa.informatica@gmail.com       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(
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
Mão na massa!
                                 Banco de dados




rafa.informatica@gmail.com     www.yiiframework.com
Mão na massa!
                              Gii - Criado seus Models




rafa.informatica@gmail.com      www.yiiframework.com
Mão na massa!
                             Gii - Criado seus Controllers




rafa.informatica@gmail.com       www.yiiframework.com
Mão na massa!
                                Implementar actions e views


                    Usuário                   Administrador                     Médico




    Vê             Solicita         Administra                Vê Suas        Agenda
Calendá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
Mão na massa!
                             Implementar actions e views




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
Dados legais!
                             Pra vender o peixe do Yii




rafa.informatica@gmail.com       www.yiiframework.com
Dados legais!
                             Pra vender o peixe do Yii




rafa.informatica@gmail.com       www.yiiframework.com
Obrigado!!


                             rafa.informatica@gmail.com



rafa.informatica@gmail.com        www.yiiframework.com

More Related Content

What's hot

Como criar um plugin para WordPress
Como criar um plugin para WordPressComo criar um plugin para WordPress
Como criar um plugin para WordPressLeandrinho Vieira
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoIvan Rosolen
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 
Ambiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntAmbiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntDenis L Presciliano
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Thyago Maia
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Thyago Maia
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsDenis L Presciliano
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Thyago Maia
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloelliando dias
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 

What's hot (20)

Framework Yii
Framework YiiFramework Yii
Framework Yii
 
Como criar um plugin para WordPress
Como criar um plugin para WordPressComo criar um plugin para WordPress
Como criar um plugin para WordPress
 
Python 07
Python 07Python 07
Python 07
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
Tutorial +login+mvc
Tutorial +login+mvcTutorial +login+mvc
Tutorial +login+mvc
 
Ambiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando AntAmbiente de Desenvolvimento Java usando Ant
Ambiente de Desenvolvimento Java usando Ant
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
 
Segurança e Controle de errros
Segurança e Controle de errrosSegurança e Controle de errros
Segurança e Controle de errros
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
Workshop05
Workshop05Workshop05
Workshop05
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro bolo
 
Jsf
JsfJsf
Jsf
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 

Viewers also liked

Yii framework 2 exemplo de uma aplicação-parte2
Yii framework 2 exemplo de uma aplicação-parte2Yii framework 2 exemplo de uma aplicação-parte2
Yii framework 2 exemplo de uma aplicação-parte2Marcelo Menezes
 
Segurança cibernética e software livre - Lourival Araujo - TchêLinux Uruguaiana
Segurança cibernética e software livre - Lourival Araujo - TchêLinux UruguaianaSegurança cibernética e software livre - Lourival Araujo - TchêLinux Uruguaiana
Segurança cibernética e software livre - Lourival Araujo - TchêLinux UruguaianaTchelinux
 
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YIIDETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YIIEder Nogueira
 
O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito
O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsitoO uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito
O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsitoGeorge Silva
 
Yii framework 2 exemplo de uma aplicação-parte1
Yii framework 2 exemplo de uma aplicação-parte1Yii framework 2 exemplo de uma aplicação-parte1
Yii framework 2 exemplo de uma aplicação-parte1Marcelo Menezes
 
Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...
Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...
Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...Filipe Aguilar Santana
 
Entendendo Scrum, Kanban e Programação Extrema
Entendendo Scrum, Kanban e Programação ExtremaEntendendo Scrum, Kanban e Programação Extrema
Entendendo Scrum, Kanban e Programação ExtremaDairton Bassi
 
Exemplo / Modelo de um Plano de Negócios (Template Business Case)
Exemplo / Modelo de um Plano de Negócios (Template Business Case)Exemplo / Modelo de um Plano de Negócios (Template Business Case)
Exemplo / Modelo de um Plano de Negócios (Template Business Case)Fernando Palma
 
Gerenciamento Ágil de Projetos
Gerenciamento Ágil de ProjetosGerenciamento Ágil de Projetos
Gerenciamento Ágil de ProjetosDaniel de Amaral
 
The Canvas of Business Case (Modelo de Caso de Negócio)
The Canvas of Business Case (Modelo de Caso de Negócio)The Canvas of Business Case (Modelo de Caso de Negócio)
The Canvas of Business Case (Modelo de Caso de Negócio)Rildo (@rildosan) Santos
 
Metodologias Ágeis em Gerenciamento de Projetos
Metodologias Ágeis em Gerenciamento de ProjetosMetodologias Ágeis em Gerenciamento de Projetos
Metodologias Ágeis em Gerenciamento de ProjetosDaniel de Amaral
 
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMetodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMatheus Costa
 
Resumo do livro SCRUM a arte de fazer o dobro do trabalho na metade do tempo ...
Resumo do livro SCRUM a arte de fazer o dobro do trabalho na metade do tempo ...Resumo do livro SCRUM a arte de fazer o dobro do trabalho na metade do tempo ...
Resumo do livro SCRUM a arte de fazer o dobro do trabalho na metade do tempo ...Thiago Compan
 
9 Pasos para crear un Business Case de Éxito
9 Pasos para crear un Business Case de Éxito9 Pasos para crear un Business Case de Éxito
9 Pasos para crear un Business Case de ÉxitoJos
 
Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Rildo (@rildosan) Santos
 

Viewers also liked (20)

Yii framework 2 exemplo de uma aplicação-parte2
Yii framework 2 exemplo de uma aplicação-parte2Yii framework 2 exemplo de uma aplicação-parte2
Yii framework 2 exemplo de uma aplicação-parte2
 
Segurança cibernética e software livre - Lourival Araujo - TchêLinux Uruguaiana
Segurança cibernética e software livre - Lourival Araujo - TchêLinux UruguaianaSegurança cibernética e software livre - Lourival Araujo - TchêLinux Uruguaiana
Segurança cibernética e software livre - Lourival Araujo - TchêLinux Uruguaiana
 
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YIIDETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
 
O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito
O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsitoO uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito
O uso do PostgreSQL e PostGIS no cadastro geocodificado de acidentes de trânsito
 
Yii framework 2 exemplo de uma aplicação-parte1
Yii framework 2 exemplo de uma aplicação-parte1Yii framework 2 exemplo de uma aplicação-parte1
Yii framework 2 exemplo de uma aplicação-parte1
 
Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...
Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...
Desenvolvimento de um protótipo de um sistema de informaçãO web para cadastro...
 
6. SCRUM e Kanban
6. SCRUM e Kanban6. SCRUM e Kanban
6. SCRUM e Kanban
 
Entendendo Scrum, Kanban e Programação Extrema
Entendendo Scrum, Kanban e Programação ExtremaEntendendo Scrum, Kanban e Programação Extrema
Entendendo Scrum, Kanban e Programação Extrema
 
Introdução ao PostGIS
Introdução ao PostGISIntrodução ao PostGIS
Introdução ao PostGIS
 
Exemplo / Modelo de um Plano de Negócios (Template Business Case)
Exemplo / Modelo de um Plano de Negócios (Template Business Case)Exemplo / Modelo de um Plano de Negócios (Template Business Case)
Exemplo / Modelo de um Plano de Negócios (Template Business Case)
 
Gerenciamento Ágil de Projetos
Gerenciamento Ágil de ProjetosGerenciamento Ágil de Projetos
Gerenciamento Ágil de Projetos
 
The Canvas of Business Case (Modelo de Caso de Negócio)
The Canvas of Business Case (Modelo de Caso de Negócio)The Canvas of Business Case (Modelo de Caso de Negócio)
The Canvas of Business Case (Modelo de Caso de Negócio)
 
Metodologias Ágeis em Gerenciamento de Projetos
Metodologias Ágeis em Gerenciamento de ProjetosMetodologias Ágeis em Gerenciamento de Projetos
Metodologias Ágeis em Gerenciamento de Projetos
 
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - KanbanMetodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
Metodologias Ágeis para Gestão e Planejamento de Projetos Scrum - XP - Kanban
 
Um guia definitivo para o Scrum em Português
Um guia definitivo para o Scrum em PortuguêsUm guia definitivo para o Scrum em Português
Um guia definitivo para o Scrum em Português
 
Resumo do livro SCRUM a arte de fazer o dobro do trabalho na metade do tempo ...
Resumo do livro SCRUM a arte de fazer o dobro do trabalho na metade do tempo ...Resumo do livro SCRUM a arte de fazer o dobro do trabalho na metade do tempo ...
Resumo do livro SCRUM a arte de fazer o dobro do trabalho na metade do tempo ...
 
9 Pasos para crear un Business Case de Éxito
9 Pasos para crear un Business Case de Éxito9 Pasos para crear un Business Case de Éxito
9 Pasos para crear un Business Case de Éxito
 
Como elaborar um Business Case
Como elaborar um Business CaseComo elaborar um Business Case
Como elaborar um Business Case
 
Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case
 
Scrum Experience [O Tutorial Scrum]
Scrum Experience [O Tutorial Scrum]Scrum Experience [O Tutorial Scrum]
Scrum Experience [O Tutorial Scrum]
 

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

Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Androidjoaobmonteiro
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
React + Flux (Alt)
React + Flux (Alt)React + Flux (Alt)
React + Flux (Alt)Cezar Luiz
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Javaelliando dias
 
Pilares do desenvolvimento Mobile no Nubank
 Pilares do desenvolvimento Mobile no Nubank Pilares do desenvolvimento Mobile no Nubank
Pilares do desenvolvimento Mobile no NubankDevCamp Campinas
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2Felipe Pimentel
 
aula09-redux-firebase-auth.pdf
aula09-redux-firebase-auth.pdfaula09-redux-firebase-auth.pdf
aula09-redux-firebase-auth.pdfBrunoTorres978388
 
Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Saulo Vallory
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jqueryYuri Costa
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend FrameworkJaime Neto
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no FrontendHenrique Gogó
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
 

Similar to Rafael Garcia - Yii Framework, principais características e em ação (20)

Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
Tutorial.yii
Tutorial.yiiTutorial.yii
Tutorial.yii
 
React + Flux (Alt)
React + Flux (Alt)React + Flux (Alt)
React + Flux (Alt)
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Java
 
Pilares do desenvolvimento Mobile no Nubank
 Pilares do desenvolvimento Mobile no Nubank Pilares do desenvolvimento Mobile no Nubank
Pilares do desenvolvimento Mobile no Nubank
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2
 
Vraptor
VraptorVraptor
Vraptor
 
aula09-redux-firebase-auth.pdf
aula09-redux-firebase-auth.pdfaula09-redux-firebase-auth.pdf
aula09-redux-firebase-auth.pdf
 
Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0Meu projeto final - Neobase 2.0
Meu projeto final - Neobase 2.0
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jquery
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento web
 

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

  • 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 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. 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ões Model 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 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... 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 outros 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()); 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çã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 rafa.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 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. 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 footer rafa.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 footer rafa.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 footer rafa.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, L10N 1) 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 camadas 1) A cache também é configurada como componente da aplicação e pode utilizar recursos Como MemCache, APCCache, Xcache, Eaccelerator, ZendDataCache, DBCache, FileCache e DummyCache. A cache pode ser associada a dependências como FileDependency, DirectoryDependency, DB, GlobalState, Chained e Expression. Suporte para variações por Route, Session, Params e Expression. Suporte a Cache aninhada. 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 camadas 4) Page Caching - Filter OutputCache public function filters() { return array( array( 'COutputCache', 'duration'=>100, 'varyByParam'=>array('id'), ), ); } 5) Dynamic Content - usado junto com Page 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 log 1) 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.php Yii Interactive Tool v1.1 generate UserTest.php Please 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.php The following model classes generate _form.php are successfully generated: generate _view.php User Crud 'user' has been successfully If 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=gii rafa.informatica@gmail.com www.yiiframework.com
  • 28. Code Generation - Gii rafa.informatica@gmail.com www.yiiframework.com
  • 29. Code Generation - Gii rafa.informatica@gmail.com www.yiiframework.com
  • 30. Code Generation - Gii rafa.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 Manager rafa.informatica@gmail.com www.yiiframework.com
  • 32. Mão na massa! Criando sua primeira aplicação com Yii framwork rafa.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.1 rafa.informatica@gmail.com www.yiiframework.com
  • 35. Mão na massa! Requisitos O Yii vem com uma ferramenta para ajudar a detectar os requisitos necessários para o framework e para a aplicação. Http://localhost/yii/requirements/ Após essa etapa o framework Pode passar para um diretório Acima 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 - WebApp rafa.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 dados rafa.informatica@gmail.com www.yiiframework.com
  • 41. Mão na massa! Gii - Criado seus Models rafa.informatica@gmail.com www.yiiframework.com
  • 42. Mão na massa! Gii - Criado seus Controllers rafa.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 Agenda Calendá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 views 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
  • 45. Dados legais! Pra vender o peixe do Yii rafa.informatica@gmail.com www.yiiframework.com
  • 46. Dados legais! Pra vender o peixe do Yii rafa.informatica@gmail.com www.yiiframework.com
  • 47. Obrigado!! rafa.informatica@gmail.com rafa.informatica@gmail.com www.yiiframework.com