[Cascavel-pm] Catalyst: Dispatching

Nilson Santos Figueiredo Jr. acid06 em gmail.com
Sexta Maio 21 08:44:52 PDT 2010


2010/5/21 Ednardo Lobo <ednardo em lobo.eti.br>:
> Porém, no Catalyst, não consegui ainda compreender muito bem como seria esse
> fluxo de execução que, no caso, é orquestrado pelo DISPATCHING. Mas imagino
> que seria assim:
>
> URL: /cliente/mod/3 ou /cliente/3/mod
>
> Execução: MyApp::Cliente -> mod(3) ou MyApp::Cliente::Mod -> do(3)

Vai depender de como você fez as suas chains. Se você "brincar" com o
exemplo que eu postei no email anterior, provavelmente suas dúvidas
serão esclarecidas.
No exemplo, tente mudar nomes de métodos, PathParts e depois as Chains
mesmo pra ver o que acontece. Sempre observe as mudanças que
aconteceram na tabela que o Catalyst imprime assim que o aplicativo
inicia.

> 1) Como enxertar o HTML da operação específica no HTML base?
>
> 2) Atribuir a View para, digamos, $c->stash->{enxerto} é o melhor caminho?
>
> 3) É possível executar isto de forma implícita, ou seja, se nada ao
> contrário for dito o resultado do processamento da View vai direto para
> $c->stash->{enxerto}.

Não é necessário fazer nada disso, o TT vai fazer isso pra você,
usando o comando WRAPPER, como já demonstraram.
Isso, inclusive, independe do Catalyst.

>>  package MyApp::Controller::PurchaseOrder;
>>
>>  sub base : Chained ('.') CaptureArgs( 0 ) {
>>      # lógica que vai ser executada para cada ação nesse controller
>>  }
>>
>> [snip]
>>
>> E aí, no seu controlador Root, coloca algo assim, para cada um dos
>> controladores usando esse esquema:
>>
>>  package MyApp::Controller::Root;
>>
>>  sub purchaseorder : Chained('/') PathPart('purchaseorder') {}
>
> Não compreendi a necessidade desta linha em ::Root?

A action "base" do controller PurchaseOrder encadeia em ".", o que
significa encadear no "chain point" com o nome do namespace atual.
No root você define esse "chain point", para que ele tenha onde encadear.

Provavelmente, no seu Root, você também vai querer algo com base/chain
points, i.e.:

  package MyApp::Controller::Root;

  sub base : Chained('/') PathPart('') {
      # código que será executado para todos os requests Chained
  }

  sub purchaseorder : Chained('base') PathPart('purchaseorder') {}


> Irei experimentar sim, mas poderia indicar um desses módulos?

Catalyst::Action::REST
CatalystX::CRUD

-Nilson


Mais detalhes sobre a lista de discussão Cascavel-pm