diff --git a/docs/guide-pt-BR/structure-views.md b/docs/guide-pt-BR/structure-views.md index 34bf435..e92a419 100644 --- a/docs/guide-pt-BR/structure-views.md +++ b/docs/guide-pt-BR/structure-views.md @@ -1,26 +1,24 @@ -Views (Visões) +Visões (Views) =========== -As views (visões) fazem parte da arquitetura [MVC](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller). -São os responsáveis por apresentar dados aos usuários finais. Em um aplicação Web, -as views (visões) normalmente são criadas sobre o termo de *view templates* -(modelos de visão) que são arquivos PHP contendo principalmente códigos HTML e +As views fazem parte da arquitetura [MVC](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller). +São a parte do código responsável por apresentar dados aos usuários finais. Em um aplicação Web, +views geralmente são criadas em termos de *view templates* (modelos de view) + que são arquivos PHP contendo principalmente códigos HTML e códigos PHP de apresentação. -A gerência deles são realizadas pelo [componente da aplicação](structure-application-components.md) -[[yii\web\View|view]] na qual fornece métodos comumente utilizados para facilitar -a montagem e a renderização da view (visão). Para simplificar, chamaremos sempre -os arquivos view templates (modelos de visão) ou view template (modelo de visão) -apenas como views (visões). +Os modelos de view são gerenciados pelo [componente da aplicação](structure-application-components.md) +[[yii\web\View|view]] que fornece métodos comumente utilizados para facilitar +a montagem e a renderização da view em si. Para simplificar, geralmente chamamos os modelos de view ou seus arquivos simplesmente +de view. -## Criando Views (Visões) +## Criando Views + +Conforme já mencionado, uma view é simplesmente um arquivo PHP +composto por HTML ou códigos PHP. O código a seguir representa uma view que exibe um formulário +de login. Como você pode ver, o código PHP é utilizado para gerar +as partes de conteúdo dinâmicas, tais como o título da página e o formulário, enquanto o código HTML dispõe os itens na página de uma forma apresentável. -Como mencionado anteriormente, uma view (visão) é simplesmente um arquivo PHP -composto por HTML ou códigos PHP. A view (visão) a seguir, apresenta um formulário -de login. Como você pode observar, o código PHP geralmente é utilizado para gerar -conteúdo dinâmico, tais como o título da página e o formulário, enquanto o código -HTML é utilizado para deixar a página mais apresentável. - ```php title = 'Login'; ?>
Please fill out the following fields to login:
+Por favor, preencha os seguintes campos para entrar:
= $form->field($model, 'username') ?> = $form->field($model, 'password')->passwordInput() ?> - = Html::submitButton('Login') ?> + = Html::submitButton('Entrar') ?> ``` -Em uma view (visão), você pode acessar a variável `$this` que referencia o -[[yii\web\View|componente da view (visão)]] para gerenciar e renderizar a view -(visão) atual. +Em uma view, você pode acessar a variável `$this` que referencia o +[[yii\web\View|componente view]] responsável por gerenciar e renderizar a view + em questão. -Além da variável `$this`, podem existir outras variáveis predefinidas na view -(visão) como a variável `$model` do exemplo anterior. Estas variáveis representam -os dados que foram informados a view (visão) por meio dos -[controllers (controladores)](structure-controllers.md) ou de outros objetos que -desencadeiam a [renderização da view (visão)](#rendering-views). +Além de `$this`, pode haver outras variáveis predefinidas na view, tal como +`$model` no exemplo acima. Essas variáveis representam +os dados que foram enviados à view por meio dos +[controllers](structure-controllers.md) ou de outros objetos que +desencadeiam a [renderização da view ](#rendering-views). -> Dica: As variáveis predefinidas são listadas em um bloco de comentário no inicio - de uma view (visão), de modo que possam ser reconhecidas pelas IDEs. Além de ser - uma ótima maneira de documentar suas views (visões). +> Dica: As variáveis predefinidas são listadas em um bloco de comentário no inicio + de uma view para que possam ser reconhecidas pelas IDEs. Além de ser também + uma ótima maneira de documentar suas views. ### Segurança -Ao criar views (visões) que geram páginas HTML, é importante que você codifique -ou filtre dados obtidos pelos usuários antes que os apresente. Caso contrário, -sua aplicação poderá estar sujeita a sofrer um ataque +Ao criar views que geram páginas HTML, é importante que você codifique +e/ou filtre os dados que vêm de usuários antes de exibí-los. Caso contrário, +sua aplicação poderá estar sujeita a um ataque de [cross-site scripting](http://en.wikipedia.org/wiki/Cross-site_scripting). -Para exibir um texto simples, codifique-o antes chamando o método -[[yii\helpers\Html::encode()]]. Por exemplo, o código a seguir codifica o nome do -usuário antes que seja exibido: +Para exibir um texto simples, codifique-o antes por chamar o método +[[yii\helpers\Html::encode()]]. Por exemplo, o código a seguir codifica o nome do +usuário antes de exibí-lo: ```php ``` -Para exibir um conteúdo HTML, utilize o método [[yii\helpers\HtmlPurifier]] para -filtrar o conteúdo primeiro. Por exemplo, o código a seguir filtra o conteúdo que -foi postado antes que seja exibido: +Para exibir conteúdo HTML, use [[yii\helpers\HtmlPurifier]] para +filtrar o conteúdo primeiro. Por exemplo, o código a seguir filtra o conteúdo de `$post->text` antes de exibí-lo: ```php ``` -> Dica: Enquanto o HTMLPurifier faz um excelente trabalho ao montar uma saída - segura, ele não é rápido. Você pode considerar guardar o [cache](caching-overview.md) - do resultado filtrado caso sua aplicação necessite de o máximo de performance. +> Dica: Embora o HTMLPurifier faça um excelente trabalho em tornar a saída de dados + segura, ele não é rápido. Você deveria considerar guardar em [cache](caching-overview.md) + o resultado filtrado se sua aplicação precisa de alta performance. -### Organizando as Views (Visões) +### Organizando as Views -Assim como os [controllers (controladores)](structure-controllers.md) e os -[models (modelos)](structure-models.md), existem convenções para organizar as -views (visões). +Assim como para os [controllers](structure-controllers.md) e para os +[models](structure-models.md), existem convenções para organizar as +views. -* Para que as views (visões) sejam renderizadas por um controller (controlador), - elas devem ser colocadas sob o diretório `@app/views/IDdoController` por padrão, - onde o `IDdoController` refere-se ao [ID do controller](structure-controllers.md#routes). - Por exemplo, se a classe controller (controlador) for `PostController`, o diretório - será `@app/views/post`; se for `PostCommentController`, o diretório será - `@app/views/post-comment`. No caso do controller (controlador) pertencer a um - módulo, o diretório será `views/ControllerID` sob o [[yii\base\Module::basePath|diretório do módulo]]. -* Para as views (visões) que serão renderizadas por um [widget](structure-widgets.md), - devem ser colocadas sob o diretório `WidgetPath/views` por padrão, onde `WidgetPath` - é o diretório onde encontra-se o arquivo da classe widget. -* Para as views (visões) que serão renderizadas por outros objetos, é recomendado - que siga a convenção semelhante à dos widgets. +* Views renderizadas por um controller deveriam ser colocadas sob o diretório `@app/views/IDdoController` por padrão, onde `IDdoController` refere-se ao [ID do controller](structure-controllers.md#routes). + Por exemplo, se a classe do controller for `PostController`, o diretório + será `@app/views/post`; se for `PostCommentController`, o diretório será + `@app/views/post-comment`. Caso o controller pertença a um + módulo, o diretório seria `views/IDdoController` sob o [[yii\base\Module::basePath|diretório do módulo]]. +* Views renderizadas em um [widget](structure-widgets.md) deveriam ser + colocadas sob o diretório `WidgetPath/views` por padrão, onde `WidgetPath` + é o diretório o arquivo da classe do widget. +* Para views renderizadas por outros objetos, é recomendado + que você siga a convenção semelhante à dos widgets. -Você pode personalizar estes diretórios padrão das views (visões) sobrescrevendo -o método [[yii\base\ViewContextInterface::getViewPath()]] dos controllers -(controladores) ou dos widgets. +Você pode personalizar os diretórios padrões das views sobrescrevendo +o método [[yii\base\ViewContextInterface::getViewPath()]] dos controllers ou dos widgets. -## Renderizando Views (Visões) +## Renderizando Views -A renderização das views (visões) podem ser feitas nos -[controllers (controladores)](structure-controllers.md), nos -[widgets](structure-widgets.md) ou em qualquer lugar que chame os métodos de -renderização de views (visões), +Você pode renderizar views em +[controllers](structure-controllers.md), em [widgets](structure-widgets.md) ou em qualquer outro lugar chamando os métodos de renderização da view. Esses métodos compartilham uma assinatura similar, como a seguir: ``` /** - * @param string $view nome da view ou do caminho do arquivo, dependendo do método de renderização atual - * @param array $params os dados que serão passados para a view (visão) + * @param string $view nome da view ou caminho do arquivo, dependendo do método de renderização + * @param array $params os dados passados para a view * @return string resultado da renderização */ methodName($view, $params = []) ``` -### Renderização pelos Controllers (Controladores) +### Renderização em Controllers -Nos [controllers (controladores)](structure-controllers.md), você pode chamar os -seguintes métodos para renderizar as views (visões): +Nos [controllers](structure-controllers.md), você pode chamar os +seguintes métodos para renderizar as views: -* [[yii\base\Controller::render()|render()]]: resulta na renderização de uma - [view nomeada](#named-views) aplicada em um [layout](#layouts). -* [[yii\base\Controller::renderPartial()|renderPartial()]]: resulta na renderização - de uma [view nomeada](#named-views) sem que seja aplicada em qualquer layout. -* [[yii\web\Controller::renderAjax()|renderAjax()]]: resulta na renderização de - uma [view nomeada](#named-views) sem que seja aplicada em qualquer layout mas - inclui todos os JS/CSS e arquivos registrados. Este método é utilizado - frequentemente nas respostas de requisições Web Ajax. -* [[yii\base\Controller::renderFile()|renderFile()]]: renderiza uma view a partir - de um caminho de um arquivo ou por uma [alias](concept-aliases.md). -* [[yii\base\Controller::renderContent()|renderContent()]]: renderiza um conteúdo - estático que será incorporado no [layout](#layouts) selecionado. Este método +* [[yii\base\Controller::render()|render()]]: renderiza uma [view nomeada](#named-views) e aplica um [layout](#layouts) ao resultado da renderização. +* [[yii\base\Controller::renderPartial()|renderPartial()]]: renderiza + uma [view nomeada](#named-views) sem qualquer layout. +* [[yii\web\Controller::renderAjax()|renderAjax()]]: renderiza uma [view nomeada](#named-views) sem qualquer layout + e injeta todos os arquivos JS/CSS registrados. É geralmente utilizado + em respostas de requisições Web Ajax. +* [[yii\base\Controller::renderFile()|renderFile()]]: renderiza uma view a partir + de um caminho de arquivo ou a partir de um [alias](concept-aliases.md). +* [[yii\base\Controller::renderContent()|renderContent()]]: renderiza um conteúdo + estático que será incorporado no [layout](#layouts) selecionado. Este método está disponível desde a versão 2.0.1. Por exemplo, @@ -177,8 +167,8 @@ class PostController extends Controller throw new NotFoundHttpException; } - // renderiza uma view chamada de "view" e aplica um layout nele - return $this->render('view', [ + // renderiza uma view chamada "exibir" e aplica um layout a ela + return $this->render('exibir', [ 'model' => $model, ]); } @@ -186,15 +176,14 @@ class PostController extends Controller ``` -### Renderização pelos Widgets +### Renderização em Widgets -Nos [widgets](structure-widgets.md), você pode chamar os seguintes métodos do -widget para renderizar views (visões). +Nos [widgets](structure-widgets.md), você pode chamar os seguintes métodos do +widget para renderizar views: -* [[yii\base\Widget::render()|render()]]: resulta na renderização de uma - [view nomeada](#named-views). -* [[yii\base\Widget::renderFile()|renderFile()]]: renderiza uma view a partir de - um caminho de um arquivo ou por uma [alias](concept-aliases.md). +* [[yii\base\Widget::render()|render()]]: renderiza uma [view nomeada](#named-views). +* [[yii\base\Widget::renderFile()|renderFile()]]: renderiza uma view a partir de + um caminho de arquivo ou a partir de um [alias](concept-aliases.md). Por exemplo, @@ -210,8 +199,8 @@ class ListWidget extends Widget public function run() { - // renderiza uma view chamada "list" - return $this->render('list', [ + // renderiza uma view chamada "listar" + return $this->render('listar', [ 'items' => $this->items, ]); } @@ -219,137 +208,126 @@ class ListWidget extends Widget ``` -### Renderização pelas Views (Visões) +### Renderização em Views -Você pode renderizar uma view dentro de outra view chamando um dos seguintes -métodos fornecidos pelo [[yii\base\View|componente da view]]: +Você pode renderizar uma view dentro de outra chamando um dos seguintes +métodos fornecidos pelo [[yii\base\View|componente view]]: -* [[yii\base\View::render()|render()]]: resulta na renderização de uma - [view nomeada](#named-views). -* [[yii\web\View::renderAjax()|renderAjax()]]: resulta na renderização de uma - [view nomeada](#named-views) e inclui todos os JS/CSS e arquivos registrados. - Este método é utilizado frequentemente nas respostas de requisições Web Ajax. -* [[yii\base\View::renderFile()|renderFile()]]: renderiza uma view a partir de - um caminho de um arquivo ou por uma [alias](concept-aliases.md). +* [[yii\base\Controller::render()|render()]]: renderiza uma [view nomeada](#named-views). +* [[yii\web\Controller::renderAjax()|renderAjax()]]: renderiza uma [view nomeada](#named-views) sem qualquer layout + e injeta todos os arquivos JS/CSS registrados. É geralmente utilizado + em respostas de requisições Web Ajax. +* [[yii\base\Controller::renderFile()|renderFile()]]: renderiza uma view a partir + de um caminho de arquivo ou a partir de um [alias](concept-aliases.md). -Por exemplo, no código a seguir, uma view (visão) qualquer renderiza outro arquivo -de view (visão) chamado `_overview.php` onde ambas encontram-se no mesmo diretório. -Lembre-se que a `$this` da view (visão) refere-se ao componente da [[yii\base\View|view]]: +Por exemplo, no código a seguir, uma view qualquer renderiza outro arquivo +de view chamado `_visao-geral.php` que encontram-se em seu mesmo diretório. +Lembre-se que `$this` na view referencia o componente [[yii\base\View|view]]: ```php -= $this->render('_overview') ?> += $this->render('_visao-geral') ?> ``` -### Renderização por Outros Lugares +### Renderização em Outros Lugares -Em qualquer lugar, você pode acessar o componente de aplicação [[yii\base\View|view]] -pela expressão `Yii::$app->view` e chamar qualquer método mencionado anteriormente -para renderizar uma view (visão). Por exemplo, +Em qualquer lugar, você pode acessar o componente de aplicação [[yii\base\View|view]] +pela expressão `Yii::$app->view` e então chamar qualquer método mencionado anteriormente +para renderizar uma view. Por exemplo, ```php -// exibe o arquivo de view (visão) "@app/views/site/license.php" +// exibe a view "@app/views/site/license.php" echo \Yii::$app->view->renderFile('@app/views/site/license.php'); ``` -### Views (Visões) Nomeadas +### Views Nomeadas -Ao renderizar uma view (visão), você pode especificar a view usando um nome ou o -caminho do arquivo/alias. Na maioria dos casos, você usará a primeira maneira, -pois são mais concisos e flexíveis. Especificamente, chamaremos as views usando -nomes como *views (visões) nomeadas*. +Ao renderizar uma view, você pode especificá-la usando seu nome, ou o caminho do arquivo, ou um alias. Na maioria dos casos, +você usará a primeira maneira por ser mais concisa e flexível. Quando especificamos views por nome, chamamos essas views de *views nomeadas*. -Um nome da view (visão) resolve o caminho da view (visão) correspondente de +Um nome de view é convertido no caminho de arquivo da view correspondente de acordo com as seguintes regras: -* Um nome da view (visão) pode omitir a extensão do arquivo. Neste caso, o `.php` - será usado como extensão. Por exemplo, a view chamada `about` corresponderá ao - arquivo `about.php`. -* Se o nome da view (visão) iniciar com barras duplas `//`, o caminho correspondente - será `@app/views/ViewName`. Ou seja, a view (visão) será localizada sob o - [[yii\base\Application::viewPath|diretório das views da aplicação]]. Por exemplo, - `//site/about` corresponderá ao `@app/views/site/about.php`. -* Se o nome da view (visão) iniciar com barra `/`, o caminho do arquivo da view - será formado pelo nome da view (visão) com o [[yii\base\Module::viewPath|diretório da view]] - do [módulo](structure-modules.md) ativo. Se não existir um módulo ativo, o - `@app/views/ViewName` será usado. Por exemplo, o `/user/create` corresponderá - ao `@app/modules/user/views/user/create.php`, caso o módulo ativo seja `user`. - Se não existir um módulo ativo, o caminho do arquivo da view (visão) será - `@app/views/user/create.php`. -* Se a view (visão) for renderizada com um [[yii\base\View::context|contexto]] e - que o mesmo implemente [[yii\base\ViewContextInterface]], o caminho do arquivo - da view será formado pelo nome da view (visão) com o - [[yii\base\ViewContextInterface::getViewPath()|diretório da view]] do contexto. - Isto se aplica principalmente para as views (visões) renderizadas pelos controllers - (controladores) e widgets. Por exemplo, `about` corresponderá ao - `@app/views/site/about.php` caso o contexto seja o controller (controlador) +* Um nome de view pode omitir a extensão do arquivo. Neste caso, o `.php` + será usado como extensão. Por exemplo, a view chamada `sobre` corresponderá ao + arquivo `sobre.php`. +* Se o nome da view iniciar com barras duplas `//`, o caminho correspondente + seria `@app/views/ViewName`. Ou seja, a view será localizada sob o + [[yii\base\Application::viewPath|diretório das views da aplicação]]. Por exemplo, + `//site/sobre` corresponderá ao `@app/views/site/sobre.php`. +* Se o nome da view iniciar com uma barra simples `/`, o caminho do arquivo da view + será formado pelo nome da view com o [[yii\base\Module::viewPath|diretório da view]] + do [módulo](structure-modules.md) ativo. Se não houver um módulo ativo, o + `@app/views/ViewName` será usado. Por exemplo, `/usuario/criar` corresponderá + a `@app/modules/user/views/usuario/criar.php` caso o módulo ativo seja `user`. + Se não existir um módulo ativo, o caminho do arquivo da view será + `@app/views/usuario/criar.php`. +* Se a view for renderizada com um [[yii\base\View::context|contexto]] e + que implemente [[yii\base\ViewContextInterface]], o caminho do arquivo + da view será formado por prefixar o [[yii\base\ViewContextInterface::getViewPath()|diretório da view]] do contexto ao nome da view. + Isto se aplica principalmente às views renderizadas em controllers e widgets. Por exemplo, + `sobre` corresponderá a `@app/views/site/sobre.php` caso o contexto seja o controller `SiteController`. -* Se uma view (visão) for renderizada por outra view (visão), o diretório desta - outra view (visão) será usado para formar o caminho do arquivo da view atual. - Por exemplo, `item` corresponderá ao `@app/views/post/item.php` se ela for - renderizada pela view `@app/views/post/index.php`. +* Se uma view for renderizada dentro de outra, o diretório que contém esta + outra view será usado para formar o caminho de seu arquivo. + Por exemplo, `item` corresponderá a `@app/views/post/item.php` se ela for + renderizada dentro da view `@app/views/post/index.php`. -De acordo com as regras acima, ao chamar `$this->render('view')` em um controller -(controlador) `app\controllers\PostController` será renderizado o arquivo de view -(visão) `@app/views/post/view.php` e, ao chamar `$this->render('_overview')` nesta -view, será renderizado o arquivo de visão `@app/views/post/_overview.php`. +De acordo com as regras acima, chamar `$this->render('exibir')` em um controller `app\controllers\PostController` vai realmente renderizar o arquivo de view + `@app/views/post/exibir.php` e, chamar `$this->render('_visaogeral')` nessa view (`exibir.php`) vai renderizar o arquivo de visão `@app/views/post/_visaogeral.php`. -### Acessando Dados em Views (Visões) +### Acessando Dados em Views -Existem duas abordagens para acessar dados em um view (visão): *push* e *pull*. +Existem duas abordagens para acessar dados em uma view : *push* e *pull*. -Ao passar os dados como o segundo parâmetro nos métodos de renderização de view -(visão), você estará usando a abordagem *push*. -Os dados devem ser representados por um array com pares de nome-valor. Quando a -view (visão) estiver sendo renderizada, a função `extract()` do PHP será chamado -passando este array a fim de extraí-los em variáveis na view (visão). -Por exemplo, o código do controller (controlador) a seguir fornecerá (pela -abordagem *push*) duas variáveis para a view (visão) `report`: `$foo = 1` e `$bar = 2`. +Ao passar os dados como o segundo parâmetro nos métodos de renderização de view, você estará usando a abordagem *push*. +Os dados devem ser representados por um array com pares de nome-valor. Quando a +view estiver sendo renderizada, a função `extract()` do PHP será executada sobre essa array a fim de extrair seus dados em variáveis na view. +Por exemplo, o renderização da view a seguir, em um controller, disponibilizará (pela +abordagem *push*) duas variáveis para a view `relatorio`: `$foo = 1` e `$bar = 2`. ```php -echo $this->render('report', [ +echo $this->render('relatorio', [ 'foo' => 1, 'bar' => 2, ]); ``` -Na abordagem *pull*, os dados serão recuperados ativamente pelo -[[yii\base\View|componente da view]] ou por outros objetos que acessam as views -(por exemplo, `Yii::$app`). Usando o código do exemplo a seguir, você poderá -acessar o objeto do controller (controlador) pela expressão `$this->context` -dentro da view. E como resultado, será possível acessar qualquer propriedade ou -métodos do controller (controlador) na view (visão) `report`, como o ID do -controller conforme o exemplo a seguir: +A abordagem *pull* ativamente obtém os dados do +[[yii\base\View|componente view]] ou de outros objetos acessíveis nas views +(por exemplo, `Yii::$app`). Usando o código a seguir como exemplo, dentro da view você pode acessar seu objeto controller usando a expressão `$this->context`. +E como resultado, será possível acessar quaisquer propriedades ou +métodos do controller, como o seu ID, na view `relatorio`: ```php -The controller ID is: = $this->context->id ?> +O ID do controller é: = $this->context->id ?> ?> ``` -A abordagem *push* normalmente é a forma preferida de acessar dados nas views -(visões), pelo fato de criar menos dependências nos objetos de contexto. A -desvantagem é que você precisará montar manualmente os dados em um array o tempo -todo, o que poderia tornar-se tedioso e propenso a erros se uma view for +A abordagem *push* normalmente é a forma preferida de acessar dados nas views +por que as torna menos dependentes de objetos de contexto. A +desvantagem é que você precisa montar manualmente os dados em um array o tempo +todo, o que poderia se tornar tedioso e propenso a erros se uma view for compartilhada e renderizada em lugares diferentes. -### Compartilhando Dados entre as Views (Visões) +### Compartilhando Dados entre as Views -O [[yii\base\View|componente da view]] fornece a propriedade -[[yii\base\View::params|params]] que você pode usar para compartilhar dados entre -as views (visões). +O [[yii\base\View|componente view]] fornece a propriedade +[[yii\base\View::params|params]] que você pode usar para compartilhar dados entre +as views. -Por exemplo, em uma view `about`, você pode ter o seguinte código para especificar -o seguimento atual do rastro da aplicação (breadcrumbs). +Por exemplo, em uma view `sobre`, você pode ter o seguinte código que especifica +o seguimento atual do "rastro de navegação" (breadcrumbs): ```php -$this->params['breadcrumbs'][] = 'About Us'; +$this->params['breadcrumbs'][] = 'Sobre nós'; ``` -Em seguida, no arquivo do [layout](#layouts), que também é uma view, você pode -exibir o rastro da aplicação (breadcrumbs) usando os dados passados pela +Em seguida, no arquivo [layout](#layouts), que também é uma view, você pode +exibir o "rastro de navegação" (breadcrumbs) usando os dados passados pela propriedade [[yii\base\View::params|params]]: ```php @@ -361,27 +339,27 @@ propriedade [[yii\base\View::params|params]]: ## Layouts -Os layouts são um tipo especial de views (visões) que representam as partes comuns -das views (visões). Por exemplo, a maioria das páginas de aplicações Web -compartilham o mesmo cabeçalho e rodapé. Embora você possa repetir o mesmo -cabeçalho e rodapé em todas as view, a melhor maneira é fazer isso apenas uma vez -no layout e incorporar o resultado da renderização de uma view em um lugar +Layouts são um tipo especial de view que representam as partes comuns +de múltiplas views. Por exemplo, as páginas da maioria das aplicações Web +compartilham o mesmo cabeçalho e rodapé. Embora você possa repetir o mesmo +cabeçalho e rodapé em todas as view, a melhor maneira é fazer isso apenas uma vez +no layout e incorporar o resultado da renderização de uma view em um lugar apropriado no layout. ### Criando Layouts -Pelo fato dos layouts também serem views (visões), eles podem ser criados de -forma semelhante as views (visões) normais. Por padrão, os layouts são guardados -no diretório `@app/views/layouts`. Para os layouts usados nos -[módulos](structure-modules.md), devem ser guardados no diretório `views/layouts` +Visto que os layouts também são views, eles podem ser criados de +forma semelhante às views normais. Por padrão, layouts são salvos +no diretório `@app/views/layouts`. Layouts usados em um +[módulo](structure-modules.md) devem ser salvos no diretório `views/layouts` sob o [[yii\base\Module::basePath|diretório do módulo]]. -Você pode personalizar o diretório do layout padrão configurando a propriedade +Você pode personalizar o diretório padrão de layouts configurando a propriedade [[yii\base\Module::layoutPath]] da aplicação ou do módulo. -O exemplo a seguir mostra como é o layout. Observe que, para fins ilustrativos, -simplificamos o código do layout. Em prática, você pode adicionar mais conteúdo, -como tags de cabeçalho, menu principal, etc. +O exemplo a seguir mostra como é um layout. Observe que, para fins ilustrativos, +simplificamos bastante o código do layout. Na prática, você pode querer adicionar mais conteúdos a ele, tais +como tags no head, menu principal, etc. ```php beginBody() ?> -