Tutorial Yii Framework
Yii Framework
http://www.yiiframework.com
O Guia Definitivo para o Yii
http://www.yiiframework.com/doc/guide/pt/index
Yii Class Reference
http://www.yiiframework.com/doc/api/1.0.10
Yii Class Reference - CHtml - Componentes de Interface
http://www.yiiframework.com/doc/api/CHtml
Índice
1. Instalação........................................................................................................................................2
2. Geração da Estrutura da Aplicação ................................................................................................2
3. Banco de Dados..............................................................................................................................2
4. Geração do MVC............................................................................................................................2
5. Menu...............................................................................................................................................4
6. Extensões........................................................................................................................................4
7. Labels dos Campos.........................................................................................................................4
8. Campos do Grid..............................................................................................................................5
9. Campos Obrigatórios......................................................................................................................5
Anexo I – Estrutura da Aplicação..........................................................................................................7
Anexo II – Menu multi-nível.................................................................................................................8
Anexo III – Campos do Grid .................................................................................................................9
1. Instalação
Execute o download do Yii Framework no link:
http://www.yiiframework.com/download
Copie o arquivo ZIP para o diretório “C:WWW”, descompacte e mude o nome do diretório para
”yii”.
2. Geração da Estrutura da Aplicação
Entre no “Prompt de comando” e execute os comandos abaixo para criar a estrutura da aplicação:
CD www
MD servico
CD servico
php5php wwwyiiframeworkyiic webapp wwwservico
Para testar digite a URL abaixo no browser:
http://localhost/www/servico/index.php
3. Banco de Dados
Crie um banco de dados chamado “servico” no MySQL com o SQL disponível no site.
Altere o arquivo abaixo com a configuração do MySQL mostrada:
wwwservicoprotectedconfigmain.php
'db'=>array(
'connectionString'=>'mysql:host=localhost;dbname=servico',
'username'=>'root',
'password'=>'mysql',
),
4. Geração do MVC
Entre no “Prompt de comando” e execute os comandos abaixo para criar a estrutura da aplicação:
php5php wwwyiiframeworkyiic shell
model TABELA, para gerar o MODEL de uma tabela
crud TABELA, para gerar o VIEW/CONTROLLER de uma tabela
Abaixo é mostrada a saída dos comandos de geração:
Yii Interactive Tool v1.0 (based on Yii v1.0.10)
Please type 'help' for help. Type 'exit' to quit.
>> model cidade
generate cidade.php
The following model classes are successfully generated:
cidade
If you have a 'db' database connection, you can test these models now
with:
$model=cidade::model()->find();
print_r($model);
>> crud cidade
generate CidadeController.php
mkdir E:/php/servico/protected/views/cidade
generate create.php
generate update.php
generate list.php
generate show.php
generate admin.php
generate _form.php
Crud 'cidade' has been successfully created. You may access it via:
http://hostname/path/to/index.php?r=cidade
>>
As tabelas do banco de dados cujo código deve ser gerado são:
cidade
cliente
os
osobservacao
osservico
servico
Para testar digite a URL abaixo no browser:
http://localhost/www/servico/index.php?r=cidade
5. Menu
O arquivo abaixo contém a estrutura principal da tela, inclusive o menu, compartilhado por todas as
VIEWs, e deve ser alterado conforme o código mostrado:
wwwservicoprotectedviewslayoutsmain.php
$this->widget('application.components.MainMenu',array(
'items'=>array(
array('label'=>'Home', 'url'=>array('/site/index')),
array('label'=>'Contact', 'url'=>array('/site/contact')),
array('label'=>'Cidades', 'url'=>array('/cidade/admin')),
array('label'=>'Login', 'url'=>array('/site/login'),
'visible'=>Yii::app()->user->isGuest),
array('label'=>'Logout', 'url'=>array('/site/logout'),
'visible'=>!Yii::app()->user->isGuest)
),
));
6. Extensões
O menu padrão do Yii permite apenas 1 único nível de opções. Para resolver este problemas
podemos instalar uma extensão que implementa um menu multi-nível. Basta executar o download
do link abaixo, descompactar no diretório indicado e alterar o código do script anterior para o código
mostrado no Anexo II:
http://www.yiiframework.com/extension/menu
wwwservicoprotectedextensionsmenu
7. Labels dos Campos
As descrições dos campos do banco de dados são definidos no MODEL da tabela, através da função
“attributeLabels”:
wwwservicoprotectedmodelscidade.php
public function attributeLabels()
{
return array(
'CHAVE' => 'Chave',
'NOME' => 'Nome da Cidade',
'UF' => 'UF',
'DATE_TIME' => 'Date Time',
);
8. Campos do Grid
Os campos do grid exibido no VIEW de cada tabela estão no arquivo abaixo podendo ser alterado
para exibir ícones ao invés de links bem como remover campos, como mostrado no Anexo III:
wwwservicoprotectedviewscidadeadmin.php
Além disso é necessário alterar a classe “dataGrid” do CSS como mostrado no código abaixo:
wwwservicocssmain.css
table.dataGrid
{
background: white;
border-collapse: collapse;
/* width: 100%; */
}
O diretório abaixo vai receber as imagens GIF disponíveis no site:
wwwservicothemesclassicimages
O tema “classic” deve ser configurado no arquivo de configuração:
wwwservicoprotectedviewslayoutsmain.php
'theme'=>'classic'
9. Campos Obrigatórios e Date_Time
O Yii não gera campos para digitação da chave-primária nas telas de inclusão. Assim é necessário
definir estes campos nas tabelas CIDADE e SERVICO, apenas para as inclusões. O campo
DATE_TIME pode ser removido das telas. Além disso é necessário incluir o campo CHAVE na lista
de campos a serem gravados e atribuir um valor ao campo DATE_TIME usado para gravar a data da
última alteração no registro, como mostrado abaixo:
wwwservicoprotectedviewscidade_form.php
wwwservicoprotectedviewsservico_form.php
<?php echo CHtml::errorSummary($model) ?>
<?php
if(!$update)
{
echo '<div class="simple">';
echo CHtml::activeLabelEx($model,'CHAVE',array('label'=>'Chave'));
echo
CHtml::activeTextField($model,'CHAVE',array('size'=>10,'maxlength'=>10,$r
eadonly=>''));
echo '</div>';
}
?>
wwwexemployiiprotectedmodelsCidade.php
public function safeAttributes()
{
return array(
'CHAVE', 'NOME', 'UF', 'DATE_TIME',
);
}
wwwexemployiiprotectedmodelsServico.php
public function safeAttributes()
{
return array(
'CHAVE', 'DESCRICAO', 'PRECO', 'DATE_TIME',
);
}
wwwexemployiiprotectedmodels*.php
protected function beforeSave()
{
$this->DATE_TIME = Date('y-m-d H:i:s.u');
return true;
}
Anexo I – Estrutura da Aplicação
testdrive/
index.php Script de entrada da aplicação Web
assets/ Contém arquivos de recurso publicados
css/ Contém arquivos CSS
images/ Contém arquivos de imagem
themes/ Contém temas da aplicação
protected/ Contém arquivos protegidos da aplicação
yiic Script de linha de comando yiic
yiic.bat Script de linha de comando yiic para o Windows
commands/ Contém comandos 'yiic' customizados
shell/ Contém comandos 'yiic shell' customizados
components/ Contém componentes reutilizáveis do usuário
MainMenu.php A classe widget 'MainMenu' (Menu Principal)
Identity.php A classe 'Identity' usada nas autenticações
views/ Contém arquivos de visão dos widgets
mainMenu.php O arquivo de visão do widget 'MainMenu'
config/ Contém arquivos de configurações
console.php Configuração da aplicação console
main.php Configuração da aplicação Web
controllers/ Contém arquivos das classes de controle
SiteController.php Classes de controle padrão
extensions/ Contém extensões de terceiros
messages/ Contém mensagens traduzidas
models/ Contém arquivos das classes de modelo
LoginForm.php Modelo do formulário para a ação 'login'
ContactForm.php Modelo do formulário para a ação 'contact'
runtime/ Contém arquivos gerados temporariamente
views/ Contém arquivos de visão dos controles e layouts
layouts/ Contém arquivos de visão do layout
main.php O layout padrão para todas as visões
site/ Contém arquivos de visão para o controle 'site'
contact.php Visão para a ação 'contact'
index.php Visão para a ação 'index'
login.php Visão para a ação 'login'
system/ Contém arquivos de visão do sistema
Anexo II – Menu multi-nível
<!--<div id="mainmenu">
<php
$this->widget('application.components.MainMenu',array(
'items'=>array(
array('label'=>'Home', 'url'=>array('/site/index')),
array('label'=>'Contact', 'url'=>array('/site/contact')),
array('label'=>'Cidades', 'url'=>array('/cidade/admin')),
array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
array('label'=>'Logout', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
),
));
>
</div>--><!-- mainmenu -->
<?php $this->widget('application.extensions.menu.SMenu', array(
'menuID'=>'menu',
'delay'=>3,
'stylesheet'=>'menu_white.css',
'menu'=>array(
array('url'=>array('route'=>'site/index'),'label'=>'Home'),
array('url'=>array('route'=>'site/contact'),'label'=>'Contact'),
array('url'=>array(),'label'=>'Cadastros','visible'=>!Yii::app()->user->isGuest,
array('url'=>array('route'=>'cidade/admin'),'label'=>'Cidades'),
array('url'=>array('route'=>'cliente/admin'),'label'=>'Clientes'),
array('url'=>array('route'=>'servico/admin'),'label'=>'Serviços'),
array('url'=>array('route'=>'os/admin'),'label'=>'OS'),
array('url'=>array('route'=>'osobservacao/admin'),'label'=>'OS Observacções'),
array('url'=>array('route'=>'osservico/admin'),'label'=>'OS Serviços'),
),
array('url'=>array('route'=>'site/login'),'label'=>'Login','visible'=>Yii::app()->user->isGuest),
array('url'=>array('route'=>'site/logout'),'label'=>'Logout','visible'=>!Yii::app()->user->isGuest),
)
));
?>
Anexo III – Campos do Grid
<table class="dataGrid">
<thead>
<tr>
<th></th>
<th></th>
<th style="width:20px;"><?php echo $sort->link('CHAVE'); ?></th>
<th style="width:200px;"><?php echo $sort->link('NOME'); ?></th>
<th style="width:23px;"><?php echo $sort->link('UF'); ?></th>
</tr>
</thead>
<tbody>
<?php foreach($models as $n=>$model): ?>
<tr class="<?php echo $n%2?'even':'odd';?>">
<td>
<?php echo CHtml::imageButton('/www/servico/images/update.gif',array(
'submit'=>'index.php?r=cidade/update&id=' . $model->CHAVE,
'alt'=>'Update')); ?>
</td>
<td>
<?php echo CHtml::imageButton('/www/servico/images/delete.gif',array(
'submit'=>'',
'params'=>array('command'=>'delete','id'=>$model->CHAVE),
'confirm'=>"Excluir '{$model->CHAVE}' ?",
'alt'=>'Excluir')); ?>
</td>
<td><?php echo CHtml::link($model->CHAVE,array('show','id'=>$model->CHAVE)); ?></td>
<td><?php echo CHtml::encode($model->NOME); ?></td>
<td><?php echo CHtml::encode($model->UF); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>

Tutorial.yii

  • 1.
    Tutorial Yii Framework YiiFramework http://www.yiiframework.com O Guia Definitivo para o Yii http://www.yiiframework.com/doc/guide/pt/index Yii Class Reference http://www.yiiframework.com/doc/api/1.0.10 Yii Class Reference - CHtml - Componentes de Interface http://www.yiiframework.com/doc/api/CHtml Índice 1. Instalação........................................................................................................................................2 2. Geração da Estrutura da Aplicação ................................................................................................2 3. Banco de Dados..............................................................................................................................2 4. Geração do MVC............................................................................................................................2 5. Menu...............................................................................................................................................4 6. Extensões........................................................................................................................................4 7. Labels dos Campos.........................................................................................................................4 8. Campos do Grid..............................................................................................................................5 9. Campos Obrigatórios......................................................................................................................5 Anexo I – Estrutura da Aplicação..........................................................................................................7 Anexo II – Menu multi-nível.................................................................................................................8 Anexo III – Campos do Grid .................................................................................................................9
  • 2.
    1. Instalação Execute odownload do Yii Framework no link: http://www.yiiframework.com/download Copie o arquivo ZIP para o diretório “C:WWW”, descompacte e mude o nome do diretório para ”yii”. 2. Geração da Estrutura da Aplicação Entre no “Prompt de comando” e execute os comandos abaixo para criar a estrutura da aplicação: CD www MD servico CD servico php5php wwwyiiframeworkyiic webapp wwwservico Para testar digite a URL abaixo no browser: http://localhost/www/servico/index.php 3. Banco de Dados Crie um banco de dados chamado “servico” no MySQL com o SQL disponível no site. Altere o arquivo abaixo com a configuração do MySQL mostrada: wwwservicoprotectedconfigmain.php 'db'=>array( 'connectionString'=>'mysql:host=localhost;dbname=servico', 'username'=>'root', 'password'=>'mysql', ), 4. Geração do MVC Entre no “Prompt de comando” e execute os comandos abaixo para criar a estrutura da aplicação: php5php wwwyiiframeworkyiic shell model TABELA, para gerar o MODEL de uma tabela crud TABELA, para gerar o VIEW/CONTROLLER de uma tabela
  • 3.
    Abaixo é mostradaa saída dos comandos de geração: Yii Interactive Tool v1.0 (based on Yii v1.0.10) Please type 'help' for help. Type 'exit' to quit. >> model cidade generate cidade.php The following model classes are successfully generated: cidade If you have a 'db' database connection, you can test these models now with: $model=cidade::model()->find(); print_r($model); >> crud cidade generate CidadeController.php mkdir E:/php/servico/protected/views/cidade generate create.php generate update.php generate list.php generate show.php generate admin.php generate _form.php Crud 'cidade' has been successfully created. You may access it via: http://hostname/path/to/index.php?r=cidade >> As tabelas do banco de dados cujo código deve ser gerado são: cidade cliente os osobservacao osservico servico Para testar digite a URL abaixo no browser: http://localhost/www/servico/index.php?r=cidade
  • 4.
    5. Menu O arquivoabaixo contém a estrutura principal da tela, inclusive o menu, compartilhado por todas as VIEWs, e deve ser alterado conforme o código mostrado: wwwservicoprotectedviewslayoutsmain.php $this->widget('application.components.MainMenu',array( 'items'=>array( array('label'=>'Home', 'url'=>array('/site/index')), array('label'=>'Contact', 'url'=>array('/site/contact')), array('label'=>'Cidades', 'url'=>array('/cidade/admin')), array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest), array('label'=>'Logout', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest) ), )); 6. Extensões O menu padrão do Yii permite apenas 1 único nível de opções. Para resolver este problemas podemos instalar uma extensão que implementa um menu multi-nível. Basta executar o download do link abaixo, descompactar no diretório indicado e alterar o código do script anterior para o código mostrado no Anexo II: http://www.yiiframework.com/extension/menu wwwservicoprotectedextensionsmenu 7. Labels dos Campos As descrições dos campos do banco de dados são definidos no MODEL da tabela, através da função “attributeLabels”: wwwservicoprotectedmodelscidade.php public function attributeLabels() { return array( 'CHAVE' => 'Chave', 'NOME' => 'Nome da Cidade', 'UF' => 'UF', 'DATE_TIME' => 'Date Time', );
  • 5.
    8. Campos doGrid Os campos do grid exibido no VIEW de cada tabela estão no arquivo abaixo podendo ser alterado para exibir ícones ao invés de links bem como remover campos, como mostrado no Anexo III: wwwservicoprotectedviewscidadeadmin.php Além disso é necessário alterar a classe “dataGrid” do CSS como mostrado no código abaixo: wwwservicocssmain.css table.dataGrid { background: white; border-collapse: collapse; /* width: 100%; */ } O diretório abaixo vai receber as imagens GIF disponíveis no site: wwwservicothemesclassicimages O tema “classic” deve ser configurado no arquivo de configuração: wwwservicoprotectedviewslayoutsmain.php 'theme'=>'classic' 9. Campos Obrigatórios e Date_Time O Yii não gera campos para digitação da chave-primária nas telas de inclusão. Assim é necessário definir estes campos nas tabelas CIDADE e SERVICO, apenas para as inclusões. O campo DATE_TIME pode ser removido das telas. Além disso é necessário incluir o campo CHAVE na lista de campos a serem gravados e atribuir um valor ao campo DATE_TIME usado para gravar a data da última alteração no registro, como mostrado abaixo:
  • 6.
    wwwservicoprotectedviewscidade_form.php wwwservicoprotectedviewsservico_form.php <?php echo CHtml::errorSummary($model)?> <?php if(!$update) { echo '<div class="simple">'; echo CHtml::activeLabelEx($model,'CHAVE',array('label'=>'Chave')); echo CHtml::activeTextField($model,'CHAVE',array('size'=>10,'maxlength'=>10,$r eadonly=>'')); echo '</div>'; } ?> wwwexemployiiprotectedmodelsCidade.php public function safeAttributes() { return array( 'CHAVE', 'NOME', 'UF', 'DATE_TIME', ); } wwwexemployiiprotectedmodelsServico.php public function safeAttributes() { return array( 'CHAVE', 'DESCRICAO', 'PRECO', 'DATE_TIME', ); } wwwexemployiiprotectedmodels*.php protected function beforeSave() { $this->DATE_TIME = Date('y-m-d H:i:s.u'); return true; }
  • 7.
    Anexo I –Estrutura da Aplicação testdrive/ index.php Script de entrada da aplicação Web assets/ Contém arquivos de recurso publicados css/ Contém arquivos CSS images/ Contém arquivos de imagem themes/ Contém temas da aplicação protected/ Contém arquivos protegidos da aplicação yiic Script de linha de comando yiic yiic.bat Script de linha de comando yiic para o Windows commands/ Contém comandos 'yiic' customizados shell/ Contém comandos 'yiic shell' customizados components/ Contém componentes reutilizáveis do usuário MainMenu.php A classe widget 'MainMenu' (Menu Principal) Identity.php A classe 'Identity' usada nas autenticações views/ Contém arquivos de visão dos widgets mainMenu.php O arquivo de visão do widget 'MainMenu' config/ Contém arquivos de configurações console.php Configuração da aplicação console main.php Configuração da aplicação Web controllers/ Contém arquivos das classes de controle SiteController.php Classes de controle padrão extensions/ Contém extensões de terceiros messages/ Contém mensagens traduzidas models/ Contém arquivos das classes de modelo LoginForm.php Modelo do formulário para a ação 'login' ContactForm.php Modelo do formulário para a ação 'contact' runtime/ Contém arquivos gerados temporariamente views/ Contém arquivos de visão dos controles e layouts layouts/ Contém arquivos de visão do layout main.php O layout padrão para todas as visões site/ Contém arquivos de visão para o controle 'site' contact.php Visão para a ação 'contact' index.php Visão para a ação 'index' login.php Visão para a ação 'login' system/ Contém arquivos de visão do sistema
  • 8.
    Anexo II –Menu multi-nível <!--<div id="mainmenu"> <php $this->widget('application.components.MainMenu',array( 'items'=>array( array('label'=>'Home', 'url'=>array('/site/index')), array('label'=>'Contact', 'url'=>array('/site/contact')), array('label'=>'Cidades', 'url'=>array('/cidade/admin')), array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest), array('label'=>'Logout', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest) ), )); > </div>--><!-- mainmenu --> <?php $this->widget('application.extensions.menu.SMenu', array( 'menuID'=>'menu', 'delay'=>3, 'stylesheet'=>'menu_white.css', 'menu'=>array( array('url'=>array('route'=>'site/index'),'label'=>'Home'), array('url'=>array('route'=>'site/contact'),'label'=>'Contact'), array('url'=>array(),'label'=>'Cadastros','visible'=>!Yii::app()->user->isGuest, array('url'=>array('route'=>'cidade/admin'),'label'=>'Cidades'), array('url'=>array('route'=>'cliente/admin'),'label'=>'Clientes'), array('url'=>array('route'=>'servico/admin'),'label'=>'Serviços'), array('url'=>array('route'=>'os/admin'),'label'=>'OS'), array('url'=>array('route'=>'osobservacao/admin'),'label'=>'OS Observacções'), array('url'=>array('route'=>'osservico/admin'),'label'=>'OS Serviços'), ), array('url'=>array('route'=>'site/login'),'label'=>'Login','visible'=>Yii::app()->user->isGuest), array('url'=>array('route'=>'site/logout'),'label'=>'Logout','visible'=>!Yii::app()->user->isGuest), ) )); ?>
  • 9.
    Anexo III –Campos do Grid <table class="dataGrid"> <thead> <tr> <th></th> <th></th> <th style="width:20px;"><?php echo $sort->link('CHAVE'); ?></th> <th style="width:200px;"><?php echo $sort->link('NOME'); ?></th> <th style="width:23px;"><?php echo $sort->link('UF'); ?></th> </tr> </thead> <tbody> <?php foreach($models as $n=>$model): ?> <tr class="<?php echo $n%2?'even':'odd';?>"> <td> <?php echo CHtml::imageButton('/www/servico/images/update.gif',array( 'submit'=>'index.php?r=cidade/update&id=' . $model->CHAVE, 'alt'=>'Update')); ?> </td> <td> <?php echo CHtml::imageButton('/www/servico/images/delete.gif',array( 'submit'=>'', 'params'=>array('command'=>'delete','id'=>$model->CHAVE), 'confirm'=>"Excluir '{$model->CHAVE}' ?", 'alt'=>'Excluir')); ?> </td> <td><?php echo CHtml::link($model->CHAVE,array('show','id'=>$model->CHAVE)); ?></td> <td><?php echo CHtml::encode($model->NOME); ?></td> <td><?php echo CHtml::encode($model->UF); ?></td> </tr> <?php endforeach; ?> </tbody> </table>