Visão
====

Uma visão é um script em PHP contendo, principalmente, elementos da 
interface com usuário. Ela pode ter comandos em PHP, mas é recomendado 
que tais comandos não alterem dados em modelos e sejam simples. De acordo 
com a idéia da separar a lógica da programação, lógicas complexas devem 
ser colocadas no controle ou no modelo em vez da visão.

Uma visão tem um nome que é utilizado para identificar seu arquivo de script 
no momento da renderização. O nome da visão é o mesmo de seu arquivo. 
Por exemplo, a visão `edit` refere-se ao arquivo denominado `edit.php`. 
Para renderizar uma visão, execute [CController::render()] informando o
nome da visão. O método irá procurar pelo arquivo correspondente no diretório 
`protected/views/ControllerID`.

Dentro do arquivo da visão, podemos acessar a instância do controle a partir 
da variável `$this`. Dessa forma, podemos `acessar` qualquer propriedade do controle 
utilizando `$this->nomeDaPropriedade` dentro da visão.

Podemos também `inserir` dados na visão da seguinte maneira:

~~~
[php]
$this->render('edit', array(
	'var1'=>$value1,
	'var2'=>$value2,
));
~~~

No código acima, o método [render()|CController::render] irá extrair os 
valores do vetor, passado no segundo parâmetro, para variáveis. Como resultado, 
dentro do script da visão poderemos acessar as variáveis locais `$var1` e `$var2`.

Layout
------

O Layout é uma visão especial, utilizada para decorar outras visões. Normalmente 
ele contém partes da interface que são comuns entre diversas visões. 
Por exemplo, um layout pode conter um cabeçalho e um rodapé e inserir o conteúdo 
de uma visão entre eles:

~~~
[php]
......cabeçalho aqui......
<?php echo $content; ?>
......rodapé aqui......
~~~

No trecho acima `$content` contém o conteúdo renderizado da visão.

O Layout é implicitamente aplicado ao executar o método [render()|CController::render]. 
Por padrão, a visão localizada em `protected/views/layouts/main.php` 
é utilizada como layout. No entanto, isso pode ser personalizado modificando a 
propriedade [CWebApplication::layout] ou [CController::layout]. Para renderizar 
uma visão sem aplicar um layout, utilize o método [renderPartial()|CController::renderPartial].

Widget
------

Um widget é uma instância da classe [CWidget], ou de suas classes derivadas. É um 
componente utilizado principalmente para apresentação. Widgets normalmente são 
utilizados dentro do código de uma visão para gerar elementos complexos, 
porém independentes. Por exemplo, um widget pode ser utilizado para renderizar 
um complexo calendário. Widgets adicionam melhor reutilização 
na interface com o usuário.

Para utilizar um widget, faça o seguinte na sua visão:

~~~
[php]
<?php $this->beginWidget('path.to.WidgetClass'); ?>
...conteúdo que deve aparecer no corpo do widget...
<?php $this->endWidget(); ?>
~~~

ou

~~~
[php]
<?php $this->widget('path.to.WidgetClass'); ?>
~~~

A última forma apresentada é utilizada quando o widget não necessita de conteúdo.

Os Widgets podem ter seus comportamentos personalizados. Para isso, configure 
os valores iniciais de suas propriedades ao executar [CBaseController::beginWidget] ou
[CBaseController::widget]. Por exemplo, quando utilizamos o widget [CMaskedTextField], 
podemos especificar a máscara que será utilizada. Para isso, passamos para o método 
um vetor onde as chaves são os nomes das propriedades e os valores são os valores 
iniciais desejados, como no trecho de código a seguir:

~~~
[php]
<?php
$this->widget('CMaskedTextField',array(
	'mask'=>'99/99/9999'
));
?>
~~~

Para definir um novo widget, extenda a classe [CWidget] e sobrescreva os 
métodos [init()|CWidget::init] e [run()|CWidget::run].

~~~
[php]
class MyWidget extends CWidget
{
	public function init()
	{
		// esse método é chamado por CController::beginWidget()
	}

	public function run()
	{
		// esse método é chamado por CController::endWidget()
	}
}
~~~

Assim como um controle, um widget também pode ter uma visão. Por padrão, 
os arquivos de visão de um widget estão localizados no diretório `views`, dentro 
do diretório onde está localizado o arquivo de classe do widget. Essas visões 
podem ser renderizadas executando-se o método [CWidget::render()], assim como 
o método de mesmo nome existente no controle. A única diferença entre eles é 
que nenhum layout será aplicado a visão do widget. Além disso, nessa view, `$this`
refere-se a instância do widget em vez da instância do controller.

Visão do Sistema (System View)
------------------------------

Visões do sistema são as visões utilizadas pelo Yii para exibir informações 
sobre erros e logs. Por exemplo, quando um usuário requisita uma ação ou 
controle não existente, o Yii irá lançar uma exceção explicando o erro ocorrido. 
Esse erro é exibido utilizando uma visão do sistema.

A nomeclatura das visões do sistema seguem algumas regras. Nomes no formato 
`errorXXX` referem-se à visões utilizadas para exibir erros gerados com a exceção 
[CHttpException], onde `XXX` é o código do erro. Por exemplo, se uma [CHttpException] 
é gerada com o código de erro 404, a visão `error404` será exibida.

O Yii framework já possui um conjunto padrão de visões do sistema, localizadas em 
`framework/views`. Elas podem ser personalizadas criando-se visões com o mesmo nome 
que as originais em `protected/views/system`.

<div class="revision">$Id: basics.view.txt 2367 2010-08-29 17:29:22Z qiang.xue $</div>
