Como você já sabe, o Catalyst é um framework livre para o desenvolvimento de aplicações web escritas em Perl, que segue à risca o padrão MVC e suporta um grande número de padrões de desenvolvimento web experimentais.
Ele é inspirado por outros frameworks web como Ruby on Rails e Maypole. É primariamente distribuído através do CPAN, que é o repositório oficial para distribuição de bibliotecas e aplicações escritas em Perl.
No artigo anterior, vimos como instalar e imprimir o “Seja Bem Vindo”. Dando sequência ao aprendizado, veremos hoje como usar a View Catalyst::View::TT, que nada mais é que o Template Toolkit.
Entre no seu terminal e digite:
cd MyApp<br> script/myapp_create.pl view TT TT
Vai haver um retorno parecido com esse:
exists "/home/user/sites/MyApp/script/../lib/MyApp/View"<br> exists "/home/user/sites/MyApp/script/../t"<br> created "/home/user/sites/MyApp/script/../lib/MyApp/View/TT.pm"<br> created "/home/user/sites/MyApp/script/../t/view_TT.t"
Na primeira parte deste artigo, criamos o controller Welcome, agora vamos criar um controller chamado “Exemplo”. Para isso, digite no seu terminal:
script/myapp_create.pl controller Exemplo
Vai haver um retorno parecido com esse:
exists "/home/user/sites/MyApp/script/../lib/MyApp/Controller"<br> exists "/home/user/sites/MyApp/script/../t"<br> created "/home/user/sites/MyApp/script/../lib/MyApp/Controller/Exemplo.pm"<br> created "/home/user/sites/MyApp/script/../t/controller_Exemplo.t"
Antes de começar a explicar o funcionamento: por padrão o módulo Catalyst::View::TT usa a extensão tt para os templates, mas algumas pessoas gostam de salvar os templates com a extensão htm ou html.
Para mudar a extensão, vá ao diretório view da sua aplicação e abra o arquivo TT.pm, você verá um código parecido com este:
package MyApp::View::TT;<br> use strict;<br> use warnings;<br> use base 'Catalyst::View::TT';<br> __PACKAGE__->config(<br> TEMPLATE_EXTENSION => '.tt', <br> render_die => 1,<br> );
Para alterar a extensão, mude o valor do parâmetro TEMPLATE_EXTENSION, exemplo: EMPLATE_EXTENSION => ‘.html’.
Abra o controller Exemplo. Você verá um código parecido com este:
sub index :Path :Args(0) {<br> my ( $self, $c ) = @_;<br> $c->response->body('Matched MyApp::Controller::Exemplo in Exemplo.'); }
Altere o código para este abaixo:
sub index :Path :Args(0) {<br> my ( $self, $c ) = @_;<br> # array cores<br> my @cores = qw/Azul Vermelho Verde Amarelo Preto Cinza/;<br> # hash numeros<br> my %numeros = (<br> um => 1,<br> dois => 2,<br> tres => 3,<br> quatro => 4,<br> cinco => 5<br> );<br> # enviar escalar nome para o template<br> $c->stash->{nome} = 'Lucas';<br> # enviar array cores para o template<br> $c->stash->{cores} = \@cores;<br> # enviar hash numeros para o template<br> $c->stash->{numeros} = \%numeros;<br> # nome do arquivo, se mudou a extensão altere, ex: 'index.htm'<br> $c->stash->{template} = 'index.tt';<br> # formato da view<br> $c->forward('View::TT');<br> }
Agora vamos criar o arquivo index.tt. Se alterou a extensão, você pode criar com a extensão à sua escolha.
Crie esse arquivo no diretório root de sua aplicação. Depois de criar o arquivo index, digite no terminal:
script/myapp_server.pl
Isso irá executar o server de teste do Catalyst, para acessar: http://localhost:3000/exemplo
Agora abra o arquivo index, coloque os comandos abaixo e faça seus testes:
Imprimir a escalar nome
<h2>[% nome %]</h2>
Comparar a escalar nome com IF
IF ‘nome’ é igual a ‘Lucas’
[% IF nome == 'Lucas' %]<br> <h2>Verdadeiro/h2><br> [% END %]
IF ‘nome’ é diferente a ‘Lucas’
[% IF nome != 'Lucas' %]<br> <h2>Verdadeiro/h2><br> [% END %]
Comparar a escalar nome com IF e ELSE
IF ‘nome’ é igual a ‘Lucas’
[% IF nome == 'Lucas' %]<br> <h2>Verdadeiro/h2><br> [% ELSE %]<br> <h2>Falso/h2><br> [% END %]
IF ‘nome’ é diferente a ‘Lucas’
[% IF nome != 'Lucas' %]<br> <h2>Verdadeiro/h2><br> [% ELSE %]<br> <h2>Falso/h2><br> [% END %]
Comparar a escalar nome com IF, ELSIF e ELSE
ELSIF ‘nome’ é igual a ‘Lucas’
[% IF nome == 'Tiago' %]<br> <h2>Verdadeiro IF/h2><br> [% ELSIF nome == 'Lucas' %]<br> <h2>Verdadeiro ELSIF</h2><br> [% ELSE %]<br> <h2>Falso/h2><br> [% END %]
ELSIF ‘nome’ é diferente a ‘Lucas’
[% IF nome == 'Tiago' %]<br> <h2>Verdadeiro IF/h2><br> [% ELSIF nome != 'Lucas' %]<br> <h2>Verdadeiro ELSIF</h2><br> [% ELSE %]<br> <h2>Falso/h2><br> [% END %]
Até aqui trabalhamos com escalar, agora, vamos trabalhar com array, que é uma lista de escalares e um hash que é um dicionário de escalares.
Imprimir escalares da array cores
[% FOREACH row IN cores %]<br> <h2>[% row %]</h2><br> [% END %]
Imprimir índices da hash números
[% FOREACH row IN numeros %]<br> <h2>[% row.key %]</h2><br> [% END %]
ou
[% FOREACH row IN numeros.keys %]<br> <h2>[% row %]</h2><br> [% END %]
Imprimir valores da hash números
[% FOREACH row IN numeros %]<br> <h2>[% row.value %]</h2><br> [% END %]
[% FOREACH row IN numeros.values %]<br> <h2>[% row %]</h2><br> [% END %]
Agora que já ensinei algumas coisas básicas em Template Toolkit, vou mostrar um pouco como o Catalyst é flexível.
Por que flexível? Porque você consegue acessar qualquer função do Catalyst. Exemplos abaixo:
Imprimir URL atual com a função uri_for()
<h2>[% c.uri_for %]</h2>
resultado: http://localhost:3000/exemplo
<h2>[% c.uri_for('/site') %]</h2>
resultado: http://localhost:3000/site
Redirecionar para outra página ou site
[% c.res.redirect('http://www.perl.org') %]
Conclusão
Para saber mais sobre Catalyst e Template Toolkit, entre nas URLs abaixo:
- https://metacpan.org/module/Catalyst::View::TT
- http://template-toolkit.org/docs/manual/Intro.html
- http://www.catalystframework.org
- https://metacpan.org
- http://sao-paulo.pm.org
- http://www.perl.org
Espero que tenham gostado!
Até o próximo!