iniciando com yii framework - volmar machado da silva neto (rede pampa de comunicação)
TRANSCRIPT
Linguagem Dinamica
Linguagem com foco em desenvolvimento Web
- Velocidade e robustez
- Estruturado e orientado a objetos
- Portabilidade
- Tipagem dinamica
- Sintaxe similar ao C/C++ e Perl
- Open-source
PHP: Linguagem, aplicabilidades, porque php?
O PHP tem muitas bibliotecas.
Ex: SOAP, XML, DOM, Stream, PDO etc...
Tem uma comunidade gigantesca.
Ex. Listas, grupos, foruns, empresas.
Atualizações constantes.
Documentação.
Estatisticas Linguagem Sites Porcentagem
PHP 3.9984.25 59%ASP.NET 2.294.166 34%Perl 259.931 4%Python 159.475 2%Java 18.065 0%
PHP: Linguagem, aplicabilidades, porque php?
É usado por muitas empresas de sites institucionais, a aplicações de intranet e extranet. Temos como exemplo, facebook, milharesde sites e blogs com wordpress, temos ainda outros que usamjoomla e drupal, e também Yii framework.
PHP: Linguagem, aplicabilidades, porque php?
file:///C:/Users/Internet/Desktop/drupal.jpeg
file:///C:/Users/Internet/Desktop/joomla.jpeg
file:///C:/Users/Internet/Desktop/images.jpg
file:///C:/Users/Internet/Desktop/magento.jpg
YII Framework
O nome Yii representa as palavras fácil (easy), eficiente (efficient) e extensível (extensible)
Yii é um framework de alta performance em PHP que utiliza componentespara o desenvolvimento de grandes aplicações Web.
Reutilização de códigos.
Aceleração significativa do processo de desenvolvimento.
O Yii é um framework de programação Web genérico.Caching para o desenvolvimento de aplicações com alto tráfego de dados.
Como a maioria dos frameworks PHP, O Yii é um framework MVC.
Eficiente, rico em recursos e bem documentado.
O Yii é não é nem um subproduto de algum projeto, nem um conglomerado de trabalho de terceiros.
YII Framework: MVC
Modelo-Visão-Controle
O Yii implementa o padrão de desenvolvimento modelo-visão-controle (MVC) que é amplamente adotado na programação Web. O MVC visa separar a lógicade negócio da interface com o usuário, assim os programadores podem mudarfacilmente cada parte, sem afetar as outras. No padrão MVC, o modelorepresenta as informações (os dados) e as regras de negócio, a visão contémelemento de interface com o usuário, como textos, formulários, e o controlegerencia a comunicação entre o modelo e a visão. Além MVC, o Yii tambémintroduz um controle de frente, chamado aplicação (application), que representao contexto de execução dos processos requisitados. A aplicação recebe a solicitação do usuário e a envia para um controlador adequado para serprocessada.
YII Framework: YIIC
% cd WebRoot% php YiiRoot/framework/yiic.php webapp nomeapp
Ferramenta de linha de comando para automação
comandos:- controller- crud- form- help- model- module
YII Framework: YIIC
Create a Web application under '/Webroot/nomeapp? [Yes|No]
Yes
mkdir /WebRoot/nomeapp
mkdir /WebRoot/nomeapp/assets
mkdir /WebRoot/nomeapp/css
generate css/bg.gif
generate css/form.css
generate css/main.css...
exemplo/ index.php Script único de entrada da aplicação index-test.php Script de entrada para testes funcionais assets/ Arquivos de recurso publicados css/ Folhas de estilo images/ Diretorio de imagens themes/ Temas da aplicação protected/ Diretorio protegido dos arquivos de aplicação components/ Componentes reusaveis da aplicação Controller.php Classe base para as controllers UserIdentity.php Classe usada para autenticação config/ Diretorio de configuração da aplicação console.php Configuração do console da aplicação main.php Configuração da aplicação web test.php Configuração para os testes funcionais controllers/ Diretorio das controllers da aplicação SiteController.php Controller padrão
YII Framework: Estrutra de diretorio da aplicação
extensions/ Contem extensões de terceiros messages/ Mensagens traduzidas models/ Diretorio de Modelos LoginForm.php Modelo de formulario para action 'login' ContactForm.php Modelo de formulario para a action 'contact' runtime/ Arquivos temporarios tests/ Scripts de teste views/ Arquivos de apresentação e layout layouts/ Layout de apresentação main.php Layout base da aplicação column1.php Layout para paginas com uma coluna column2.php Layout para paginas com duas colunas site/ Apresentação para a controller Site pages/ Paginas 'estaticas' about.php Apresentação para a action 'about' contact.php Apresentação para a action 'contact' error.php Apresentação para a action 'error' index.php Apresentação para a action 'index' login.php Apresentação para a action 'login'
YII Framework: Estrutra de diretorio da aplicação
<?php
// uncomment the following to define a path alias// Yii::setPathOfAlias('local','path/to/local-folder');
// This is the main Web application configuration. Any writable// CWebApplication properties can be configured here.return array(
'modules'=>array( 'telemarketing', ),
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..','name'=>'.: Sistema Integrado XP :.',
// preloading 'log' component//'preload'=>array('log'),
// autoloading model and component classes'import'=>array(
'application.models.*','application.components.*',
'application.models.utils.*', 'application.models.jornal.*',
'application.models.jornal.cliente.*','application.models.jornal.telemarketing.*',
'application.models.sistema.*',),
YII Framework: Configuração
'modules'=>array(// uncomment the following to enable the Gii tool'gii' =>array(
'class' => 'system.gii.GiiModule','password' => '123456','ipFilters' => false,
),),
// application components'components'=>array(
'user'=>array(// enable cookie-based authentication'allowAutoLogin'=>true,
),// uncomment the following to enable URLs in path-format/*'urlManager'=>array(
'urlFormat'=>'path','rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view','<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>','<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),),*/
/*'db'=>array(
'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',),*/
YII Framework: Configuração
// uncomment the following to use a MySQL database'db'=>array(
'connectionString' => 'mysql:host=10.0.1.10;dbname=o_sul','emulatePrepare' => true,'username' => 'dbuser','password' => '1234','charset' => 'utf8',
),
'errorHandler'=>array( 'errorAction'=>'site/error', ),
'log'=>array('class'=>'CLogRouter','routes'=>array(
array('class'=>'CFileLogRoute','levels'=>'error, warning',
),array(
'class'=>'CWebLogRoute',),
),),
),
'params'=>array(// this is used in contact page'adminEmail'=>'[email protected]
',),
);
YII Framework: Configuração
YII Framework: Script de entrada
<?php
// change the following paths if necessary$yii=dirname(__FILE__).'/../../yii-1.1.6.r2877/framework/yii.php';$config=dirname(__FILE__).'/protected/config/main.php';
// remove the following lines when in production modedefined('YII_DEBUG') or define('YII_DEBUG',true);// specify how many levels of call stack should be shown in each log messagedefined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
require_once($yii);Yii::createWebApplication($config)->run();
YII Framework: Ciclo de vida da aplicação
1. Pré-inicia a aplicação com o método CApplication::preinit();2. Configura as o auto-carregamento de classes (autoloader) e o tratamento de erros;3. Registra os principais componentes da aplicação;4. Carrega as configurações da aplicação;5. Inicia a aplicação com o CApplication::init():1. Registra os comportamentos (behaviors) da aplicação;2. Carrega os componentes estáticos da aplicação;6. Dispara o evento onBeginRequest (no início da requisição);7. Processa a requisição do usuário:1. Resolve a requisição do usuário;2. Cria um controle;3. Executa o controle;8. Dispara o evento onEndRequest (ao fim da requisição);
YII Framework: Controllerclass ExemploController extends Controller{
public function __construct($id) {$this->layout = 'colunm1';parent::__construct($id);
}
public function actionAction1(){$this->render('action1');}
public function actionAction2(){$this->render('action2');}
public function actionAction3(){$this->render('action3');}
public function actionIndex(){$this->render('index');}
}
// Uncomment the following methods and override them if needed/*public function filters(){// return the filter configuration for this controller, e.g.:return array('inlineFilterName',array('class'=>'path.to.FilterClass','propertyName'=>'propertyValue',),);}
public function actions(){// return external action classes, e.g.:return array('action1'=>'path.to.ActionClass','action2'=>array('class'=>'path.to.AnotherActionClass','propertyName'=>'propertyValue',),);}*/
YII Framework: Controller
YII Framework: Model<?php
/** * This is the model class for table "entidade". * * The followings are the available columns in table 'entidade': * @property integer $id * @property string $nome * @property string $descricao */class Entidade extends CActiveRecord{/** * Returns the static model of the specified AR class. * @return Entidade the static model class */public static function model($className=__CLASS__){return parent::model($className);}
/** * @return string the associated database table name */public function tableName(){return 'entidade';}
YII Framework: Model
/** * @return array validation rules for model attributes. */public function rules(){// NOTE: you should only define rules for those attributes that// will receive user inputs.return array(array('nome, descricao', 'required'),array('nome, descricao', 'length', 'max'=>255),// The following rule is used by search().// Please remove those attributes that should not be searched.array('id, nome, descricao', 'safe', 'on'=>'search'),);}
/** * @return array relational rules. */public function relations(){// NOTE: you may need to adjust the relation name and the related// class name for the relations automatically generated below.return array();}
YII Framework: Model/** * @return array customized attribute labels (name=>label) */public function attributeLabels(){return array('id' => 'ID','nome' => 'Nome','descricao' => 'Descricao',);}
/** * Retrieves a list of models based on the current search/filter conditions. * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions. */public function search(){// Warning: Please modify the following code to remove attributes that// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);$criteria->compare('nome',$this->nome,true);$criteria->compare('descricao',$this->descricao,true);
return new CActiveDataProvider(get_class($this), array('criteria'=>$criteria,));}}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="language" content="en" />
<!-- blueprint CSS framework --> <link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/screen.css" media="screen, projection" /> <link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/print.css" media="print" /> <!--[if lt IE 8]><link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/ie.css" media="screen, projection" /><![endif]-->
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/main.css" /> <link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/form.css" /> <script language="javascript" src="<?php echo Yii::app()->request->baseUrl; ?>/js/js/jquery.js" ></script> <script language="javascript" src="<?php echo Yii::app()->request->baseUrl; ?>/js/start.js" ></script> <title><?php echo CHtml::encode($this->pageTitle); ?></title> </head>
main.phpcolumn1.phpcolumn2.php
YII Framework: Layout / Main
<body> <div class="container" id="page"> <div id="header"> <div id="logo"><?php echo CHtml::encode($this->pageTitle); ?></div> </div><!-- header --> <?php if(!Yii::app()->user->isGuest){ ?> <div id="alert_header" class="alert_header"> </div> <?php } ?> <?php $this->widget('zii.widgets.CBreadcrumbs', array( 'links' => $this->breadcrumbs, )); ?><!-- breadcrumbs -->
<?php echo $content; ?>
<div id="footer">Copyright © Rede Pampa - <?php echo date('Y'); ?>. </div><!-- footer -->
</div><!-- page -->
</body></html>
YII Framework: Layout / Main
<?php$this->breadcrumbs=array('Exemplo'=>array('/exemplo'),'Action1',);?><h1><?php echo $this->id . '/' . $this->action->id; ?></h1>
<p>You may change the content of this page by modifyingthe file <tt><?php echo __FILE__; ?></tt>.</p>
YII Framework: View / action1
YII Framework: CRUD / Controllerclass EntidadeController extends Controller{/** * @var string the default layout for the views. Defaults to '//layouts/column2', * meaning using two-column layout. See 'protected/views/layouts/column2.php'. */public $layout='//layouts/column2';
/** * @return array action filters */public function filters(){return array('accessControl', // perform access control for CRUD operations);}
/** * Specifies the access control rules. * This method is used by the 'accessControl' filter. * @return array access control rules */public function accessRules(){return array(array('allow', // allow all users to perform 'index' and 'view' actions'actions'=>array('index','view'),'users'=>array('*'),),
YII Framework: CRUD / Controller
array('allow', // allow authenticated user to perform 'create' and 'update' actions'actions'=>array('create','update'),'users'=>array('@'),),array('allow', // allow admin user to perform 'admin' and 'delete' actions'actions'=>array('admin','delete'),'users'=>array('admin'),),array('deny', // deny all users'users'=>array('*'),),);}
/** * Displays a particular model. * @param integer $id the ID of the model to be displayed */public function actionView($id){$this->render('view',array('model'=>$this->loadModel($id),));}
YII Framework: CRUD / Controller/** * Creates a new model. * If creation is successful, the browser will be redirected to the 'view' page. */public function actionCreate(){$model=new Entidade;
// Uncomment the following line if AJAX validation is needed// $this->performAjaxValidation($model);
if(isset($_POST['Entidade'])){$model->attributes=$_POST['Entidade'];if($model->save())$this->redirect(array('view','id'=>$model->id));}
$this->render('create',array('model'=>$model,));}
/** * Updates a particular model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id the ID of the model to be updated */public function actionUpdate($id){$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed// $this->performAjaxValidation($model);
YII Framework: CRUD / Controllerif(isset($_POST['Entidade'])){$model->attributes=$_POST['Entidade'];if($model->save())$this->redirect(array('view','id'=>$model->id));}
$this->render('update',array('model'=>$model,));}
/** * Deletes a particular model. * If deletion is successful, the browser will be redirected to the 'index' page. * @param integer $id the ID of the model to be deleted */public function actionDelete($id){if(Yii::app()->request->isPostRequest){// we only allow deletion via POST request$this->loadModel($id)->delete();
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browserif(!isset($_GET['ajax']))$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));}elsethrow new CHttpException(400,'Invalid request. Please do not repeat this request again.');}
YII Framework: CRUD / Controller/** * Lists all models. */public function actionIndex(){$dataProvider=new CActiveDataProvider('Entidade');$this->render('index',array('dataProvider'=>$dataProvider,));}
/** * Manages all models. */public function actionAdmin(){$model=new Entidade('search');$model->unsetAttributes(); // clear any default valuesif(isset($_GET['Entidade']))$model->attributes=$_GET['Entidade'];
$this->render('admin',array('model'=>$model,));}
YII Framework: CRUD / Controller/** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. * @param integer the ID of the model to be loaded */public function loadModel($id){$model=Entidade::model()->findByPk((int)$id);if($model===null)throw new CHttpException(404,'The requested page does not exist.');return $model;}
/** * Performs the AJAX validation. * @param CModel the model to be validated */protected function performAjaxValidation($model){if(isset($_POST['ajax']) && $_POST['ajax']==='entidade-form'){echo CActiveForm::validate($model);Yii::app()->end();}}
<?php$this->breadcrumbs=array('Entidades'=>array('index'),'Manage',);
$this->menu=array(array('label'=>'List Entidade', 'url'=>array('index')),array('label'=>'Create Entidade', 'url'=>array('create')),);
Yii::app()->clientScript->registerScript('search', "$('.search-button').click(function(){$('.search-form').toggle();return false;});$('.search-form form').submit(function(){$.fn.yiiGridView.update('entidade-grid', {data: $(this).serialize()});return false;});");?>
<h1>Manage Entidades</h1>
YII Framework: CRUD / Widgets
<p>You may optionally enter a comparison operator (<b><</b>, <b><=</b>, <b>></b>, <b>>=</b>, <b><></b>or <b>=</b>) at the beginning of each of your search values to specify how the comparison should be done.</p>
<?php echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?><div class="search-form" style="display:none"><?php $this->renderPartial('_search',array('model'=>$model,)); ?></div><!-- search-form -->
<?php $this->widget('zii.widgets.grid.CGridView', array('id'=>'entidade-grid','dataProvider'=>$model->search(),'filter'=>$model,'columns'=>array('id','nome','descricao',array('class'=>'CButtonColumn',),),)); ?>
YII Framework: CRUD / Widgets
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array('id'=>'entidade-form','enableAjaxValidation'=>false,)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row"><?php echo $form->labelEx($model,'nome'); ?><?php echo $form->textField($model,'nome',array('size'=>60,'maxlength'=>255)); ?><?php echo $form->error($model,'nome'); ?></div>
<div class="row"><?php echo $form->labelEx($model,'descricao'); ?><?php echo $form->textField($model,'descricao',array('size'=>60,'maxlength'=>255)); ?><?php echo $form->error($model,'descricao'); ?></div>
<div class="row buttons"><?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?></div>
<?php $this->endWidget(); ?>
</div><!-- form -->
YII Framework: CRUD / Partial View
YII Framework: Scripts
Classe CClientScript
$baseUrl = Yii::app()->baseUrl;$cs = Yii::app()->getClientScript();$cs->registerCssFile($baseUrl . '/css/calendarjs.css');$cs->registerCssFile($baseUrl . '/css/drh/principal.css');$cs->registerScriptFile($baseUrl . '/js/calendario/jquery.js');$cs->registerScriptFile($baseUrl . '/js/calendario/mootools.js');$cs->registerScriptFile($baseUrl . '/js/calendario/calendar.js');
[email protected]://www.yiiframework.com/doc/guide/