Você está na página 1de 9

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

\php5\php \www\yii\framework\yiic webapp \www\servico

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:

\www\servico\protected\config\main.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:

\php5\php \www\yii\framework\yiic 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:

\www\servico\protected\views\layouts\main.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

\www\servico\protected\extensions\menu

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”:

\www\servico\protected\models\cidade.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:

\www\servico\protected\views\cidade\admin.php

Além disso é necessário alterar a classe “dataGrid” do CSS como mostrado no código abaixo:

\www\servico\css\main.css

table.dataGrid
{
background: white;
border-collapse: collapse;
/* width: 100%; */
}

O diretório abaixo vai receber as imagens GIF disponíveis no site:

\www\servico\themes\classic\images

O tema “classic” deve ser configurado no arquivo de configuração:

\www\servico\protected\views\layouts\main.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:
\www\servico\protected\views\cidade\_form.php
\www\servico\protected\views\servico\_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>';
}
?>

\www\exemployii\protected\models\Cidade.php

public function safeAttributes()


{
return array(
'CHAVE', 'NOME', 'UF', 'DATE_TIME',
);
}

\www\exemployii\protected\models\Servico.php

public function safeAttributes()


{
return array(
'CHAVE', 'DESCRICAO', 'PRECO', 'DATE_TIME',
);
}

\www\exemployii\protected\models\*.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>

Você também pode gostar