Back-End

2 dez, 2011

Usando o Catalyst Framework Perl – Parte 02

Publicidade

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__-&gt;config(<br>         TEMPLATE_EXTENSION =&gt; '.tt', <br>         render_die =&gt; 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-&gt;response-&gt;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 =&gt; 1,<br>             dois =&gt; 2,<br>             tres =&gt; 3,<br>             quatro =&gt; 4,<br>             cinco =&gt; 5<br>         );<br>              # enviar escalar nome para o template<br>         $c-&gt;stash-&gt;{nome} = 'Lucas';<br>          # enviar array cores para o template<br>         $c-&gt;stash-&gt;{cores} = &#92;@cores;<br>              # enviar hash numeros para o template<br>         $c-&gt;stash-&gt;{numeros} = &#92;%numeros;<br>          # nome do arquivo, se mudou a extensão altere, ex: 'index.htm'<br>         $c-&gt;stash-&gt;{template} = 'index.tt';<br>              # formato da view<br>         $c-&gt;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>         &lt;h2&gt;Verdadeiro/h2&gt;<br>     [% END %]

IF ‘nome’ é diferente a ‘Lucas’

    [% IF nome != 'Lucas' %]<br>         &lt;h2&gt;Verdadeiro/h2&gt;<br>     [% END %]

Comparar a escalar nome com IF e ELSE

IF ‘nome’ é igual a ‘Lucas’

    [% IF nome == 'Lucas' %]<br>         &lt;h2&gt;Verdadeiro/h2&gt;<br>     [% ELSE %]<br>         &lt;h2&gt;Falso/h2&gt;<br>     [% END %]

IF ‘nome’ é diferente a ‘Lucas’

    [% IF nome != 'Lucas' %]<br>         &lt;h2&gt;Verdadeiro/h2&gt;<br>     [% ELSE %]<br>         &lt;h2&gt;Falso/h2&gt;<br>     [% END %]

Comparar a escalar nome com IF, ELSIF e ELSE

ELSIF ‘nome’ é igual a ‘Lucas’

    [% IF nome == 'Tiago' %]<br>         &lt;h2&gt;Verdadeiro IF/h2&gt;<br>     [% ELSIF nome == 'Lucas' %]<br>         &lt;h2&gt;Verdadeiro ELSIF&lt;/h2&gt;<br>     [% ELSE %]<br>         &lt;h2&gt;Falso/h2&gt;<br>     [% END %]

ELSIF ‘nome’ é diferente a ‘Lucas’

    [% IF nome == 'Tiago' %]<br>         &lt;h2&gt;Verdadeiro IF/h2&gt;<br>     [% ELSIF nome != 'Lucas' %]<br>         &lt;h2&gt;Verdadeiro ELSIF&lt;/h2&gt;<br>     [% ELSE %]<br>         &lt;h2&gt;Falso/h2&gt;<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>         &lt;h2&gt;[% row %]&lt;/h2&gt;<br>     [% END %]

Imprimir índices da hash números

    [% FOREACH row IN numeros %]<br>         &lt;h2&gt;[% row.key %]&lt;/h2&gt;<br>     [% END %]

ou

    [% FOREACH row IN numeros.keys %]<br>         &lt;h2&gt;[% row %]&lt;/h2&gt;<br>     [% END %]

Imprimir valores da hash números

    [% FOREACH row IN numeros %]<br>         &lt;h2&gt;[% row.value %]&lt;/h2&gt;<br>     [% END %]

    [% FOREACH row IN numeros.values %]<br>         &lt;h2&gt;[% row %]&lt;/h2&gt;<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:

Espero que tenham gostado!

Até o próximo!