Don't you speak portuguese? Translate this site with Google Translator

Pensamento do Dia

Não somos amados por sermos bons. Somos bons porque somos amados. (Desmond Tutu)

9 - Detalhes sobre Views

9 – Detalhes sobre Views

Eu gosto do impossível porque lá a concorrência é menor.

Walt Disney

As Views representam o V de MVC. Elas são responsáveis por gerar a saída específica para a requisição do usuário. Geralmente a saída é em HTML, mas também pode ser em XML, JSON, PDF e outras.

O CakePHP conta com uma grande quantidade de classes embutidas para manipulação o mais comum dos cenários a renderizar:

- Para criar webservers XML ou JSON que podemos usar nas views

- Para servir arquivos protegidos, ou arquivos gerados dinamicamente

- Para criar múltiplas views com templates

A AppView

A classe AppView é a classe View default. Em si ela estende a classe View e é definida em src\View\AppView.php assim:

<?php
namespace App\View;

use Cake\View\View;

class AppView extends View
{
}

Podemos usar AppView para carregar Helper (no método initialize()), mas geralmente os helpers criados e adicionados a src\View\Helper já ficam automaticamente disponíveis para as views dos templates.

 

Views Template

A camada de views do CakePHP é a forma de nos comunicarmos com o usuário da aplicação.

A extensão default das views é .ctp (CakePHP Template) e utiliza uma sintaxe alternativa em PHP para estruturas de controle e saída. Estes arquivos contem a lógica necessária para preparar os dados recebidos do controller no formato de apresentação que está pronto para a nossa audiência.

O CakePHP espera que os nossos templates sigam a convenção de nomenclatura onde o nome do template é a versão minúscula e grifada do nome do respectivo action do controller.

 

Partes de uma View

A camada View no CakePHP pode ser formada por algumas partes. Cada parte tem diferentes usos e será coberta neste tutorial:

- templates: Templates são a parte da página que é única para o action começar a rodar;

Elas são a parte principal da resposta do aplicativo. Arquivos de template do CakePHP são armazenados em src/Template dentro de uma pasta com o nome do controller correspondente e com extensão .ctp.

https://book.cakephp.org/3.0/en/views.html#view-templates

- elements: pequenos, reusáveis pedaços de código da view. Elements geralmente são renderizados dentro da view. Documentação oficial:

http://book.cakephp.org/3.0/en/views.html#elements

- layouts: são arquivos de templates que contém código de apresentação que envolve muitas interfaces na sua aplicação. Muitas views são renderizadas dentro de um layout. Os layouts incorporam templates: index, add, edit, login, etc.

Um layout é um conjunto de códigos encontrado ao redor das views. Múltiplos layouts podem ser definidos, e você pode alterar entre eles, mas agora, vamos usar o default, localziado em src/Template/Layout/default.ctp.

http://book.cakephp.org/3.0/en/views.html#layouts

- helpers: estas classes encapsulam lógica de views que são necessárias em muitos lugares na camada view. Entre outras coisas os helpers no CakePHP podem ajudar você a construir forms, criar funcionalidade AJAX, paginar modelo de dados, etc.

http://book.cakephp.org/3.0/en/views/helpers.html

- cells: estas classes oferecem uma miniatura tipo as características dos controllers para a criação de componentes UI auto contidos. Veja a documentação para mais informações:

http://book.cakephp.org/3.0/en/views/cells.html

 

Dicas sobre Views

Título do Aplicativo

- Adicionar ao AppController.php:

 

function beforeFilter(Event $event){

$this->set('title_for_layout','Controle de Finanças Pessoais');

}

 

- Será usado no Layout/default.ctp, aqui assim:

 

<title>

<?= $cakeDescription ?>:

<?php echo $title_for_layout;?>

</title>

E no body

<li class="name">

<h1><a href="/portal/"><?php echo $title_for_layout;?></a></h1>

</li>

 

Isso mostrará no title do navegador a variável $title_for_layout definida no AppController e também no body, no h1.

 

Trocando campo do tipo text por select:

$options = array(''=>'Selecione','colegioelias' => 'Colégio do Elias', 'eliasmesada'=>'Elias Mesada','eliasmerenda'=>'Elias Merenda','meire' => 'Meire Salário', 'coelce'=>'COELCE', 'condominio'=>'Condomínio Ferreira', 'gvt'=>'GVT', 'carnes'=>'Carnes','mercantil'=>'Mercantil','almoco'=>'Almoço Trabalho','passagens'=>'Passagens','remedio'=>'Remédio');

 

Usando o $options:

echo $this->Form->input('descricao', array('type'=>'select','label' => 'Descrição da Despesa','options' => $options,'default'=>'0'));

 

Algumas views típicas:

<!-- File: src/Template/Articles/add.ctp -->

<h1>Add Article</h1>
<?php
    echo $this->Form->create($article);
    echo $this->Form->control('title');
    echo $this->Form->control('body', ['rows' => '3']);
    echo $this->Form->button(__('Save Article'));
    echo $this->Form->end();
?>

<!-- File: src/Template/Articles/edit.ctp -->

<h1>Edit Article</h1>
<?php
    echo $this->Form->create($article);
    echo $this->Form->control('title');
    echo $this->Form->control('body', ['rows' => '3']);
    echo $this->Form->button(__('Save Article'));
    echo $this->Form->end();
?>

<!-- File: src/Template/Articles/view.ctp -->

<h1><?= h($article->title) ?></h1>
<p><?= h($article->body) ?></p>
<p><small>Created: <?= $article->created->format(DATE_RFC850) ?></small></p>


<!-- File: src/Template/Articles/index.ctp  (edit links added) -->

<!-- File: src/Template/Articles/index.ctp (delete links added) -->

<h1>Blog articles</h1>
<p><?= $this->Html->link('Add Article', ['action' => 'add']) ?></p>
<table>
    <tr>
        <th>Id</th>
        <th>Title</th>
        <th>Created</th>
        <th>Actions</th>
    </tr>

<!-- Here's where we loop through our $articles query object, printing out article info -->

    <?php foreach ($articles as $article): ?>
    <tr>
        <td><?= $article->id ?></td>
        <td>
            <?= $this->Html->link($article->title, ['action' => 'view', $article->id]) ?>
        </td>
        <td>
            <?= $article->created->format(DATE_RFC850) ?>
        </td>
        <td>
            <?= $this->Form->postLink(
                'Delete',
                ['action' => 'delete', $article->id],
                ['confirm' => 'Are you sure?'])
            ?>
            <?= $this->Html->link('Edit', ['action' => 'edit', $article->id]) ?>
        </td>
    </tr>
    <?php endforeach; ?>

</table>

<!-- File: src/Template/Users/login.ctp -->
<div class="users form">
<?= $this->Flash->render() ?>
<?= $this->Form->create() ?>
    <fieldset>
        <legend><?= __('Please enter your username and password') ?></legend>
        <?= $this->Form->control('username') ?>
        <?= $this->Form->control('password') ?>
    </fieldset>
<?= $this->Form->button(__('Login')); ?>
<?= $this->Form->end() ?>
</div>

Detalhes em

http://book.cakephp.org/3.0/en/views.html

 

Comments fornecido por CComment

Novo Testamento

E o sacerdote de Júpiter, cujo templo estava em frente da cidade, trazendo para a entrada da porta touros e grinaldas, queria com a multidão sacrificar-lhes.
(At, 14:13)

Rotas no Mapa do Google

© 2015 Ribamar FS. All Rights Reserved. Designed By JoomShaper