<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Eu acho que está havendo uma pequena confusão aqui. O Catalyst não
foi feito para rodar um Hello World. Foi feito para estimular boas
práticas de desenvolvimento de webapps, e ajudar o desenvolvedor a
deixar seu código com uma fácil manutenção. Por que você iria criar
um modelo, uma view, e um controller separados apenas pra rodar um
Hello World? Se sua aplicação é tão simples assim, talvez você não
devesse usar Catalyst mesmo (Eden, não me mate!!).<br>
<br>
<a class="moz-txt-link-freetext" href="http://www.shadowcat.co.uk/archive/conference-video/nwepm/catalyst-dbic/">http://www.shadowcat.co.uk/archive/conference-video/nwepm/catalyst-dbic/</a><br>
<br>
Catalyst não tem screencasts populares de se fazer blogs em 10
minutos, mas com ele você produz sistemas que você pode voltar
meses, anos depois, e vai conseguir manter com facilidade.<br>
<br>
Se simplicidade é menos linhas código, experimente estes exemplos:<br>
<br>
<?php echo "Hello world" ?><br>
<br>
use CGI;<br>
print "Content-type: text/html\n\nHello world";<br>
<br>
Funcionam perfeitamente também.<br>
<br>
O código que você colou de sessões no Catalyst é bem diferente do
exemplo que você deu do Mojolicious. Faz coisas diferentes, e contém
um monte de comentários, por isso é maior. Só porque o código de
exemplo é mais amplo não significa que o resultado final é mais
complexo.<br>
<br>
Na minha opinião, tudo se resume a usar a ferramenta correta para o
projeto, cada uma tem prós e contras. E o resto é apenas
preferência. TIMTOWTDI. Não sei por que tanta briga.<br>
<br>
Abraços!<br>
André<br>
<br>
On 07/13/2011 06:48 AM, Nelson Ferraz wrote:
<blockquote
cite="mid:CAG+zsv17fG9Fv4iv4QoVB2nZs=pN-hU6vFJO0cd_RWzxV6vUaQ@mail.gmail.com"
type="cite">
<meta http-equiv="Context-Type" content="text/html;
charset=ISO-8859-1">
<div>Simplicidade é algo difícil de definir, mas todo mundo
consegue identificar.</div>
<br>
Vamos começar com um exemplo que eu considero simples:<br>
<br>
<br>
use Mojolicious::Lite;<br>
<br>
get '/' => sub {<br>
my $self = shift;<br>
my $name = $self->param('name') || 'world';<br>
$self->render( text => "Hello, $name" );<br>
};<br>
<br>
app->start(); <br>
<br>
<div><br>
<br>
Esta é uma aplicação mínima, porém completa. Você pode
executá-la e testá-la em <a moz-do-not-send="true"
href="http://localhost:3000">http://localhost:3000</a>.<br>
<br>
Agora, vamos dizer que eu queira usa um template:<br>
<br>
<br>
use Mojolicious::Lite;<br>
<br>
get '/' => sub {<br>
my $self = shift;<br>
my $name = $self->param('name') || 'world';<br>
<b>$self->stash( name => $name )</b>;<br>
} <b>=> 'index';</b><br>
<br>
app->start();<br>
<br>
<b> __DATA__<br>
@@ index.html.ep<br>
<h1>Hello, <%= $name %>!</h1></b> <br>
<br>
<br>
</div>
<div><br>
(Sob o ponto de vista didático é conveniene mostrar o template
junto com o código, para que as pessoas possam copiar e
colar; na prática eu criaria um arquivo dentro de um diretório
chamado "templates", que seria reconhecido automaticamente.)</div>
<div><br>
E se eu quiser usar um arquivo de configuração? Basta criar um
arquivo chamado "app.conf". (Onde "app" é igual ao nome da
aplicação). Exemplo:<br>
<br>
<br>
{<br>
default_name => 'world'<br>
}<br>
<br>
<br>
</div>
<div><br>
Para usar o arquivo de configuração:<br>
<br>
<br>
<br>
use Mojolicious::Lite;<br>
<br>
<b> plugin 'config';<br>
</b><br>
get '/' => sub {<br>
my $self = shift;<br>
my $name = $self->param('name') || <b>$self->config('default_name')</b>;<br>
$self->stash( name => $name );<br>
} => 'index';<br>
<br>
app->start();<br>
<br>
__DATA__<br>
@@ index.html.ep<br>
<h1>Hello, <%= $name %>!</h1><br>
<br>
<br>
</div>
<div><br>
</div>
<div>Se você quiser acessar a variável de configuração a partir do
template:
<div><br>
</div>
<div><br>
</div>
<div> <span> use Mojolicious::Lite;<br>
<br>
plugin 'config';<br>
<br>
get '/' => sub {<br>
my $self = shift;<br>
my $name = $self->param('name');<br>
$self->stash( name => $name );<br>
} => 'index';<br>
<br>
app->start();<br>
<br>
__DATA__<br>
@@ index.html.ep<br>
<h1>Hello, <%= $name <b>||
config('default_name')</b> %>!</h1><br>
</span></div>
<div> <br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>Vamos, agora, guardar o nome em uma variável de sessão:</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div> use Mojolicious::Lite; </div>
<div> <br>
</div>
<div> plugin 'config'; </div>
<div> </div>
<div> get '/' => sub { </div>
<div> my $self = shift; </div>
<div> <br>
</div>
<div> my $name = $self->param('name') </div>
<div> <b> || $self->session('name')</b>
</div>
<div> || $self->config('default_name');
</div>
<div> <br>
</div>
<div> <b> $self->session( name => $name );</b>
</div>
<div> <br>
</div>
<div> $self->stash( name => $name ); </div>
<div> } => 'index'; </div>
<div> app->start(); </div>
<div> __DATA__ </div>
<div> @@ index.html.ep </div>
<div> <h1>Hello, <%= $name %>!</h1>
</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>Aí está: um exemplo completo, com template, arquivo de
configuração externo, e sessão.</div>
<div><br>
</div>
<div>Compare com a página de documentação do
Catalyst::Plugin::Session:</div>
<div><br>
</div>
<div> <span>
<pre> <span># To get sessions to "just work", all you need to do is use these plugins:</span>
<span>use</span> Catalyst <span>qw</span><span>/</span>
Session
Session<span>::</span>Store<span>::</span>FastMmap
Session<span>::</span>State<span>::</span>Cookie
<span>/;</span>
<span># you can replace Store::FastMmap with Store::File - both have sensible</span>
<span># default configurations (see their docs for details)</span>
<span># more complicated backends are available for other scenarios (DBI storage,</span>
<span># etc)</span>
<span># after you've loaded the plugins you can save session data</span>
<span># For example, if you are writing a shopping cart, it could be implemented</span>
<span># like this:</span>
<span>sub</span> add_item <span>:</span> Local <span>{</span>
<span>my</span> <span>(</span> <span>$self</span><span>,</span> <span>$c</span> <span>)</span> <span>=</span> <span>@_</span><span>;</span>
<span>my</span> <span>$item_id</span> <span>=</span> <span>$c</span><span>-></span>req<span>-></span><span>param</span><span>(</span><span>"item"</span><span>);</span>
<span># $c->session is a hash ref, a bit like $c->stash</span>
<span># the difference is that it' preserved across requests</span>
<span>push</span> @<span>{</span> <span>$c</span><span>-></span>session<span>-></span><span>{</span>items<span>}</span> <span>}</span><span>,</span> <span>$item_id</span><span>;</span>
<span>$c</span><span>-></span><span>forward</span><span>(</span><span>"MyView"</span><span>);</span>
<span>}</span>
<span>sub</span> display_items <span>:</span> Local <span>{</span>
<span>my</span> <span>(</span> <span>$self</span><span>,</span> <span>$c</span> <span>)</span> <span>=</span> <span>@_</span><span>;</span>
<span># values in $c->session are restored</span>
<span>$c</span><span>-></span>stash<span>-></span><span>{</span>items_to_display<span>}</span> <span>=</span>
<span>[</span> <span>map</span> <span>{</span> MyModel<span>-></span><span>retrieve</span><span>(</span><span>$_</span><span>)</span> <span>}</span> @<span>{</span> <span>$c</span><span>-></span>session<span>-></span><span>{</span>items<span>}</span> <span>}</span> <span>];</span>
<span>$c</span><span>-></span><span>forward</span><span>(</span><span>"MyView"</span><span>);</span>
<span>}</span></pre>
</span></div>
<div><br>
</div>
<div>Este é o "problema de complexidade".</div>
<div><br>
</div>
<div>Se o Catalyst::Lite puder reunir a simplicidade do
Mojolicious com a solidez do Catalyst, creio que este será o
melhor dos dois mundos.</div>
<div><br>
</div>
<div>[]s</div>
<div><br>
</div>
<div>Nelson</div>
<div><br>
</div>
</div>
<pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
=begin disclaimer
Sao Paulo Perl Mongers: <a class="moz-txt-link-freetext" href="http://sao-paulo.pm.org/">http://sao-paulo.pm.org/</a>
SaoPaulo-pm mailing list: <a class="moz-txt-link-abbreviated" href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a>
L<a class="moz-txt-link-rfc2396E" href="http://mail.pm.org/mailman/listinfo/saopaulo-pm"><http://mail.pm.org/mailman/listinfo/saopaulo-pm></a>
=end disclaimer
</pre>
</blockquote>
<br>
</body>
</html>