Views

Não é nada usual retornar uma simples string após receber uma requisição e por isso deve-se utilizar as views agregadas às rotas e controllers para tornar a resposta mais útil.

As views podem ser desenvolvidas em /resources/views e devem ser criadas em .html. É possível também receber variáveis que serão alteradas no conteúdo final:

namespace App\Controllers\Pages;

use \App\Utils\View;

class Product {
    public static function getProduct($req, $res) {
        $content = View::render('pages/product', [
            'name' => "Produto nome",
            'description' => "Produto descrição"
        ]);
        return $res->send(200, $content);
    }
}

Arquivo /resources/view/pages/product.html:

<h1>{{name}}</h1>
<p>{{description}}</p>

<!-- <h1>Produto nome</h1> -->
<!-- <p>Produto descrição</p> -->

Padronizando páginas

É possível utilizar a classe já criada Page para popular páginas com conteúdos padrões como o header, navbar e footer:

namespace App\Controllers\Pages;

use \App\Utils\View;

class Product extends Page {
    public static function getProduct($req, $res) {
        $content = View::render('pages/product', [
            'name' => "Produto nome",
            'description' => "Produto descrição"
        ]);
        $content = parent::getPage("Produto Título", $content);
        
        return $res->send(200, $content);
    }
}

Com uso da classe Page o $content irá conter a junção dos arquivos page.html, header.html e footer.html (já existentes em /resources/view/pages).

É possíve também adicionar novos arquivos padrões para cabeçalho e rodapé, podendo por exemplo criar diferentes cabeçalhos para a área pública e área administrativa:

$content = parent::getPage("Produto Título", $content, [
    'header' => 'header-admin',
    'footer' => 'footer-admin'
]);

Caso deseje que o header e footer não sejam inseridos, defina-os como false.

Os arquivos devem ser criados em resources/views/pages para que sejam identificados na função getPage().

Variáveis padrões

O arquivo define.php define algumas variáveis padrões para uso nas views:

View::define([
    'URL'     => URL,
    'PUBLIC'  => URL . '/public'
]);

Adicione as variáveis padrões para utiliza-las em toda criação de view.

As variáveis padrões facilitam na inserção de dados importantes para usabilidade, por exemplo:

{{URL}} <!-- URL base do projeto -->
{{PUBLIC}} <!-- URL dos arquivos públicos -->

A inserção de uma mídia ou link pode ser feito da seguinte maneira:

<img src="{{PUBLIC}}/assets/img/php-logo.png" />

<a href="{{URL}}"><button>Início</button></a>
<a href="{{URL}}/products"><button>Produtos</button></a>

Last updated