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.018 ]

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

Catalyst Framework Perl - (parte 2)

URL amigável com Perl

Executando os principais frameworks Perl no cPanel com CGI

Configurando OTRS com PSGI/Plack e executando com Starman

Catalyst Framework Perl (parte 1)

Leitura recomendada

Introdução a CGI com a RFC 3875

Phperl, minha gambiarra para usar Perl como se fosse PHP

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

Catalyst Framework Perl (parte 1)

Executando os principais frameworks Perl no cPanel com CGI

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário