Catalyst Framework Perl - Parte III

Nesse artigo vou mostrar o básico sobre como usar os Actions para definir a organização de sua aplicação e como capturar os argumentos.

[ Hits: 7.659 ]

Por: Lucas em 30/10/2012


Usando os Actions



Primeiro vamos criar o Controller Home, para isso, digite no seu terminal:

# cd MyApp
# script/myapp_create.pl controller Home


Tirando os comentários que é gerado pelo "helper", o Controller Home está assim:

package MyApp::Controller::Home;
use Moose;
use namespace::autoclean;

BEGIN {extends 'Catalyst::Controller'; }

sub index : Path : Args(0) {
my ( $self, $c ) = @_;

$c->response->body('Matched MyApp::Controller::Home in Home.');
}

__PACKAGE__->meta->make_immutable;

1;

Com a crianção do Controller usando Helper, já gerou nosso primeiro exemplo de Action:

sub index : Path : Args(0) {}

Esse nosso primeiro Action, que é o index do nosso Controller e é um Action especial, o manual do Catalyst aconselha a não alterar este Action.

Leia mais em:
Agora vamos criar um Action com nome de "foo", usando o tipo Local:

sub foo : Local {}

Esse tipo Local como o Path, usa o nome do Controller como namespace nas URLs, exemplos:
  • http://localhost:3000/home/foo
  • http://localhost:3000/home/foo/argumento1
  • http://localhost:3000/home/foo/argumento1/argumento2
  • http://localhost:3000/home/foo/*

Nesse Action, podemos passar vários argumentos sem problemas. Para você conseguir limitar estes argumentos, podemos usar Args, que não é um tipo de Action, mas é uma função que modifica a ação do Action, limitando a quantidade de argumentos.

Exemplos:

- Passar só um argumento:

sub foo : Local : Args(1) {}

Limita você só acessar na URL: http://localhost:3000/home/foo/argumento1

- Passar dois argumentos:

sub foo : Local : Args(2) {}

Limita você só acessar na URL: http://localhost:3000/home/foo/argumento1/argumento2

Se você passar argumentos a mais ou menos na URL, o retorno vai ser erro 404, com a mensagem "Page not found".

Com Path, podemos definir nossa URL como quiser, podendo até passar caracteres e símbolos. Exemplos:

- Primeiro exemplo:

sub foo : Path('lucas-tiago') {}

Você poderá acessar a URL assim:
  • http://localhost:3000/home/lucas-tiago
  • http://localhost:3000/home/lucas-tiago/argumento1
  • http://localhost:3000/home/lucas-tiago/argumento1/argumento2
  • http://localhost:3000/home/lucas-tiago/*

- Passar só um argumento:

sub foo : Path('LUCAS') : Args(1) {}

Limita você só acessar na URL: http://localhost:3000/home/LUCAS/argumento1

- Passar três argumentos

sub foo : Path('Brasil') : Args(3) {}

Limita você só acessar na URL: http://localhost:3000/home/Brasil/argumento1/argumento2/argumento3

Lembrado que, se você passar argumentos a mais ou menos na URL, o retorno vai ser erro 404, com a mensagem "Page not found".

Agora vamos falar do Global, como o próprio nome diz, este tipo não usa nenhum namespace na URL, só o nome do Action. Exemplos:

- Primeiro exemplo:

sub europa : Global {}

Você poderá acessar a URL assim:
  • http://localhost:3000/europa
  • http://localhost:3000/europa/argumento1
  • http://localhost:3000/europa/argumento1/argumento2
  • http://localhost:3000/europa/*

Sobre Args, você pode usar igual aos exemplos com Local e Path.

Agora vamos ver sobre Regex e LocalRegex, os dois tipos trabalham com expressões regulares, a única diferença entre os dois é que Regex é global e LocalRegex é local. Exemplos:

- Primeiro exemplo usando Regex:

sub foo : Regex('^[a-z]{5}$') {}

Você poderá acessar a URL assim:
  • http://localhost:3000/lucas
  • http://localhost:3000/teste
  • http://localhost:3000/barco

Com a regex ^[a-z]{5}$ você é limitado a acessar com caracteres de 'a' ate 'z', e com total de 5 caracteres. Se você passar caracteres a mais, ou menos ou diferentes na URL, o retorno vai ser erro 404, com a mensagem "Page not found".

Segundo exemplo usando Regex, eu peguei do próprio manual do Catalyst:

sub foo : Regex('^item(\d+)/order(\d+)$') {}

Você poderá acessar a URL assim:
  • http://localhost:3000/item34/order56
  • http://localhost:3000/item6/order2
  • http://localhost:3000/item100/order800

Com a regex ^item(\d+)/order(\d+)$ você é limitado a colocar 'item' seguido de caracteres numéricos e 'order' seguido de caracteres numéricos. Se você passar caracteres diferentes na URL, o retorno vai ser erro 404, com a mensagem "Page not found".

Usando LocalRegex é a mesma lógica de Regex, o que muda é que você é obrigado a colocar o namespace do Controller no início, exemplo:

sub foo : LocalRegex('^item(\d+)/order(\d+)$') {}

Você poderá acessar a URL assim:
  • http://localhost:3000/home/item34/order56
  • http://localhost:3000/home/item6/order2
  • http://localhost:3000/home/item100/order800


    Próxima página

Páginas do artigo
   1. Usando os Actions
   2. Capturando os argumentos
Outros artigos deste autor

Executando os principais frameworks Perl no cPanel com CGI

URL amigável com Perl

Configurando OTRS com PSGI/Plack e executando com Starman

Catalyst Framework Perl - (parte 2)

Catalyst Framework Perl (parte 1)

Leitura recomendada

Executando os principais frameworks Perl no cPanel com CGI

Phperl, minha gambiarra para usar Perl como se fosse PHP

Twittando com o Perl (parte 1)

Programando uma Intranet com Apache, MySQL e Perl (parte 1)

Introdução a CGI com a RFC 3875

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts